昨天介绍了单层感知器,今天为BP神经网络部分,该网络也是最常用的多层感知器。BP神经网络结构特点为多层全连接与误差反向传播。可以用于分类和回归问题。下面以MATLAB自带的葡萄酒数据来做案例讲解。
该数据的变量包括葡萄酒的十三个特征,以及三个酒厂(如果是该酒厂的酒,则值为1,否则为0).十三个特征包括:
Alcohol 、Malic acid、Ash、Alkalinity of ash、Magnesium、Total phenols、Flavanoids、Nonflavanoid phenols、Proanthocyanidins、Color intensity、Hue、OD280/OD315 of diluted wines、Proline。
x的数据如下(共178列13行)
t如下(共三行178列)
下面我们来构造BP神经网络解决该样本识别问题
net =feedforwardnet(20); %建立一个有20层的BP神经网络
view(net) %未训练前的BP神经网络
[xx,settings]=mapminmax(x); %将数据全部归一化
trainxx = xx(1:13,1:100);
traint = t(1:3,1:100); %设置前100个样本为训练集
[net,tr] = train(net,trainxx,traint); %训练后的神经网络
testx = x(1:13,101:178);
testt = t(1:3,101:178); %看看用于测试集合的效果
testy = net(testy);
plotconfusion(testt,testy)%生成混淆矩阵图
如果模型正确,那么混淆矩阵图应该红色部分概率及其小,很显然这个预测很糟糕。接下来可以先考虑如下几个原因:
1 数据整理是否有问题
2 隐藏层设置是否有问题
3 BP网络的训练函数是否有问题
考虑到feedforwardnet本身可以归一化数据归一化,可能前期的归一化会误导。
在此不做预先的归一化进行对照实验。
调整以后有改善,但依然不够。接下来考虑节点,我们把节点数下调到10
模型继续得到改善
下面考虑,原feedforwardnet函数默认的BP学习函数是LM方法,该
方法更多用于拟合而非分类,我们单独使用分类函数patternet,得到下图混淆矩阵。
这次的结果更加何意。模型基本有效。
领取专属 10元无门槛券
私享最新 技术干货