这不是一个纯粹的编程问题。我试图了解当我尝试将 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 进行插值,因为这是很常见的事情。
你能帮我理解这里发生了什么吗?