kfoldLoss
交叉验证分类模型的分类损失
描述
例子
估计交叉验证的分类误差
加载电离层
数据集。
负载电离层
生长一棵分类树。
tree = fitctree(X,Y);
使用10倍交叉验证对分类树进行交叉验证。
Cvtree = crossval(树);
估计交叉验证的分类误差。
L = kfoldLoss(cvtree)
L = 0.1083
估计交叉验证的分类误差
加载电离层
数据集。
负载电离层
使用AdaBoostM1训练100棵决策树的分类集合。将树桩指定为弱学习器。
t = templateTree(“MaxNumSplits”1);ens = fitcensemble(X,Y,“方法”,“AdaBoostM1”,“学习者”t);
使用10倍交叉验证对集成进行交叉验证。
Cvens = crossval(ens);
估计交叉验证的分类误差。
L = kfoldLoss(cvens)
L = 0.0655
找到GAM使用的最优树数kfoldLoss
训练10次交叉验证的广义加性模型(GAM)。然后,用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 =带有字段的结构体:InteractionTrees: [1 2 2 2 2 1 2 2 2 2 2]
kfoldLoss
可以使用多达59个预测树和一个交互树计算累积误差。
绘制累积的10倍交叉验证的分类错误率(以十进制表示的误分类率)。指定“IncludeInteractions”
作为假
从计算中排除相互作用项。
L_noInteractions = kfoldLoss(CVMdl,“模式”,“累积”,“IncludeInteractions”、假);图绘制(0:min (CVMdl.NumTrainedPerFold.PredictorTrees) L_noInteractions)
的第一个元素L_noInteractions
仅使用截距(常数)项获得的所有折叠的平均误差。(J + 1
的要素L_noInteractions
平均误差是用截距项和第一项得到的吗J
每个线性项的预测树。绘制累积损失可以让您监控随着GAM中预测树数量的增加,误差是如何变化的。
找出最小误差和用于实现最小误差的预测树的数量。
[M,I] = min(L_noInteractions)
M = 0.0655
I = 23
GAM在包含22棵预测树时达到最小误差。
使用线性项和交互项计算累积分类误差。
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,' fold ',[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”
如果模型类型是集成或支持向量机分类器。金宝app默认值为
“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”;
对于SVM模型,可以通过设置来指定使用后验概率作为分类分数
“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
观测权值的乘1数值向量。如果你通过了W
,软件将其元素归一化,求和为1
。成本
是一个K
——- - - - - -K
错误分类代价的数值矩阵。例如,成本= 1 (K) - 1眼(K)
的成本。0
为正确分类,和1
误分类。
使用以下命令指定函数
“LossFun”@
。lossfun
有关损失函数的更多详细信息,请参见分类损失。
例子:“LossFun”、“枢纽”
数据类型:字符
|字符串
|function_handle
模式
- - - - - -输出的聚合级别
“平均”
(默认)|“个人”
|“累积”
输出的聚合级别,指定为“平均”
,“个人”
,或“累积”
。
价值 | 描述 |
---|---|
“平均” |
输出是所有折叠的标量平均值。 |
“个人” |
输出是一个长度的向量k每折叠包含一个值,其中k是折叠次数。 |
“累积” |
请注意 如果要指定此值,
|
例子:“模式”,“个人”
输出参数
l
-分类损失
数字标量|数字列向量
分类损失,作为数字标量或数字列向量返回。
如果
模式
是“平均”
,然后l
是所有折叠的平均分类损失。如果
模式
是“个人”
,然后l
是一个k- × 1的数字列向量,包含每个折叠的分类损失,其中k是折叠次数。如果
模式
是“累积”
和CVMdl
是ClassificationPartitionedEnsemble
,然后l
是一个分钟(CVMdl.NumTrainedPerFold)
- × 1数值列向量。每个元素j
用弱学习器训练的集成得到的函数在所有折叠上的平均分类损失是多少1: j
。如果
模式
是“累积”
和CVMdl
是ClassificationPartitionedGAM
,则输出值取决于IncludeInteractions
价值。如果
IncludeInteractions
是假
,然后l
是一个(1 + min(NumTrainedPerFold.PredictorTrees))
- × 1数值列向量。的第一个元素l
是仅使用截距(常数)项获得的所有折叠的平均分类损失。的(j + 1)
的元素l
平均损失是用截距项和第一项求得的吗j
每个线性项的预测树。如果
IncludeInteractions
是真正的
,然后l
是一个(1 + min(NumTrainedPerFold.InteractionTrees))
- × 1数值列向量。的第一个元素l
是使用截距(常数)项和每个线性项的所有预测树获得的所有折叠的平均分类损失。的(j + 1)
的元素l
平均损失是否使用截距项,每个线性项的所有预测树,以及第一个j
每个交互项的交互树。
更多关于
分类损失
分类损失函数度量分类模型的预测不准确性。当您在许多模型中比较相同类型的损失时,较低的损失表示较好的预测模型。
考虑以下场景。
l为分类损失的加权平均。
n是样本量。
对于二元分类:
yj是观察到的类标签。软件将其编码为-1或1,表示负类或正类(或中第一类或第二类)
一会
分别属性)。f(Xj)为观测的正类分类分数(行)j预测器数据X。
米j=yjf(Xj)为分类观测的分类分数j进入类对应的yj。的正值米j指出正确的分类,不要造成太多的平均损失。的负值米j指出不正确的分类和显著贡献平均损失。
对于支持多类分类的算法(即金宝appK≥3):
yj*是的向量K- 1个零,其中1在与真实观察类对应的位置yj。例如,如果第二个观测值的真实类别是第三个类别,并且K= 4,然后y2*= (
0 0 1 0
]“。类的顺序对应于一会
属性。f(Xj)为长度K用于观察的班级分数向量j预测器数据X。分数的顺序与类的顺序相对应
一会
属性。米j=yj*”f(Xj)。因此,米j是模型预测的真实观察类的标量分类分数。
观察重量j是wj。该软件对观测权值进行归一化,使其和等于存储在模型中的相应先验类概率
之前
财产。因此,
在此场景中,下表描述了支持的损失函数,可以使用金宝appLossFun
名称-值参数。
损失函数 | 的价值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)上运行来加速代码。
使用注意事项和限制:
此函数完全支持以下交叉验证模型对象的GP金宝appU数组:
训练的集成分类器
fitcensemble
k-最近邻分类器
fitcknn
金宝app训练的支持向量机分类器
fitcsvm
二叉决策树的多类分类训练
fitctree
有关更多信息,请参见在GPU上运行MATLAB函数(并行计算工具箱)。
版本历史
在R2011a中引入R2022a:kfoldLoss
对于交叉验证的SVM和具有非默认代价矩阵的集成分类器返回不同的值
如果在交叉验证支持向量机或集成分类模型的输入模型对象时指定非默认代价矩阵,则kfoldLoss
函数返回与以前版本不同的值。
的kfoldLoss
函数使用存储在W
财产。函数中存储的代价矩阵成本
属性LossFun
名称-值参数为“classifcost”
或“mincost”
。函数使用W
和成本
属性值没有改变。但是,对于具有非默认代价矩阵的交叉验证SVM和集成模型对象,存储在输入模型对象中的属性值发生了变化,因此该函数可以返回不同的值。
有关属性值更改的详细信息,请参见成本属性存储用户指定的成本矩阵(交叉验证的SVM分类器)或成本属性存储用户指定的成本矩阵(交叉验证集成分类器)。
如果您希望软件像以前的版本一样处理成本矩阵、先验概率和观察权重,请调整非默认成本矩阵的先验概率和观察权重,如调整错误分类代价矩阵的先验概率和观测权值。然后,当你训练一个分类模型时,指定调整后的先验概率和观察值权重之前
和权重
分别使用名称-值参数,并使用默认成本矩阵。
R2022a:默认的LossFun
对于交叉验证的GAM和神经网络分类器,值已经改变
从R2022a开始,默认值为LossFun
广义加性模型(GAM)和神经网络模型的name-value参数都改变了,因此kfoldLoss
函数使用“mincost”
选项(最小预期错误分类成本)作为交叉验证的分类对象对分类分数使用后验概率时的默认值。
如果输入模型对象的模型类型
CVMdl
为GAM分类器,默认值为“mincost”
如果ScoreTransform
的属性CVMdl
(
)是CVMdl
.ScoreTransform分对数的
;否则,默认值为“classiferror”
。如果模型类型为
CVMdl
是神经网络模型分类器,默认值是“mincost”
。
在以前的版本中,默认值是“classiferror”
。
如果使用默认成本矩阵(其元素值为0表示正确分类,1表示不正确分类),则不需要对代码进行任何更改。的“mincost”
选项相当于“classiferror”
默认成本矩阵的选项。
第一MATLAB
在MATLAB中编写了一种常用的求解方法:
Esegui将在MATLAB中执行编译。I浏览器网页不支持命令MATLAB。金宝app
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。