数据相同Sigma不同的拟合效果
Sigma=20
对应高斯核函数形状
Sigma=10
高斯核函数形状
Sigma=5
高斯核
Sigma=2.5
高斯核
Sigma=1.25
高斯核形状
验证代码
% 清空
clc;
clear all;
%生成训练数据
R = 100;
x = -sqrt(R):1:sqrt(R);
y = -sqrt(R):1:sqrt(R);
[ Row Col ] = size(x);
cnt = 1;
for i=1:1:Col
for j=1:1:Col
xt(cnt) = x(i);
yt(cnt) = y(j);
zt(cnt) = sqrt(R^2-x(i)^2-y(j)^2);
cnt = cnt + 1;
end
end
Sigma = 1.25;
weight = calculate_weights(xt,yt,zt,Sigma);
% 生成数据验证RBF网络计算结果
xS = -sqrt(R):0.5:sqrt(R);
yS = -sqrt(R):0.5:sqrt(R);
cnt = 1;
[ Row Col ] = size(yS);
for i=1:1:Col
for j=1:1:Col
xt1(cnt) = xS(i);
yt1(cnt) = yS(j);
zt1(cnt) = sqrt(R^2-xS(i)^2-yS(j)^2);
cnt = cnt + 1;
end
end
% 根据RBF计算的验证位置的Z数据
zpre = calculate_rbf_value(weight,Sigma,xt1,yt1,xt,yt);
plot3(xt,yt,zt,'g*');
hold on;
plot3(xt1,yt1,zpre,'ro');
hold off;
关于Sigma的一些猜想
- 核函数的导数情况要尽量和曲面的导数情况相核,这样会更好拟合,而且在数据稀疏的情况下更能贴近真实曲面;
- 曲面较为平坦的情况下可尽量取大高斯核函数的Sigma;