主要内容

kfoldLoss

交叉验证分类模型的分类损失

    描述

    例子

    l= kfoldLoss (CVMdl返回由交叉验证的分类模型获得的分类损失CVMdl.对于每一个褶皱,kfoldLoss使用训练折叠观测训练的分类器计算验证折叠观测的分类损失。CVMdl。X而且CVMdl。Y包含两组观察结果。

    例子

    l= kfoldLoss (CVMdl名称,值返回由一个或多个名称-值参数指定的附加选项的分类丢失。例如,您可以指定一个自定义丢失函数。

    例子

    全部折叠

    加载电离层数据集。

    负载电离层

    种植一个分类树。

    树= 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

    训练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)

    图中包含一个axes对象。axis对象包含一个类型为line的对象。

    第一个元素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岁没有交叉验证。

    输入参数

    全部折叠

    交叉验证的分区分类器,指定为ClassificationPartitionedModelClassificationPartitionedEnsemble,或ClassificationPartitionedGAM对象。你可以用两种方式创建对象:

    • 将下表中列出的经过训练的分类模型传递给它crossval对象的功能。

    • 使用下表中列出的函数训练分类模型,并为函数指定一个交叉验证名称-值参数。

    名称-值参数

    指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

    在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

    例子:kfoldLoss(CVMdl,'Folds',[1 2 3 5])指定使用第一、第二、第三和第五次折叠来计算分类损失,但排除第四次折叠。

    要使用的折叠指标,指定为正整数向量。的元素折叠一定在1CVMdl。KFold

    该软件只使用指定的折叠折叠

    例子:“折叠”,[1 4 10]

    数据类型:|

    标记以包括模型的交互术语,指定为真正的.这个论点仅对广义加性模型(GAM)有效。也就是说,只有当CVMdlClassificationPartitionedGAM

    默认值为真正的如果模型在CVMdlCVMdl。训练有素的)包含交互术语。取值必须为如果模型不包含交互项。

    数据类型:逻辑

    丢失函数,指定为内置丢失函数名或函数句柄。的默认损失函数取决于模型的类型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的所有其他元素p0

      • 年代是一个n——- - - - - -K分类分数的数字矩阵。列顺序与中的类顺序对应CVMdl。ClassNames.输入年代类似于输出参数分数kfoldPredict

      • W是一个n-by-1观察权重的数值向量。如果你通过W,软件将其元素归一化求和1

      • 成本是一个K——- - - - - -K错误分类成本的数字矩阵。例如,成本=个数(K) -眼数(K)的成本。0为了正确的分类,和1误分类。

      使用以下命令指定函数“LossFun”@lossfun

    有关损失函数的更多详细信息,请参见分类损失

    例子:“LossFun”、“枢纽”

    数据类型:字符|字符串|function_handle

    输出的聚合级别,指定为“平均”“个人”,或“累积”

    价值 描述
    “平均” 输出是所有折叠的标量平均值。
    “个人” 输出是一个长度向量k每次折叠包含一个值,其中k是折叠的次数。
    “累积”

    请注意

    如果你想指定这个值,CVMdl必须是一个ClassificationPartitionedEnsemble对象或ClassificationPartitionedGAM对象。

    • 如果CVMdlClassificationPartitionedEnsemble,则输出为长度向量分钟(CVMdl.NumTrainedPerFold).每个元素j用弱学习者训练的集合函数得到的是所有折叠的平均值吗1: j

    • 如果CVMdlClassificationPartitionedGAM,则输出值取决于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是所有折叠的平均分类损失。

    • 如果模式“个人”,然后l是一个k-by-1数字列向量,包含每折叠的分类损失,其中k是折叠的次数。

    • 如果模式“累积”而且CVMdlClassificationPartitionedEnsemble,然后l是一个分钟(CVMdl.NumTrainedPerFold)-by-1数值列向量。每个元素j用弱学习者训练的集合函数得到的所有折叠的平均分类损失是多少1: j

    • 如果模式“累积”而且CVMdlClassificationPartitionedGAM,则输出值取决于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,表示负数或正类(或中的第一个或第二个类)一会分别属性)。

      • fXj)为观察正级分类分数(行)j预测数据X

      • jyjfXj)为分类观察的分类分数j成对应的类yj.积极的价值观j指出正确的分类和不贡献太多的平均损失。负的j指出不正确的分类和对平均损失有显著贡献。

    • 对于支持多类分类的算法(即K≥3):

      • yj是的向量K- 1个0,其中1在对应于真实的观察类的位置yj.例如,如果第二次观测的真类是第三类和K= 4,然后y2= (0 0 1 0]“.类的顺序对应于一会属性。

      • fXj)为长度K班级成绩的观察向量j预测数据X.分数的顺序与课程的顺序相对应一会属性。

      • jyjfXj).因此,j是模型为真实的、观察到的类预测的标量分类分数。

    • 观察权重jwj.软件对观察权重进行归一化处理,使其与存储在之前财产。因此,

      j 1 n w j 1.

    对于这种场景,下表描述了可以使用LossFun名称-值参数。

    损失函数 的价值LossFun 方程
    二项异常 “binodeviance” l j 1 n w j 日志 1 + 经验值 2 j
    观察到的误分类代价 “classifcost”

    l j 1 n w j c y j y j

    在哪里 y j 类标签是否与分数最大的类对应,和 c y j y j 将观察结果分类的成本是用户指定的吗 y j 当它真正的阶级是yj

    错误的十进制率分类 “classiferror”

    l j 1 n w j y j y j

    在哪里·}为指示函数。

    叉损失 “crossentropy”

    “crossentropy”仅适用于神经网络模型。

    加权交叉熵损失为

    l j 1 n w ˜ j 日志 j K n

    的权重 w ˜ j 和是归一化的吗n而不是1。

    指数损失 “指数” l j 1 n w j 经验值 j
    铰链的损失 “枢纽” l j 1 n w j 马克斯 0 1 j
    分对数损失 分对数的 l j 1 n w j 日志 1 + 经验值 j
    最小的预期错误分类成本 “mincost”

    “mincost”仅当分类分数为后验概率时才适用。

    软件利用此方法计算加权最小期望分类成本j= 1,…,n

    1. 估计分类观察的预期误分类成本Xj到类k

      γ j k f X j C k

      fXj)为观测的类后验概率的列向量XjC成本矩阵是否存储在成本模型的属性。

    2. 为观察j,预测最小期望误分类代价对应的类标签:

      y j argmin k 1 ... K γ j k

    3. 使用C,确定所产生的成本(cj)进行预测。

    最小期望误分类成本损失的加权平均值为

    l j 1 n w j c j

    二次损失 “二次” l j 1 n w j 1 j 2

    如果使用默认代价矩阵(其元素值为0表示正确分类,为1表示错误分类),则损失值为“classifcost”“classiferror”,“mincost”都是相同的。对于具有非默认代价矩阵的模型,“classifcost”损失相当于“mincost”大部分时间都是损失。如果对具有最大后验概率的类的预测不同于对具有最小期望代价的类的预测,则这些损失可能是不同的。请注意,“mincost”仅当分类分数为后验概率时才适用。

    该图比较了损失函数(除“classifcost”“crossentropy”,“mincost”)超过分数一个观察。一些函数经过点(0,1)被归一化。

    不同损失函数的分类损失比较

    算法

    kfoldLoss计算相应的描述的分类损失损失对象的功能。有关特定于模型的描述,请参阅相应的损失功能参考页下表。

    模型类型 损失函数
    判别分析分类器 损失
    集成分类器 损失
    广义加性模型分类器 损失
    k最近的邻居分类器 损失
    朴素贝叶斯分类器 损失
    神经网络分类器 损失
    支持向量机分类器 损失
    用于多类分类的二叉决策树 损失

    扩展功能

    版本历史

    介绍了R2011a

    全部展开

    Baidu
    map