多层感知器的数据分类的过程

1 篇文章 0 订阅
1 篇文章 0 订阅

多层感知器就是我们称的BP神经网络,因此在做的过程中要明白BP网络的基本原理,这个原理在这里就不重复的讲了。

实现分类的过程用的是Matlab来实现的,数据集选用的是UCI提供的210条数据,共有3个类型(1,2,3),采用的是5-交叉验证的方法,对网络进行训练,并得到训练好的网络。因此在这个过程中要确定输入层,隐层,输出层的单元个数,由于类别标号为3个,因此输出层的单元个数我3,输入数据为7个,隐层的单元个数通过经典的公式来计算,一般确定为5-7个,就可以了。权值的获得是通过BP网络的默认的随机值来获得的。

具体的过程如下:

(1)    网络初始化:根据系统的输入确定网络的输入层节点的个数,隐含层节点的个数,输出层节点的个数,输入层、隐含层和输出层神经元之间的连接权值wijwjk。初始化隐含层阈值、输出层阈值,给定学习速率和激励函数;

(2)    隐含层输出计算:根据权值和阈值,计算隐含层输出H;

(3)    输出层输出计算:根据隐含层输出H,连接权值和阈值,计算BP神经网络预测输出O;

(4)    误差计算:根据网络预测输出和期望输出,计算网络预测误差;

(5)    权值更新:根据网络预测误差更新连接权重;

(6)    阈值更新:根据误差更新节点阈值;

(7)    判断算法迭代是否结束,若没有结束则返回步骤2.

具体的Matlab的代码如下:

%%...................................................
%%对环境和数据进行预处理
%%...................................................
%%清除环境变量
clc
clear
%%导入数据
N=load('D:\seeds_dataset.txt');
%%对于导入的数据进行分组
date1=[N(1:14,:);N(85:98,:);N(183:196,:)]';
date2=[N(29:42,:);N(71:84,:);N(141:154,:)]';
date3=[N(15:28,:);N(99:112,:);N(155:168,:)]';
date4=[N(57:70,:);N(127:140,:);N(197:210,:)]';
date5=[N(43:56,:);N(113:126,:);N(169:182,:)]';
%%对于分组的数据进行合并成一个新的数组,具体的顺序任意
data=[date2,date1,date3,date4,date5]';
%%输入输出数据,提取前7列和第8列的内容单独成一个矩阵
input=data(:,1:7);
output=data(:,8);
%%提取出矩阵后,由于输出的矩阵是3维的因此要变换成3维的形式
for i=1:210
   switch output(i)
         case 1
              output1(i,:)=[1 0 0];
         case 2
              output1(i,:)=[0 1 0];
         case 3
              output1(i,:)=[0 0 1];
   end
end
%%对输入的矩阵处理完输入的形式了,接下来就是划分训练和测试集
input_train=input(1:168,:)';
output_train=output1(1:168,:)';
input_test=input(169:210,:)';
output_test=output1(169:210,:)';
%%对数据进行归一化处理
[inputn,inputps]=mapminmax(input_train);

%%.................................................
%%用matlab自带的工具箱里的函数来进行预测过程
%%.................................................
%%设置参数

net=newff(input_train,output_train,5,{'logsig' 'purelin'},'traingda');
%%初始化
net=init(net);
%%设置训练参数和训练BP网络
net.trainParam.epochs = 5000;
net.trainParam.goal = 0.0001;
net.trainParam.show = 10;
net.trainParam.lr=0.01;

%%训练BP神经网络
net = train(net,input_train,output_train);

a = sim(net,input_train); 
for i=1:42
    output_fore(i)=find(a(:,i)==max(a(:,i)));
end
%%BP训练结束

%BP网络预测误差
error=output_fore-output(169:210)';

%%................................................
figure(1)
plot(output_fore,'-. r *')
hold on
plot(output(169:210)',' -.b p')
legend('预测类别编号','实际类别编号')

%画出误差图
figure(2)
plot(error)
title('BP网络分类误差','fontsize',12)
xlabel('机器学习特性','fontsize',12)
ylabel('分类误差','fontsize',12)

k=zeros(1,3);  

%找出判断错误的分类属于哪一类
for i=1:42
    if error(i)~=0
        [b,c]=max(output_test(:,i));
        switch c
            case 1 
                k(1)=k(1)+1;
            case 2 
                k(2)=k(2)+1;
            case 3 
                k(3)=k(3)+1;
        end
    end
end

%找出每类的个体和
kk=zeros(1,3);
for i=1:42
    [b,c]=max(output_test(:,i));
    switch c
        case 1
            kk(1)=kk(1)+1;
        case 2
            kk(2)=kk(2)+1;
        case 3
            kk(3)=kk(3)+1;
    end
end

%正确率

right_rate5=(kk-k)./kk

执行效果:

参考资料:MATLAB神经网络30个经典案例      史峰 王小川等。






  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值