1.定义:曲线拟合(curve fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。主要方法就是我们高中学过的最小二乘法。
2.实例拟合曲线
用BP神经网络拟合给出的点的曲线,10个点分别为(0,3)、(1,1)、(2,2)、(3,4)、(4,6)、(5,5)、(6,2)、(7,1)、(8,6)、(9,8)、(10,9)
close all;%close all是将所有打开的图片关掉。
P = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
T = [3, 1, 2, 4, 6, 5, 2, 1, 6, 8, 9];
%由于feedforwardnet函数自动对样本进行归一化和划分训练、验证、测试集,
net = feedforwardnet(10, 'traingd');
%是'5'是指隐含层有10个神经元,这里只有一个隐含层,多个隐含层神经元的个数设置为[10,3,...]
net.trainParam.lr = 0.01; %学习速率
net.trainParam.epochs = 10000; %最大训练次数
net.trainParam.goal = 1e-6; %最小误差,达到该精度,停止训练
net.trainParam.show = 50; %每50次展示训练结果
net = train(net, P, T); %训练
Y = net(P); %输出
perf = perform(net, Y, T);%误差
plot(P, T, P, Y, 'r-')
修改成3个和4个神经元的2个隐含层,发现拟合曲线偏离严重。也就是误差越小越好。
close all;%close all是将所有打开的图片关掉。
P = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
T = [3, 1, 2, 4, 6, 5, 2, 1, 6, 8, 9];
%由于feedforwardnet函数自动对样本进行归一化和划分训练、验证、测试集,
%所以就不用手动将数据进行归一化处理,但不知道有没有打乱顺序
% n=size(P,2); temp=randperm(n); P_train=P(temp(1:8));
% T_train=T(temp(1:8)); P_test=P(temp(9:end)); T_test=T(temp(9:end));
%
% [p_train,p_input]=mapminmax(P_train,0,1);
% [t_train,t_output]=mapminmax(T_train,0,1);
% p_test=mapminmax(P_test,p_input);
net = feedforwardnet([3,4], 'traingd');
%是'3'是指隐含层有3个神经元,这里只有一个隐含层,多个隐含层神经元的个数设置为[3,4,...]
net.trainParam.lr = 0.01; %学习速率
net.trainParam.epochs = 10000; %最大训练次数
net.trainParam.goal = 1e-6; %最小误差,达到该精度,停止训练
net.trainParam.show = 50; %每50次展示训练结果
net = train(net, P, T); %训练
Y = net(P); %输出
perf = perform(net, Y, T);%误差
plot(P, T, P, Y, 'r-')