由于某种原因,使用径向基函数 (RBF) 进行插值失败

机器算法验证 r 插值 rbf-网络
2022-03-22 00:05:04

这不是一个纯粹的编程问题。我试图了解当我尝试将 RBF 与 5 个中心一起使用时发生了什么。我用 R 来举例说明,见下文。

我的数据集:

x <- c(0.0, 11.0, 17.9, 49.3, 77.4)
y <- c(0.2497978, 0.5090220, 0.5373010, 0.6032853, 0.5938590)

我想用 RBF 网络插入这些数据。我从回归开始(即中心数 < 点数),一切看起来都很好,但是当我进行插值时,有些东西坏了。所以,让我们从 2 个中心开始:

library(RSNNS)
set.seed(21)
rbf.model <- rbf(x, y, size = 2, maxit = 1000, linOut = TRUE)
fitted(rbf.model)-y
#                [,1]
#  [1,] -2.100049e-03
#  [2,]  2.320548e-02
#  [3,]  2.218202e-02
#  [4,] -4.328762e-02
#  [5,] -1.303689e-07

不错,作为第一次尝试。让我们增加中心的数量:size = 4似乎可以完成这项工作(如预期的那样,错误减少了):

set.seed(21) 
rbf.model <- rbf(x, y, size = 4, maxit = 1000, linOut = TRUE)
fitted(rbf.model)-y
#                [,1]
#  [1,]  6.058715e-08
#  [2,] -2.139242e-07
#  [3,] -3.251499e-07
#  [4,]  1.136976e-08
#  [5,] -1.115963e-08

我应该有size = 5机器零阶的残差,因为现在我的 RBF 网络应该插入数据。这与增加次数的多项式相同 - 随着p多项式的次数增加到数据点的数量(样本大小),MSE 减小直到达到 0。但是......

set.seed(21) 
rbf.model <- rbf(x, y, size = 5, maxit = 1000, linOut = TRUE)
fitted(rbf.model)-y
#             [,1]
#  [1,] -0.2098933
#  [2,] -0.4351147
#  [3,] -0.4650128
#  [4,] -0.5511093
#  [5,] -0.5425800

什么平分?!这不仅仅是迭代次数的问题,因为即使增加maxit了两个数量级(!),我仍然无法匹配size = 2案例的准确性。

set.seed(21) 
rbf.model <- rbf(x, y, size = 5, maxit = 100000, linOut = TRUE)
fitted(rbf.model)-y
#               [,1]
#  [1,]  0.006449462
#  [2,] -0.038574433
#  [3,] -0.065376905
#  [4,] -0.099974621
#  [5,] -0.099898588

也许问题可能在于size = 5,模型的 Gram 矩阵变得奇异。但是,必须有一种方法可以使用 RBF 进行插值,因为这是很常见的事情。

你能帮我理解这里发生了什么吗?

0个回答
没有发现任何回复~