基于神经网络的数据分类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%预测误差 error=a-t_test; figure(3) plot(error,'-*') title(‘BP网络预测误差') ylabel(‘误差') xlabel(‘样本')
.
5.显示分类结果:
figure(3) count=0; %误分类次数 hold on; for i=1:60 %预测与实际类别都为1 if a(i)<1.5 if t(i)<1.5 plot(p(1,i),p(4,i),‘ro’); else plot(p(1,i),p(4,i),'r*'); count=count+1; End %预测与实际类别都为3 elseif a(i)>2.5 if t_test(i)>2.5
期望输出
0.9
2.6
0.8
2.4
0.7
2.2
0.6
2
0.5
1.8
0.4
1.6
0.3
1.4
0.2
1.2
0.1
1
0
0
10
20
30
40
50
60
0
10
20
30
40
50
60
样本
样本
出现分类错误的原因可能是训练的样本太少,或者是隐层节点数选择 不合适,接下来在经验值范围内改变隐层节点数,观察分类结果。
.
类别 误差
data=load(‘data.txt’);
p=data(:,1:4)‘; %输入量
t=data(:,5)‘;
%输出量
%导入测试样本的数据
testdata=load(‘testdata.txt’);
p_test=testdata(:,1:4)‘; %输入量
t_test=testdata(:,5)‘;
基于神经网络的数据分类
.
花萼长度 5.4 5 6.2 5.5 6.1 7.9 6.3
花萼宽度 3.9 3.4 2.2 2.3 2.8 3.8 2.8
花瓣长度 1.7 1.5 4.5 4 4.7 6.4 5.1
花瓣宽度 0.4 0.2 1.5 1.3 1.2 2 1.5
类别 1 1 2 2 2 3 3
3.仿真 a = sim(net,pn_test); a=round(a); %对预测出的类别a取整
4.结果分析
.
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
4
4.5
5
5.5
6
6.5
7
图中红色为第一类,蓝色为第二类,绿色为第三类。结果 显示有一个数据分类错误,分类正确率为98.33%。
.
类别 误差
.
.
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
4
4.5
5
5.5
6
6.5
7
rate = 0.9833
图中红色为第一类,蓝色为第二类,绿色为第三类。结果 显示有一个数据分类错误,分类正确率为98.33%。
.
类别 误差
BP网 络 预 测 输 出 3
BP网 络 预 测 误 差 1
预测输出
2.8
有一批花可分为三个品种,利用神经网络算法,根据 花萼长度,花萼宽度,花瓣长度和花瓣宽度对其进行分类。
.
样本包含150组数据,选择90组作为训练样本,60组作 为测试样本。输入数据为[花萼长度 花萼宽度 花瓣长度 花 瓣宽度],输出数据为花的品种的类别。
要做的工作:
1.建立一个神经网络 2.使用样本训练这个网络 3.使用新的数据集测试这个网络分类的准确性
.
由上图可看出:RBF算法在训练过程中比BP算法学习速度快。
.
结论:
1.BP神经网络和RBF神经网络都能通过训练学习,以任意 精度逼近任意非线性函数。 2.神经网络隐含层的节点个数能影响网络输出结果的精度。 3.RBF算法比BP算法学习速度快,需要训练的时间短。
.
பைடு நூலகம்
3 2.8 2.6 2.4 2.2
2 1.8 1.6 1.4 1.2
1 0
BP网 络 预 测 输 出
预测输出 期望输出
10
20
30
40
50
60
样本
1 0.8 0.6 0.4 0.2
0 -0.2 -0.4 -0.6 -0.8
-1 0
BP网 络 预 测 误 差
10
20
30
40
50
60
样本
1.8
1.6
1.4 1.2
1
0.8
0.6
0.4
0.2
0
4
4.5
5
5.5
6
6.5
7
当隐层节点数为9时, 分类正确率为100%。
.
RBF神经网络
输入层节点数:4 输出层节点数:1 隐层节点数:m=sqrt(n+l)+a (n为输入层节点数,l为输出层节点数,a为1~10之间的常数)
1.数据预处理
2.创建一个新的RBF神经网络: net = newrb(pn,t,0.001,1,10,1); %散步常数spread=1 %训练精度goal=0.001 %显示频率df=1 %隐含层节点数m=10
%隐含层传递函数为transing; %输出层传递函数为purelin; %训练函数为traingdx(有动量和自适应lr的梯度下降法)
3.训练参数选择:
net.trainParam.show = 50; %显示训练结果的间隔步数 net.trainParam.epochs=1000; %最大训练次数 net.trainParam.goal=0.001; %训练目标误差 net.trainParam.lr = 0.01; %学习系数
rate=(60-count)/60 %正确率
plot(p(1,i),p(4,i),'go'); else plot(p(1,i),p(4,i),'g*'); count=count+1; end %预测与实际类别都为1 else if(t_test(i)<=2.5)&&(t_test(i)>=1.5) plot(p(1,i),p(4,i),'bo'); else plot(p(1,i),p(4,i),'b*'); count=count+1; end end end
%输出量
%数据归一化到[-1 +1] [pn,ps] = mapminmax(p);
%数据归一化到[-1 +1] [pn_test,ps] = mapminmax(p_test);
.
2.创建一个新的BP神经网络:
net = newff(minmax(pn),[10 1],{'tansig''purelin'},'traingdx');
net=train(net,pn,t);
%开始训练
.
4.仿真并绘制结果:
a = sim(net,pn_test); a=round(a); %四舍五入取整
figure(1) plot(a,':or') hold on plot(t_test,'-*'); legend(‘预测类别‘,’实际类别’) title(‘BP网络预测输出') ylabel(‘类别') xlabel(‘样本’)
3 2.8 2.6 2.4 2.2
2 1.8 1.6 1.4 1.2
1 0
RBF网 络 预 测 输 出
1
预测输出
期望输出
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
10
20
30
40
50
60
0
样本
RBF网 络 预 测 误 差
10
20
30
40
50
60
样本
通过上述实验可看出BP神经网络和RBF神经网络都能通过学习和 训练以任意精度逼近任何非线性函数。
.
BP神经网络
网络层数:2 输入层节点数:4 输出层节点数:1 隐层节点数:m=sqrt(n+l)+a (n为输入层节点数,l为输出层节点数,a为1~10之间的常数)
1.数据预处理: data.txt中有90组数据,作为训练样本;testdata.txt中有60组数据, 作为测试样本。
%导入训练样本的数据
.
5.显示分类结果:
figure(3) count=0; %误分类次数 hold on; for i=1:60 %预测与实际类别都为1 if a(i)<1.5 if t(i)<1.5 plot(p(1,i),p(4,i),‘ro’); else plot(p(1,i),p(4,i),'r*'); count=count+1; End %预测与实际类别都为3 elseif a(i)>2.5 if t_test(i)>2.5
期望输出
0.9
2.6
0.8
2.4
0.7
2.2
0.6
2
0.5
1.8
0.4
1.6
0.3
1.4
0.2
1.2
0.1
1
0
0
10
20
30
40
50
60
0
10
20
30
40
50
60
样本
样本
出现分类错误的原因可能是训练的样本太少,或者是隐层节点数选择 不合适,接下来在经验值范围内改变隐层节点数,观察分类结果。
.
类别 误差
data=load(‘data.txt’);
p=data(:,1:4)‘; %输入量
t=data(:,5)‘;
%输出量
%导入测试样本的数据
testdata=load(‘testdata.txt’);
p_test=testdata(:,1:4)‘; %输入量
t_test=testdata(:,5)‘;
基于神经网络的数据分类
.
花萼长度 5.4 5 6.2 5.5 6.1 7.9 6.3
花萼宽度 3.9 3.4 2.2 2.3 2.8 3.8 2.8
花瓣长度 1.7 1.5 4.5 4 4.7 6.4 5.1
花瓣宽度 0.4 0.2 1.5 1.3 1.2 2 1.5
类别 1 1 2 2 2 3 3
3.仿真 a = sim(net,pn_test); a=round(a); %对预测出的类别a取整
4.结果分析
.
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
4
4.5
5
5.5
6
6.5
7
图中红色为第一类,蓝色为第二类,绿色为第三类。结果 显示有一个数据分类错误,分类正确率为98.33%。
.
类别 误差
.
.
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
4
4.5
5
5.5
6
6.5
7
rate = 0.9833
图中红色为第一类,蓝色为第二类,绿色为第三类。结果 显示有一个数据分类错误,分类正确率为98.33%。
.
类别 误差
BP网 络 预 测 输 出 3
BP网 络 预 测 误 差 1
预测输出
2.8
有一批花可分为三个品种,利用神经网络算法,根据 花萼长度,花萼宽度,花瓣长度和花瓣宽度对其进行分类。
.
样本包含150组数据,选择90组作为训练样本,60组作 为测试样本。输入数据为[花萼长度 花萼宽度 花瓣长度 花 瓣宽度],输出数据为花的品种的类别。
要做的工作:
1.建立一个神经网络 2.使用样本训练这个网络 3.使用新的数据集测试这个网络分类的准确性
.
由上图可看出:RBF算法在训练过程中比BP算法学习速度快。
.
结论:
1.BP神经网络和RBF神经网络都能通过训练学习,以任意 精度逼近任意非线性函数。 2.神经网络隐含层的节点个数能影响网络输出结果的精度。 3.RBF算法比BP算法学习速度快,需要训练的时间短。
.
பைடு நூலகம்
3 2.8 2.6 2.4 2.2
2 1.8 1.6 1.4 1.2
1 0
BP网 络 预 测 输 出
预测输出 期望输出
10
20
30
40
50
60
样本
1 0.8 0.6 0.4 0.2
0 -0.2 -0.4 -0.6 -0.8
-1 0
BP网 络 预 测 误 差
10
20
30
40
50
60
样本
1.8
1.6
1.4 1.2
1
0.8
0.6
0.4
0.2
0
4
4.5
5
5.5
6
6.5
7
当隐层节点数为9时, 分类正确率为100%。
.
RBF神经网络
输入层节点数:4 输出层节点数:1 隐层节点数:m=sqrt(n+l)+a (n为输入层节点数,l为输出层节点数,a为1~10之间的常数)
1.数据预处理
2.创建一个新的RBF神经网络: net = newrb(pn,t,0.001,1,10,1); %散步常数spread=1 %训练精度goal=0.001 %显示频率df=1 %隐含层节点数m=10
%隐含层传递函数为transing; %输出层传递函数为purelin; %训练函数为traingdx(有动量和自适应lr的梯度下降法)
3.训练参数选择:
net.trainParam.show = 50; %显示训练结果的间隔步数 net.trainParam.epochs=1000; %最大训练次数 net.trainParam.goal=0.001; %训练目标误差 net.trainParam.lr = 0.01; %学习系数
rate=(60-count)/60 %正确率
plot(p(1,i),p(4,i),'go'); else plot(p(1,i),p(4,i),'g*'); count=count+1; end %预测与实际类别都为1 else if(t_test(i)<=2.5)&&(t_test(i)>=1.5) plot(p(1,i),p(4,i),'bo'); else plot(p(1,i),p(4,i),'b*'); count=count+1; end end end
%输出量
%数据归一化到[-1 +1] [pn,ps] = mapminmax(p);
%数据归一化到[-1 +1] [pn_test,ps] = mapminmax(p_test);
.
2.创建一个新的BP神经网络:
net = newff(minmax(pn),[10 1],{'tansig''purelin'},'traingdx');
net=train(net,pn,t);
%开始训练
.
4.仿真并绘制结果:
a = sim(net,pn_test); a=round(a); %四舍五入取整
figure(1) plot(a,':or') hold on plot(t_test,'-*'); legend(‘预测类别‘,’实际类别’) title(‘BP网络预测输出') ylabel(‘类别') xlabel(‘样本’)
3 2.8 2.6 2.4 2.2
2 1.8 1.6 1.4 1.2
1 0
RBF网 络 预 测 输 出
1
预测输出
期望输出
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
10
20
30
40
50
60
0
样本
RBF网 络 预 测 误 差
10
20
30
40
50
60
样本
通过上述实验可看出BP神经网络和RBF神经网络都能通过学习和 训练以任意精度逼近任何非线性函数。
.
BP神经网络
网络层数:2 输入层节点数:4 输出层节点数:1 隐层节点数:m=sqrt(n+l)+a (n为输入层节点数,l为输出层节点数,a为1~10之间的常数)
1.数据预处理: data.txt中有90组数据,作为训练样本;testdata.txt中有60组数据, 作为测试样本。
%导入训练样本的数据