主要内容

评估神经网络分类器性能

创建一个前馈神经网络分类器与完全连接层使用fitcnet.使用验证数据早期停止训练过程,以防止模型过拟合。然后,使用分类器的对象函数来评估模型在测试数据上的性能。

加载和预处理样本数据

该示例使用存储在census1994.mat.数据集由来自美国人口普查局的人口统计信息组成,你可以使用这些信息来预测一个人每年的收入是否超过5万美元。

加载示例数据census1994,其中包含训练数据成人资料测试数据成人.预览训练数据集的前几行。

负载census1994头(adultdata)
ans =8×15表年龄workClass fnlwgt教育education_num marital_status种族职业关系性capital_gain capital_loss hours_per_week native_country薪水  ___ ________________ __________ _________ _____________ _____________________ _________________ _____________ _____ ______ ____________ ____________ ______________ ______________ ______ 39State-gov 77516单身汉13未婚Adm-clerical家族的白人男性2174 0 40美国< = 50 k 50 Self-emp-not-inc 83311单身汉13 Married-civ-spouse Exec-managerial丈夫13美国白人男性0 0 < = 50 k 38私人2.1565 e + 05 HS-grad 9离婚Handlers-cleaners家族的白人男性40 0 0美国< = 50 k 53岁私人2.3472 e + 05年11日7 Married-civ-spouse Handlers-cleaners丈夫黑人男性40 0 0美国< = 50 k 28私人3.3841 e + 05单身汉13 Married-civ-spouse Prof-specialty妻子古巴黑人女性40 0 0 < = 50 k 37私人2.8458 e + 05年硕士14 Married-civ-spouse Exec-managerial妻子白人女性40 0 0美国< = 50 k 49私人1.6019 e + 05第9位5已婚配偶缺席的其他服务非家庭成员黑人女性0 0 16牙买加<=50K 52自我-emp-not-inc 2.0964e+05 HS-grad 9已婚公民配偶执行-管理丈夫白人男性0 0 45美国>50K

每一行包含一个成人的人口统计信息。最后一列,工资,显示了一个人的年薪是低于或等于5万美元,还是高于5万美元。

结合education_num教育训练和测试数据中的变量,以创建一个有序的分类变量,显示一个人所达到的最高教育水平。

edOrder =独特(adultdata.education_num,“稳定”);edCats =独特(adultdata.education,“稳定”);[~, edIdx] = (edOrder)进行排序;adultdata.education =分类(adultdata.education,...edCats (edIdx),“顺序”,真正的);adultdata.education_num = [];adulttest.education =分类(adulttest.education,...edCats (edIdx),“顺序”,真正的);adulttest.education_num = [];

分区训练数据

使用分层保持分区进一步分割训练数据。创建单独的验证数据集,以便尽早停止模型培训过程。为验证数据集保留约30%的观察值,并使用其余观察值训练神经网络分类器。

rng(“默认值”分区的再现性c=CVD(成人数据。工资,“坚持”, 0.30);trainingIndices =培训(c);validationIndices =测试(c);tblTrain = adultdata (trainingIndices:);tblValidation = adultdata (validationIndices:);

训练神经网络

使用训练集训练神经网络分类器。指定工资列的tblTrain作为响应和fnlwgt列作为观测权值,并标准化数值预测器。在每次迭代中使用验证集评估模型。属性指定在每个迭代中显示训练信息详细的名称-值参数。默认情况下,如果验证交叉熵损失大于或等于迄今为止计算的最小验证交叉熵损失(连续六次),则训练过程提前结束。要更改允许验证丢失大于或等于最小值的次数,请指定ValidationPatience名称-值参数。

Mdl = fitcnet (tblTrain,“工资”“重量”“fnlwgt”...“标准化”,真的,“ValidationData”,TBL验证,...“详细”,1);
| ========================================================================================== ||迭代|火车损失|梯度|步骤|迭代|验证|验证|| | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 1| 0.297812| 0.078920| 0.703981| 0.012127| 0.296816| 0| | 2| 0.281110| 0.054594| 0.149850| 0.012486| 0.280132| 0| | 3| 0.252648| 0.062041| 1.004181| 0.011339| 0.247863| 0| | 4| 0.211868| 0.023567| 0.267214| 0.011319| 0.208988| 0| | 5| 0.207039| 0.057528| 0.320942| 0.010288| 0.206781| 0| | 6| 0.196838| 0.022492| 0.089842| 0.011197| 0.195583| 0| | 7| 0.186133| 0.025551| 0.295975| 0.010426| 0.184900| 0| | 8| 0.178779| 0.023714| 0.244525| 0.010237| 0.179370| 0| | 9| 0.174531| 0.027149| 0.306182| 0.012911| 0.178175| 0| | 10| 0.173217| 0.013365| 0.037475| 0.011084| 0.176371| 0| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 11| 0.168160| 0.016506| 0.307350| 0.010016| 0.170415| 0| | 12| 0.164460| 0.025136| 0.473227| 0.011512| 0.165902| 0| | 13| 0.162895| 0.014983| 0.473367| 0.010969| 0.164582| 0| | 14| 0.160791| 0.005187| 0.113760| 0.011720| 0.162947| 0| | 15| 0.159742| 0.004035| 0.138748| 0.010260| 0.162074| 0| | 16| 0.159290| 0.005774| 0.108266| 0.010400| 0.161728| 0| | 17| 0.158593| 0.004977| 0.152142| 0.010603| 0.161272| 0| | 18| 0.157437| 0.003660| 0.193303| 0.010510| 0.160299| 0| | 19| 0.156642| 0.007722| 0.430859| 0.010069| 0.160145| 0| | 20| 0.155954| 0.001908| 0.121039| 0.010041| 0.159066| 0| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 21| 0.155824| 0.001645| 0.025159| 0.010557| 0.158992| 0| | 22| 0.155486| 0.003232| 0.119915| 0.010829| 0.158731| 0| | 23| 0.155398| 0.006845| 0.083105| 0.031846| 0.158963| 1| | 24| 0.155261| 0.004374| 0.065660| 0.010762| 0.158816| 2| | 25| 0.154955| 0.002505| 0.264106| 0.011437| 0.158687| 0| | 26| 0.154799| 0.002183| 0.040876| 0.010903| 0.158538| 0| | 27| 0.154466| 0.002881| 0.219478| 0.012409| 0.158033| 0| | 28| 0.154250| 0.002724| 0.196190| 0.012062| 0.157980| 0| | 29| 0.153918| 0.002189| 0.135392| 0.009862| 0.157605| 0| | 30| 0.153707| 0.001449| 0.111574| 0.010851| 0.157456| 0| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 31| 0.153214| 0.002050| 0.528628| 0.010212| 0.157379| 0| | 32| 0.152671| 0.002542| 0.488640| 0.010013| 0.156687| 0| | 33| 0.152303| 0.004554| 0.223206| 0.010334| 0.156778| 1| | 34| 0.152093| 0.002856| 0.121284| 0.010188| 0.156639| 0| | 35| 0.151871| 0.003145| 0.135909| 0.010108| 0.156446| 0| | 36| 0.151741| 0.001441| 0.225342| 0.010452| 0.156517| 1| | 37| 0.151626| 0.002500| 0.396782| 0.010487| 0.156429| 0| | 38| 0.151488| 0.005053| 0.148248| 0.010312| 0.156201| 0| | 39| 0.151250| 0.002552| 0.110278| 0.009895| 0.155968| 0| | 40| 0.151013| 0.002506| 0.123906| 0.010837| 0.155812| 0| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 41| 0.150821| 0.002536| 0.109515| 0.010627| 0.155742| 0| | 42| 0.150509| 0.001418| 0.223296| 0.010561| 0.155648| 0| | 43| 0.150340| 0.003437| 0.185351| 0.010131| 0.155435| 0| | 44| 0.150280| 0.004746| 0.115075| 0.010432| 0.155797| 1| | 45| 0.150194| 0.002758| 0.082143| 0.010068| 0.155575| 2| | 46| 0.150061| 0.001122| 0.094288| 0.011405| 0.155334| 0| | 47| 0.149978| 0.001259| 0.127677| 0.010628| 0.155305| 0| | 48| 0.149879| 0.001523| 0.107816| 0.011331| 0.155044| 0| | 49| 0.149749| 0.004572| 0.156869| 0.009953| 0.155043| 0| | 50| 0.149617| 0.000965| 0.186502| 0.009702| 0.155106| 1| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 51| 0.149579| 0.001302| 0.062687| 0.010743| 0.155160| 2| | 52| 0.149519| 0.001407| 0.086000| 0.010335| 0.155216| 3| | 53| 0.149405| 0.001243| 0.147530| 0.009753| 0.155309| 4| | 54| 0.149203| 0.002749| 0.186920| 0.010267| 0.155337| 5| | 55| 0.149040| 0.001217| 0.310011| 0.012444| 0.155460| 6| |==========================================================================================|

使用内部的信息TrainingHistory对象的属性Mdl检查与最小验证交叉熵损失相对应的迭代。最终返回的模型Mdl是在这个迭代中训练的模型。

迭代= Mdl.TrainingHistory.Iteration;valLosses = Mdl.TrainingHistory.ValidationLoss;[~, minIdx] = min (valLosses);迭代(minIdx)
ans = 49

评估测试集性能

评估训练的分类器的性能Mdl在测试集中成人通过使用预测损失保证金,及边缘对象函数。

查找测试集中观察结果的预测标签和分类分数。

[标签,分数]=预测(Mdl,成人测试);

从测试集结果中创建一个混淆矩阵。对角线元素表示给定类正确分类的实例的数量。非对角线元素是错误分类观察的实例。

confusionchart (adulttest.salary、标签)

计算测试集分类精度。

错误=损失(Mdl、成人测试、,“工资”);精度=(1个错误)* 100
精度= 85.1306

神经网络分类器正确地分类了大约85%的测试集观测值。

计算训练神经网络的测试集分类边缘。显示边距的直方图。

分类边缘是真实类别的分类评分与虚假类别的分类评分之间的差值。因为神经网络分类器返回的分数是后验概率,分类边缘值接近1表示有信心分类,而负边缘值表示错误分类。

m =利润率(Mdl成人,“工资”);直方图(m)

使用分类边缘或分类边缘的平均值来评估分类器的总体性能。

平均边缘=边缘(Mdl、成人测试、,“工资”
meanMargin = 0.5983

另外,利用观测权值计算加权的分类边。

weightedMeanMargin =边缘(Mdl,成人,“工资”...“重量”“fnlwgt”
加权平均裕度=0.6072

使用散点图将预测的标签和分类分数可视化,其中每个点都对应于一个观测值。使用预测标签来设置分数的颜色,并使用最大分数来设置分数的透明度。透明度较低的点被标记为更有信心。

首先,找到每个测试集观测值的最大分类分数。

maxScores=max(分数,[],2);

创建一个散点图,比较每周工作时间和教育水平的最高分数。因为教育变量是绝对的,随机抖动(或空格)沿y维的点。

更改颜色映射,使与年薪小于或等于50000美元的薪资对应的最大分数显示为蓝色,与年薪大于50000美元的薪资对应的最大分数显示为红色。

散射(adulttest.hours_per_week adulttest.education[],标签,...“填充”“MarkerFaceAlpha”“平”“字母数据”maxScores,...“YJitter”“兰德”);包含(“每周工作时数”)伊拉贝尔(“教育”Mdl)。一会
ans =2×1分类<=50K>50K
颜色=(2行)
颜色=2×30 0.4470 0.7410 0.8500 0.3250 0.0980
彩色地图(彩色);

散点图中的颜色表明,一般来说,神经网络预测受教育程度较低(12年级或以下)的人年薪低于或等于50000美元。图右下角部分点的透明度表明,对于每周工作多小时(60小时或以上)的人,模型对这一预测的信心较低。

另请参阅

|||||||