介绍
本示例展示如何把神经网络设计为一个分类器来根据螃蟹各特征尺寸的鉴别螃蟹的公母。
问题定义
对螃蟹进行分类。本示例将设计一个分类器,用于根据螃蟹的各特征尺寸对螃蟹的公母进行区分。
本示例选取了六个特征,如下所示:【注:具体的特征是什么对认识问题并不重要】
species
frontallip
rearwidth
length
width
depth
为何采用神经网络?
与之前文章中的描述类似,神经网络可以有效处理分类问题,尤其是非线性问题。
输入:螃蟹的六种特征尺寸;
输出:螃蟹的公母。
数据准备
与之前文章中的描述类似,输入矩阵为X,输出为矩阵T。
[x,t] = crab_dataset;
size(x)
size(t)
ans =
6 200
ans =
2 200
数据分析
因素1,因素2如下图
因素3,因素4如下图
因素5,因素6如下图
从上述图无法直观看出6个因素与螃蟹公母的关系,需要进行神经网络进行分辨。
神经网络分类器构建
与上一个例子相同,为了实现每次仿真分析过程一致,在仿真开始对随机数种子进行了设置。如下所示。
setdemorandstream(491218382)
在隐藏层神经网络足够多的情况下,两层前向型神经网络(其中一层为隐藏层)可以拟合任意的输入-输出关系。非输出层的各层称为隐藏层。
本示例中隐藏层神经元个数为10个。一般而言,问题越复杂,需要的神经元个数越多,层数也可能越多。
输入层和输出层的sizes为0,因为网络还没有得到配置去匹配本例子中的输入和输出数据。在网络训练好之后,将会进行配置。
net = patternnet(10);
view(net)
目前的网络已经可以进行训练。在本示例中,会自动对训练集training set、验证集validation set和测试集test set进行划分。其中,训练集的目的是对网络进行训练。训练的结果将使得网络对验证集的数据可以进行拟合。测试集独立地对训练后的网络拟合精度进行评估。
[net,tr] = train(net,x,t);
nntraintool
性能分析
运行后得到:
performance:
为了显示在训练过程中网络拟合能力是如何得到提高的,点击“Performance”按钮,得到下图。
误差的测度是均方误差mean squared error(MSE),用对数作图。训练初期,MSE迅速下降。【注:由于采用的是和MATLAB帮助文件中相同的随机数种子,得到的图片与帮助文件中的图片完全一致。】
最终得到的网络是在验证集中表现最好的网络,如图中绿色线最低点处圆圈位置。
Training State:
Error Histogram:误差直方图
Confusion:混淆矩阵
confusion matrix混淆矩阵用于表示分类正误的百分比。
正确的分类采用绿色标识;
错误的分类采用红色标识。从图中可以看出整体错误率很低,在2%~3%之间。
Receiver Operating Characteristic(ROC):
ROC曲线能够很好的描述分类器对于不均衡分布的样本的分类性能。
对于一个分类器的分类结果,一般有以下四种情况:
1. 真阳性(TP):判断为1,实际上也为1。
2. 伪阳性(FP):判断为1,实际上为0。
3. 真阴性(TN):判断为0,实际上也为0。
4. 伪阴性(FN):判断为0,实际上为1。
ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。
TPR:在所有实际为阳性的样本中,被正确地判断为阳性之比率。
FPR:在所有实际为阴性的样本中,被错误地判断为阳性之比率。