主要内容

kfoldLoss

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

    描述

    例子

    l= kfoldLoss (CVMdl返回由交叉验证的分类模型获得的分类损失CVMdl。对于每一次折叠,kfoldLoss使用在训练层观测值上训练的分类器计算验证层观测值的分类损失。CVMdl。XCVMdl。Y包含两组观察值。

    例子

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

    例子

    全部折叠

    加载电离层数据集。

    负载电离层

    生长一棵分类树。

    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

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

    图包含一个轴对象。axes对象包含line类型的对象。

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

    输入参数

    全部折叠

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

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

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

    名称-值参数

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

    在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字在报价。

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

    要使用的折叠索引,指定为正整数向量。的元素折叠必须在范围内1CVMdl。KFold

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

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

    数据类型:|

    标志,用于包含模型的交互项,指定为真正的。这个论证只对广义加性模型(GAM)有效。也就是说,您只能在以下情况下指定此参数CVMdlClassificationPartitionedGAM

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

    数据类型:逻辑

    损失函数,指定为内置损失函数名或函数句柄。默认的损失函数取决于模型类型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”;
        对于所有其他集成方法,该软件不支持后验概率作为分类分数。金宝app

      • 对于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的所有其他元素p0

      • 年代是一个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是折叠次数。
    “累积”

    请注意

    如果要指定此值,CVMdl一定是。ClassificationPartitionedEnsemble对象或ClassificationPartitionedGAM对象。

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

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

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

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

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

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

      • jyjfXj)为分类观测的分类分数j进入类对应的yj。的正值j指出正确的分类,不要造成太多的平均损失。的负值j指出不正确的分类和显著贡献平均损失。

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

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

      • fXj)为长度K用于观察的班级分数向量j预测器数据X。分数的顺序与类的顺序相对应一会属性。

      • jyj*fXj)。因此,j是模型预测的真实观察类的标量分类分数。

    • 观察重量jwj。该软件对观测权值进行归一化,使其和等于存储在模型中的相应先验类概率之前财产。因此,

      j 1 n w j 1.

    在此场景中,下表描述了支持的损失函数,可以使用金宝appLossFun名称-值参数。

    损失函数 的价值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-最近邻分类器 损失
    朴素贝叶斯分类器 损失
    神经网络分类器 损失
    金宝app支持向量机分类器 损失
    多类分类的二叉决策树 损失

    扩展功能

    版本历史

    在R2011a中引入

    全部展开