损失
神经网络分类器的分类损失
描述
返回分类损失对于训练过的神经网络分类器l
=损失(Mdl
,资源描述
,ResponseVarName
)Mdl
利用表中的预测数据资源描述
类标签在ResponseVarName
表变量。
l
默认情况下,作为表示分类错误的标量值返回。
除前面语法中的任何输入参数组合外,还使用一个或多个名称-值参数指定选项。例如,您可以指定预测器数据中的列对应于观测值,指定损失函数,或提供观测值权重。l
=损失(___,名称,值
)
请注意
如果预测数据在X
或资源描述
包含任何缺失的值和LossFun
没有设置为“classifcost”
,“classiferror”
,或“mincost”
,损失
函数可以返回NaN。有关更多细节,请参见loss可以为缺少值的预测器数据返回NaN.
例子
神经网络测试集分类误差
计算神经网络分类器的测试集分类误差。
加载病人
数据集。从数据集创建一个表。每一行对应一个病人,每列对应一个诊断变量。使用吸烟者
变量作为响应变量,其余变量作为预测变量。
负载病人tbl =表(舒张压,收缩压,性别,身高,体重,年龄,吸烟者);
将数据分离到一个训练集中tblTrain
还有一个测试集tblTest
通过使用分层压痕分区。该软件为测试数据集保留了大约30%的观察数据,并将其余的观察数据用于训练数据集。
rng (“默认”)分区的可重复性C = cvpartition(tbl。抽烟,“坚持”, 0.30);训练指数=训练(c);testindexes = test(c);tblTrain = tbl(trainingindexes,:);tblTest = tbl(testindexes,:);
使用训练集训练神经网络分类器。指定吸烟者
列的tblTrain
作为响应变量。指定以标准化数值预测器。
Mdl = fitcnet(tblTrain,“抽烟”,...“标准化”,真正的);
计算测试集分类误差。分类错误是神经网络分类器的默认损失类型。
testError = loss(Mdl,tblTest,“抽烟”)
testError = 0.0671
testAccuracy = 1 - testError
testAccuracy = 0.9329
神经网络模型正确地分类了大约93%的测试集观察结果。
选择要包含在神经网络分类器中的特征
通过比较测试集分类裕度、边、误差和预测来执行特征选择。比较使用所有预测器训练的模型的测试集指标与仅使用预测器的子集训练的模型的测试集指标。
加载示例文件fisheriris.csv
,其中包含虹膜的数据,包括萼片长度、萼片宽度、花瓣长度、花瓣宽度和物种类型。将文件读入表中。
fishtable = readtable(“fisheriris.csv”);
将数据分离到一个训练集中trainTbl
还有一个测试集testTbl
通过使用分层压痕分区。该软件为测试数据集保留了大约30%的观察数据,并将其余的观察数据用于训练数据集。
rng (“默认”c = cvpartition(fishtable .)物种,“坚持”, 0.3);trainTbl = fishtable (training(c),:);testTbl = fishtable (test(c),:);
用训练集中的所有预测器训练一个神经网络分类器,并用训练集中的所有预测器训练另一个分类器PetalWidth
.对于这两个模型,指定物种
作为响应变量,并标准化预测器。
allMdl = fitcnet(trainTbl,“物种”,“标准化”,真正的);subsetMdl = fitcnet(trainTbl,“物种~ SepalLength + SepalWidth + PetalLength”,...“标准化”,真正的);
计算两个模型的测试集分类裕度。因为测试集只包含45个观察结果,所以使用条形图显示边界。
对于每个观察,分类裕度是真实类的分类得分与虚假类的最大得分之间的差值。因为神经网络分类器返回的分类分数是后验概率,接近1的裕度值表示有信心的分类,负的裕度值表示分类错误。
tiledlayout (2, 1)%顶轴Ax1 = nexttile;allmargin = margin(allMdl,testTbl);栏(ax₁,allMargins)包含(ax₁“观察”) ylabel (ax₁,“保证金”)标题(ax₁,“预测”)%下轴Ax2 = nexttile;subset利润率= margin(subsetMdl,testTbl);栏(ax2 subsetMargins)包含(ax2,“观察”) ylabel (ax2,“保证金”)标题(ax2,“预测因子子集”)
比较两个模型的测试集分类边,或分类边的平均值。
allEdge = edge(allMdl,testTbl)
allEdge = 0.8198
subsetEdge = edge(subsetMdl,testTbl)
subsetEdge = 0.9556
基于测试集分类边和边,在一个预测因子子集上训练的模型似乎优于在所有预测因子上训练的模型。
比较两种模型的测试集分类误差。
allError = loss(allMdl,testTbl);allAccuracy = 1-allError
allAccuracy = 0.9111
subsetError =损失(subsetMdl,testTbl);subsetAccuracy = 1-subsetError
subsetAccuracy = 0.9778
同样,只使用一个预测器子集训练的模型似乎比使用所有预测器训练的模型表现更好。
使用混淆矩阵可视化测试集分类结果。
allLabels = predict(allMdl,testTbl);图混淆图(testtable . species,allLabels)“预测”)
subsetLabels = predict(subsetMdl,testTbl);图混淆图(testtable . species,subsetLabels)“预测因子子集”)
使用所有预测因子训练的模型错误分类了四个测试集的观察值。使用预测器子集训练的模型只对测试集观察结果中的一个进行了错误分类。
考虑到这两个模型的测试集性能,考虑使用使用所有预测器训练的模型PetalWidth
.
输入参数
Mdl
- - - - - -训练神经网络分类器
ClassificationNeuralNetwork
模型对象|CompactClassificationNeuralNetwork
模型对象
经过训练的神经网络分类器,指定为ClassificationNeuralNetwork
模型对象或CompactClassificationNeuralNetwork
返回的模型对象fitcnet
或紧凑的
,分别。
资源描述
- - - - - -样本数据
表格
示例数据,指定为表。每一行资源描述
对应一个观察结果,每一列对应一个预测变量。可选地,资源描述
可以包含用于响应变量的附加列。资源描述
必须包含用于训练的所有预测器Mdl
.不允许多列变量和字符向量的单元格数组以外的单元格数组。
如果
资源描述
包含用于训练的响应变量Mdl
,则不需要指定ResponseVarName
或Y
.如果你接受过培训
Mdl
使用表中包含的样例数据,则输入数据为损失
也必须在表中。如果你设置
“标准化”,真的
在fitcnet
当训练Mdl
,然后软件利用相应的均值和标准差对预测数据的数值列进行标准化。
数据类型:表格
ResponseVarName
- - - - - -响应变量名
变量的名称资源描述
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:损失(Mdl,台“响应”,“LossFun”、“crossentropy”)
指定计算模型的交叉熵损失Mdl
.
LossFun
- - - - - -损失函数
“mincost”
(默认)|“binodeviance”
|“classifcost”
|“classiferror”
|“crossentropy”
|“指数”
|“枢纽”
|分对数的
|“二次”
|函数处理
丢失函数,指定为内置丢失函数名或函数句柄。
该表列出了可用的损耗函数。使用对应的字符向量或字符串标量指定一个。
价值 描述 “binodeviance”
二项异常 “classifcost”
观察到的错误分类成本 “classiferror”
错误的十进制率分类 “crossentropy”
交叉熵损失(仅适用于神经网络) “指数”
指数损失 “枢纽”
铰链的损失 分对数的
物流损失 “mincost”
最小预期误分类代价(对于后验概率分类分数) “二次”
二次损失 有关损失函数的更多详细信息,请参见分类损失.
要指定自定义丢失函数,请使用函数句柄表示法。函数必须有这样的形式:
lossvalue =
lossfun
(C、S、W、成本)输出参数
lossvalue
是一个标量。指定函数名(
lossfun
).C
是一个n
——- - - - - -K
逻辑矩阵,用行表示对应的观察结果所属的类别。n
观察的数量在吗资源描述
或X
,K
是不同类的数量(元素个数(Mdl.ClassNames)
.列顺序与中的类顺序对应Mdl。ClassNames
.创建C
通过设置C(p,q) = 1
如果观察p
在课堂上问
,为每一行。设置row的所有其他元素p
来0
.年代
是一个n
——- - - - - -K
分类分数的数字矩阵。列顺序与中的类顺序对应Mdl。ClassNames
.年代
是一个分类分数矩阵,类似的输出预测
.W
是一个n
-by-1观察权重的数值向量。成本
是一个K
——- - - - - -K
错误分类成本的数字矩阵。例如,成本=个数(K) -眼数(K)
的成本。0
正确的分类和1
误分类。
例子:“LossFun”、“crossentropy”
数据类型:字符
|字符串
|function_handle
ObservationsIn
- - - - - -预测器数据观测维数
“行”
(默认)|“列”
预测器数据观测维数,指定为“行”
或“列”
.
请注意
如果你定位你的预测矩阵,使观察结果对应列和指定“ObservationsIn”、“列”
,那么计算时间可能会显著减少。您不能指定“ObservationsIn”、“列”
用于表中的预测数据。
数据类型:字符
|字符串
权重
- - - - - -观察权重
非负数值向量|变量的名称资源描述
更多关于
分类损失
分类损失函数度量分类模型的预测不准确性。当你在许多模型中比较同一类型的损失时,较低的损失表示较好的预测模型。
考虑以下场景。
l为加权平均分类损失。
n是样本容量。
二元分类:
yj是观察到的类标签。软件将其编码为-1或1,表示负数或正类(或中的第一个或第二个类)
一会
分别属性)。f(Xj)为观察正级分类分数(行)j预测数据X.
米j=yjf(Xj)为分类观察的分类分数j成对应的类yj.的正数值米j指出正确的分类和不贡献太多的平均损失。的负值米j指出不正确的分类和对平均损失有显著贡献。
对于支持多类分类的算法(即K≥3):
yj*是的向量K- 1个0,其中1在对应于真实的观察类的位置yj.例如,如果第二次观测的真类是第三类和K= 4,然后y2*= (
0 0 1 0
]“.类的顺序对应于一会
属性。f(Xj)为长度K班级成绩的观察向量j预测数据X.分数的顺序与课程的顺序相对应
一会
属性。米j=yj*”f(Xj).因此,米j是模型为真实的、观察到的类预测的标量分类分数。
观察权重j是wj.软件对观察权重进行归一化处理,使其与存储在
之前
财产。因此,
对于这种场景,下表描述了可以使用LossFun
名称-值参数。
损失函数 | 的价值LossFun |
方程 |
---|---|---|
二项异常 | “binodeviance” |
|
观察到的错误分类成本 | “classifcost” |
在哪里 类标签是否与分数最大的类对应,和 将观察结果分类的成本是用户指定的吗 当它真正的阶级是yj. |
错误的十进制率分类 | “classiferror” |
在哪里我{·}为指示函数。 |
叉损失 | “crossentropy” |
加权交叉熵损失为
权重在哪里 和是归一化的吗n而不是1。 |
指数损失 | “指数” |
|
铰链的损失 | “枢纽” |
|
分对数损失 | 分对数的 |
|
最小的预期错误分类成本 | “mincost” |
软件利用此方法计算加权最小期望分类成本j= 1,…,n.
最小期望误分类成本损失的加权平均值为
|
二次损失 | “二次” |
如果使用默认代价矩阵(其元素值为0表示正确分类,为1表示错误分类),则损失值为“classifcost”
,“classiferror”
,“mincost”
都是相同的。对于具有非默认代价矩阵的模型,“classifcost”
损失相当于“mincost”
大部分时间都是损失。如果对具有最大后验概率的类的预测不同于对具有最小期望代价的类的预测,则这些损失可能是不同的。请注意,“mincost”
仅当分类分数为后验概率时才适用。
该图比较了损失函数(除“classifcost”
,“crossentropy”
,“mincost”
)超过分数米有一个观察。一些函数经过点(0,1)被归一化。
版本历史
在R2021a中引入R2022a:默认的LossFun
价值已经改变
从R2022a开始损失
函数使用“mincost”
选项(最小预期错误分类代价)作为默认值LossFun
名称-值参数。的“mincost”
当分类分数是后验概率时,选项是合适的。在以前的版本中,默认值为“classiferror”
.
您不需要对默认成本矩阵(其元素值为0表示正确分类,1表示错误分类)的代码进行任何更改。
R2022a:损失
可以返回NaN的预测器数据与缺失的值
的损失
函数在计算加权平均分类损失时不再遗漏具有NaN评分的观测值。因此,损失
现在可以返回NaN时的预测数据吗X
或者预测变量资源描述
包含任何缺失的值和name-value参数LossFun
没有指定为“classifcost”
,“classiferror”
,或“mincost”
.在大多数情况下,如果测试集观察值不包含缺失的预测器,则损失
函数不返回NaN。
此更改改进了使用时分类模型的自动选择fitcauto
.在此更改之前,软件可能会选择一个具有少量非nan预测器的模型(期望对新数据进行最佳分类)。
如果损失
在你的代码中返回NaN,你可以更新你的代码,通过做以下之一来避免这个结果:
使用删除或替换所缺少的值
rmmissing
或fillmissing
,分别。指定名称-值参数
LossFun
作为“classifcost”
,“classiferror”
,或“mincost”
.
下表显示的分类模型中损失
对象函数可能返回NaN。有关更多详细信息,请参阅每种产品的兼容性注意事项损失
函数。
模型类型 | 完整或紧凑模型对象 | 损失 目标函数 |
---|---|---|
判别分析分类模型 | ClassificationDiscriminant ,CompactClassificationDiscriminant |
损失 |
学习者集合进行分类 | ClassificationEnsemble ,CompactClassificationEnsemble |
损失 |
高斯核分类模型 | ClassificationKernel |
损失 |
k-最近邻分类模型 | ClassificationKNN |
损失 |
线性分类模型 | ClassificationLinear |
损失 |
神经网络分类模型 | ClassificationNeuralNetwork ,CompactClassificationNeuralNetwork |
损失 |
支持向量机(SVM)分类模型 | 损失 |
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。