kfoldLoss
交叉验证分类模型的分类损失
描述
例子
估计交叉验证的分类误差
加载电离层
数据集。
负载电离层
种植一个分类树。
树= fitctree (X, Y);
使用10倍交叉验证交叉验证分类树。
cvtree = crossval(树);
估计交叉验证的分类误差。
L = kfoldLoss (cvtree)
L = 0.1083
估计交叉验证的分类误差
加载电离层
数据集。
负载电离层
使用AdaBoostM1训练100棵决策树的分类集合。指定树桩作为弱学习者。
t = templateTree (“MaxNumSplits”1);实体= fitcensemble (X, Y,“方法”,“AdaBoostM1”,“学习者”t);
使用10倍交叉验证对集成进行交叉验证。
cvens = crossval (ens);
估计交叉验证的分类误差。
L = kfoldLoss (cvens)
L = 0.0655
寻找GAM使用的最佳树数kfoldLoss
训练10倍交叉验证的广义加性模型。然后,用kfoldLoss
计算交叉验证的累积分类错误(误码率,十进制)。利用误差来确定每个预测器的最佳树数(预测器的线性项)和每个交互项的最佳树数。
或者,您可以找到的最优值fitcgam
参数的名称-值参数OptimizeHyperparameters名称-值参数。示例请参见使用OptimizeHyperparameters优化GAM.
加载电离层
数据集。该数据集有34个预测器和351个雷达返回二进制响应,坏的(“b”
)或好(‘g’
).
负载电离层
使用默认的交叉验证选项创建交叉验证的GAM。指定“CrossVal”
名称-值参数为“上”
.指定包括所有可用的交互术语p-值不大于0.05。
rng (“默认”)%的再现性CVMdl = fitcgam (X, Y,“CrossVal”,“上”,“互动”,“所有”,“MaxPValue”, 0.05);
如果您指定“模式”
作为“累积”
为kfoldLoss
,则函数返回累积误差,即使用相同数量的树对每个折叠获得的所有折叠的平均误差。显示每个折叠的树的数量。
CVMdl。NumTrainedPerFold
ans =结构体字段:PredictorTrees: [65 64 59 61 60 66 65 62 64 61] InteractionTrees: [1 2 2 2 2 1 2 2 2]
kfoldLoss
可以使用多达59个预测树和一个交互树计算累积误差。
绘制累积的10倍交叉验证的分类错误(错误分类率以十进制表示)。指定“IncludeInteractions”
作为假
将相互作用项从计算中排除。
L_noInteractions = kfoldLoss (CVMdl,“模式”,“累积”,“IncludeInteractions”、假);图绘制(0:min (CVMdl.NumTrainedPerFold.PredictorTrees) L_noInteractions)
第一个元素L_noInteractions
是仅使用截距(常数)项获得的所有折叠的平均误差。(J + 1
) th元素的L_noInteractions
是否使用拦截项和第一项获得平均误差J
每个线性项的预测树。绘制累积损失图可以让您监控随着GAM中预测树数量的增加,误差是如何变化的。
找出最小误差和用于达到最小误差的预测树的数量。
[M,我]= min (L_noInteractions)
M = 0.0655
我= 23
当包含22棵预测树时,GAM的误差最小。
使用线性项和交互项计算累积分类误差。
L = kfoldLoss (CVMdl,“模式”,“累积”)
L =2×10.0712 - 0.0712
第一个元素l
是使用截距(常数)项和每个线性项的所有预测树获得的所有折叠的平均误差。第二要素l
是使用截距项、每个线性项的所有预测树和每个交互项的一个交互树获得的平均误差。当加入交互项时,误差并没有减少。
如果您对预测树数为22时的误差感到满意,则可以通过再次训练单变量GAM并指定来创建预测模型“NumTreesPerPredictor”,22岁
没有交叉验证。
输入参数
CVMdl
- - - - - -旨在分区分类器
ClassificationPartitionedModel
对象|ClassificationPartitionedEnsemble
对象|ClassificationPartitionedGAM
对象
交叉验证的分区分类器,指定为ClassificationPartitionedModel
,ClassificationPartitionedEnsemble
,或ClassificationPartitionedGAM
对象。你可以用两种方式创建对象:
将下表中列出的经过训练的分类模型传递给它
crossval
对象的功能。使用下表中列出的函数训练分类模型,并为函数指定一个交叉验证名称-值参数。
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:kfoldLoss(CVMdl,'Folds',[1 2 3 5])
指定使用第一、第二、第三和第五次折叠来计算分类损失,但排除第四次折叠。
折叠
- - - - - -要使用的折叠指数
1: CVMdl。KFold
(默认)|正整数向量
要使用的折叠指标,指定为正整数向量。的元素折叠
一定在1
来CVMdl。KFold
.
该软件只使用指定的折叠折叠
.
例子:“折叠”,[1 4 10]
数据类型:单
|双
IncludeInteractions
- - - - - -标记以包含交互术语
真正的
|假
标记以包括模型的交互术语,指定为真正的
或假
.这个论点仅对广义加性模型(GAM)有效。也就是说,只有当CVMdl
是ClassificationPartitionedGAM
.
默认值为真正的
如果模型在CVMdl
(CVMdl。训练有素的
)包含交互术语。取值必须为假
如果模型不包含交互项。
数据类型:逻辑
LossFun
- - - - - -损失函数
“binodeviance”
|“classifcost”
|“classiferror”
|“crossentropy”
|“指数”
|“枢纽”
|分对数的
|“mincost”
|“二次”
|函数处理
丢失函数,指定为内置丢失函数名或函数句柄。的默认损失函数取决于模型的类型CVMdl
.
默认值为
“classiferror”
如果模型类型是集合或支持向量机分类器。默认值为
“mincost”
如果模型类型是判别分析,k-最近邻,朴素贝叶斯,神经网络,或树分类器。如果模型类型是广义相加模型分类器,则默认值为
“mincost”
如果ScoreTransform
属性的输入模型对象(
)是CVMdl
.ScoreTransform分对数的
;否则,默认值为“classiferror”
.
“classiferror”
而且“mincost”
在使用默认成本矩阵时是等价的。看到算法为更多的信息。
该表列出了可用的损耗函数。使用对应的字符向量或字符串标量指定一个。
价值 描述 “binodeviance”
二项异常 “classifcost”
观察到的误分类代价 “classiferror”
错误的十进制率分类 “crossentropy”
交叉熵损失(仅适用于神经网络) “指数”
指数损失 “枢纽”
铰链的损失 分对数的
物流损失 “mincost”
最小预期误分类代价(对于后验概率分类分数) “二次”
二次损失 “mincost”
适用于后验概率的分类分数。的预测
而且kfoldPredict
判别分析函数,广义加性模型,k-最近邻、朴素贝叶斯、神经网络和树分类器默认返回这样的分数。对于集成模型使用
“包”
或“子”
方法,分类分数默认是后验概率。对于集成模型使用“AdaBoostM1”
,“AdaBoostM2”
,GentleBoost
,或“LogitBoost”
方法,您可以使用后验概率作为分类评分指定双logit评分转换。例如,输入:CVMdl。年代c或eTransform =“doublelogit”;
对于支持向量机模型,可以通过设置指定使用后验概率作为分类分数
“FitPosterior”,真的
当您使用fitcsvm
.
使用函数句柄表示法指定自己的函数。
假设
n
为训练数据中的观察数(CVMdl。NumObservations
),K
是类的数量(元素个数(CVMdl.ClassNames)
).你的函数必须有签名lossvalue =
,地点:lossfun
(C、S、W、成本)输出参数
lossvalue
是一个标量。指定函数名(
lossfun
).C
是一个n
——- - - - - -K
逻辑矩阵,用行表示对应的观察结果所属的类别。列顺序与中的类顺序对应CVMdl。ClassNames
.构造
C
通过设置C (p, q) = 1
如果观察p
是在课堂上问
,为每一行。设置row的所有其他元素p
来0
.年代
是一个n
——- - - - - -K
分类分数的数字矩阵。列顺序与中的类顺序对应CVMdl。ClassNames
.输入年代
类似于输出参数分数
的kfoldPredict
.W
是一个n
-by-1观察权重的数值向量。如果你通过W
,软件将其元素归一化求和1
.成本
是一个K
——- - - - - -K
错误分类成本的数字矩阵。例如,成本=个数(K) -眼数(K)
的成本。0
为了正确的分类,和1
误分类。
使用以下命令指定函数
“LossFun”@
.lossfun
有关损失函数的更多详细信息,请参见分类损失.
例子:“LossFun”、“枢纽”
数据类型:字符
|字符串
|function_handle
模式
- - - - - -输出的聚合级别
“平均”
(默认)|“个人”
|“累积”
输出的聚合级别,指定为“平均”
,“个人”
,或“累积”
.
价值 | 描述 |
---|---|
“平均” |
输出是所有折叠的标量平均值。 |
“个人” |
输出是一个长度向量k每次折叠包含一个值,其中k是折叠的次数。 |
“累积” |
请注意 如果你想指定这个值,
|
例子:“模式”,“个人”
输出参数
l
——分类损失
数值标量|数值列向量
分类丢失,作为数值标量或数值列向量返回。
如果
模式
是“平均”
,然后l
是所有折叠的平均分类损失。如果
模式
是“个人”
,然后l
是一个k-by-1数字列向量,包含每折叠的分类损失,其中k是折叠的次数。如果
模式
是“累积”
而且CVMdl
是ClassificationPartitionedEnsemble
,然后l
是一个分钟(CVMdl.NumTrainedPerFold)
-by-1数值列向量。每个元素j
用弱学习者训练的集合函数得到的所有折叠的平均分类损失是多少1: j
.如果
模式
是“累积”
而且CVMdl
是ClassificationPartitionedGAM
,则输出值取决于IncludeInteractions
价值。如果
IncludeInteractions
是假
,然后l
是一个(1 +分钟(NumTrainedPerFold.PredictorTrees))
-by-1数值列向量。第一个元素l
是仅使用截距(常数)项获得的所有折叠的平均分类损失。的(j + 1)
th元素l
平均损失是用截距项和第一项得到的吗j
每个线性项的预测树。如果
IncludeInteractions
是真正的
,然后l
是一个(1 +分钟(NumTrainedPerFold.InteractionTrees))
-by-1数值列向量。第一个元素l
是使用截距(常数)项和每个线性项的所有预测树获得的所有折叠的平均分类损失。的(j + 1)
th元素l
是否使用截距项、每个线性项的所有预测树和第一个获得平均损失j
每个交互项的交互树。
更多关于
分类损失
分类损失函数度量分类模型的预测不准确性。当你在许多模型中比较同一类型的损失时,较低的损失表示较好的预测模型。
考虑以下场景。
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)被归一化。
算法
kfoldLoss
计算相应的描述的分类损失损失
对象的功能。有关特定于模型的描述,请参阅相应的损失
功能参考页下表。
扩展功能
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
使用注意事项和限制:
该函数完全支持以下交叉验证模型对象的GPU阵列:
训练的集成分类器
fitcensemble
k-训练的最近邻分类器
fitcknn
支持向量机训练的分类器
fitcsvm
用于训练多类分类的二叉决策树
fitctree
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
介绍了R2011aR2022a:kfoldLoss
返回具有非默认代价矩阵的交叉验证的支持向量机和集成分类器的不同值
如果在对支持向量机或集成分类模型的输入模型对象进行交叉验证时指定非默认代价矩阵,则kfoldLoss
函数返回与以前版本不同的值。
的kfoldLoss
函数使用存储在W
财产。此外,函数使用存储在成本
属性,则指定LossFun
名称-值参数为“classifcost”
或“mincost”
.函数使用的方式W
而且成本
物业价值没有改变。但是,对于具有非默认代价矩阵的交叉验证SVM和集成模型对象,存储在输入模型对象中的属性值发生了更改,因此函数可以返回不同的值。
有关属性值更改的详细信息,请参见成本属性存储用户指定的成本矩阵(交叉验证的SVM分类器)或成本属性存储用户指定的成本矩阵(旨在系综分类器)。
如果您希望软件像以前版本中那样处理成本矩阵、先验概率和观测权重,请调整非默认成本矩阵的先验概率和观测权重,如中所述调整错误分类代价矩阵的先验概率和观测权重.然后,在训练分类模型时,指定调整后的先验概率和观察权重之前
而且权重
名称-值参数,并使用默认开销矩阵。
R2022a:默认的LossFun
值改变了交叉验证的GAM和神经网络分类器
的默认值从R2022a开始LossFun
广义加性模型(GAM)和神经网络模型的名称-值参数都改变了,因此kfoldLoss
函数使用“mincost”
选项(最小预期误分类代价)作为默认值,当交叉验证的分类对象使用后验概率进行分类得分时。
如果输入模型对象的模型类型
CVMdl
是GAM分类器,默认值为“mincost”
如果ScoreTransform
的属性CVMdl
(
)是CVMdl
.ScoreTransform分对数的
;否则,默认值为“classiferror”
.如果模型类型
CVMdl
是神经网络模型分类器,默认值为“mincost”
.
在以前的版本中,默认值为“classiferror”
.
如果使用默认成本矩阵(其元素值为0表示正确分类,为1表示错误分类),则不需要对代码进行任何更改。的“mincost”
选项等价于“classiferror”
默认成本矩阵的选项。
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。