【说明:上一个螃蟹公母分类是二分类,本例为三分类】
问题定义
本示例采用神经网络从13个属性中对酒的类型进行区分:
-
Alcohol
-
Malic acid
-
Ash
-
Alkalinity of ash
-
Magnesium
-
Total phenols
-
Flavonoids
-
Nonflavonoid phenols
-
Proanthocyanidins
-
Color intensity
-
Hue
-
OD280/OD315 of diluted wines
-
Proline
为何选用神经网络?
神经网络擅长于模式识别问题。包含足够多神经元的神经网络可以以任意精度逼近任意数据,因此尤其适用于非线性问题。
输入:13项特征;
输出:三分类中的一种。
数据准备
与之前文章中的描述类似,输入矩阵为X,输出为矩阵T。
[x,t] = wine_dataset;
size(x)
size(t)
>> size(x)
ans =
13 178
>> size(t)
ans =
3 178
【说明:鉴于上一篇的分析中,高维数据分类问题在低维数据投影过程中很难看到规律,下面直接开始采用神经网络进行分类。】
采用神经网络进行模式识别
初始化随机数种子
setdemorandstream(491218382)
采用10层隐藏层网络。
net = patternnet(10);
view(net)
得到如下所示神经网络。
目前的网络已经可以进行训练。在本示例中,会自动对训练集training set、验证集validation set和测试集test set进行划分。其中,训练集的目的是对网络进行训练。训练的结果将使得网络对验证集的数据可以进行拟合。测试集独立地对训练后的网络拟合精度进行评估。
[net,tr] = train(net,x,t);
nntraintool
nntraintool('close')
得到如下界面
性能分析
Performance:
从图中可以看出,在前30轮迭代中,在验证集中没有出现先下降后上升的典型趋势。
从Confusion中也可以看出,分类效果不佳。原因在哪里?
从Training State中可以看出,训练过程中梯度损失很快,在第32次iteration时,梯度只有4.96E-7,达到了终止调节,训练过程自动终止。