resubLoss

类:ClassificationTree

通过resubstitution分类错误

语法

L = resubLoss(树)
L = resubLoss(树,名称,值)
L = resubLoss(树的子树,subtreevector)
(L, se) = resubLoss(树的子树,subtreevector)
[L, se, NLeaf] = resubLoss(树的子树,subtreevector)
[L, se, NLeaf bestlevel] = resubLoss(树的子树,subtreevector)
[L,...] = resubLoss(树,“子树”,subtreevector,名称,值)

描述

l= resubLoss()返回重新替换损失,即计算的数据的损失fitctree用于创建

l= resubLoss(,名称,值)返回一个或多个指定的附加选项的损失名称,值对参数。您可以按照任何顺序指定多个名称 - 值对参数Name1, Value1,…,的家

l= resubLoss(,“子树”,subtreevector)返回树木分类错误的矢量修剪序列中subtreevector

(l,SE] = resubLoss(,“子树”,subtreevector)返回分类错误的标准错误的向量。

(l,SE,NLeaf] = resubLoss(,“子树”,subtreevector)返回修剪序列的树的叶节点的数的矢量。

(l,SE,NLeaf,bestlevel] = resubLoss(,“子树”,subtreevector)属性中定义的最佳修剪级别的TreeSize名称 - 值对。默认情况下,bestlevel是修剪水平,让损失降到最低的一个标准差之内的损失。

[L,...] = resubLoss(,“子树”,subtreevector,名称,值)返回由一个或多个指定的附加选项的损失统计信息名称,值对参数。您可以按照任何顺序指定多个名称 - 值对参数Name1, Value1,…,的家

输入参数

全部展开

通过构建的分类树fitctree

名称-值对的观点

的可选逗号分隔对名称,值参数。名称参数名和是对应的值。名称必须出现引号内。您可以按照任何顺序指定多个名称和值对参数Name1, Value1,…,的家

损耗函数,指定为逗号分隔的一对组成的'LossFun'以及内置的丢失函数名或函数句柄。

  • 下表列出了可用的损失函数。使用其对应的字符向量或字符串标量指定一个。

    描述
    “binodeviance” 二项式越轨
    “classiferror” 分类错误
    “指数” 指数
    '合页' 铰链
    分对数的 物流
    “mincost” 最小期望误分类代价(对于后验概率的分类分数)
    “二次” 二次

    “mincost”适合于那些后验概率分类分数。分类树在默认情况下返回后验概率作为分类的分数(见预测)。

  • 使用函数句柄符号指定自己的函数。

    假设n为观察的次数XK为不同类别的数目(numel(tree.ClassNames))。你的函数必须有这个签名

    lossvalue =lossfun(C、S、W、成本)
    地点:

    • 输出参数lossvalue是一个标量。

    • 选择函数名(lossfun)。

    • C是一个n——- - - - - -K与指示对应的观察属于哪个类别的行逻辑矩阵。列的顺序对应于类的顺序tree.ClassNames

      构造C通过设置C(P,Q)= 1如果观察p是在课堂上,对于每一行。组行的所有其他元素p0

    • 年代是一个n——- - - - - -K分类分数的数字矩阵。列的顺序对应于类的顺序tree.ClassNames年代是一个分类分数矩阵,类似的输出预测

    • W是一个n×1观察权重的数值向量。如果您通过W,软件将它们标准化,使其总和1

    • 成本是一个K——- - - - - -K错误分类代价的数值矩阵。例如,成本=酮(K) - 眼(K)指定成本0为正确分类,和1误分类。

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

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

数据类型:字符||function_handle

名称,值与修剪子树相关的参数:

删除级别,指定为逗号分隔对所组成的“子树”和一个升序或的非负整数向量“所有”

如果指定一个矢量,那么将所有元件必须至少0在最马克斯(tree.PruneList)0表示完整的、未修剪的树,并且马克斯(tree.PruneList)表示已完全修剪的树(即。,只是根节点)。

如果您指定“所有”,然后resubLoss对所有子树(即,the entire pruning sequence). This specification is equivalent to using0:最大(tree.PruneList)

resubLoss李子到每一层的指示子树,然后估计相应的输出参数。的大小子树确定的一些输出参数的大小。

调用子树,属性PruneListPruneAlpha不能是空的。换句话说,成长通过设置“修剪”,“上”,或通过修剪运用修剪

例子:“子树”,“全部”

数据类型:||字符|

树的大小,指定为逗号分隔对所组成的“TreeSize”和下列价值观之一:

  • 'SE'- - - - - -损失返回最高修剪水平,而损失在最低修剪水平的一个标准偏差内(l+SE,在那里lSE涉及在最小值子树)。

  • “最小值”- - - - - -损失返回的元素子树以最小的损失,通常是最小的元素子树

输出参数

l

分类损失中,矢量的长度子树。错误的含义取决于中的值权重LossFun

SE

损失的标准误差,一个向量的长度子树

NLeaf

在修剪的子树的叶子(终端节点)的数量,一个向量的长度子树

bestlevel

其值依赖于的标量的TreeSize:

  • 的TreeSize='SE'- - - - - -损失返回最高修剪水平,而损失在最低修剪水平的一个标准偏差内(l+SE,在那里lSE涉及在最小值子树)。

  • 的TreeSize=“最小值”- - - - - -损失返回的元素子树以最小的损失,通常是最小的元素子树

例子

全部展开

计算的再替换分类误差电离层数据。

负载电离层树= fitctree (X, Y);L = resubLoss(树)
L = 0.0114

未修剪的决策树容易过度拟合。平衡模型复杂性和样本外性能的一种方法是修剪树(或限制它的增长),使样本内和样本外性能都令人满意。

加载费舍尔的虹膜数据集。将数据划分为训练(50%)和验证(50%)集。

负载fisheririsN =尺寸(MEAS,1);RNG(1)%的再现性idxTrn =假(N,1);idxTrn(randsample(N,圆形(0.5 * N)))= TRUE;%培训组逻辑指数idxVal = idxTrn == FALSE;%验证设置逻辑索引

生成,使用训练集的分类树。

Mdl = fitctree(量(idxTrn:),物种(idxTrn));

查看分类树。

视图(Mdl,“模式”,“图”);

分类树有四个修剪水平。Level 0是满的,未修剪的树(如图显示)。级别3仅仅是根节点(即,没有裂痕)。

检查每个子树(或修剪级别)的训练样本分类错误,排除最高级别。

m = max(Mdl.PruneList) - 1;trnLoss = resubLoss (Mdl,“子树”,0:米)
trnLoss =3×10.0267 0.0533 0.3067
  • 完整的,未修剪的树分类错误的大约2.7%的训练观察。

  • 被修剪到1级的树大约有5.3%的训练观察结果分类错误。

  • 树被修剪到第2级。,a stump) misclassifies about 30.6% of the training observations.

检查每个级别不包括最高级别的验证样本分类错误。

valLoss =损失(Mdl量(idxVal:),物种(idxVal),“子树”,0:米)
valLoss =3×10.0369 0.0237 0.3067
  • 完整的、未修剪的树有3.7%的验证观察结果分类错误。

  • 树修剪水平1 misclassifies有关验证意见的2.4%。

  • 树被修剪到第2级。,a stump) misclassifies about 30.7% of the validation observations.

为了平衡模型复杂性和样本外性能,考虑修剪MDL1级。

pruneMdl =剪枝(MDL,'水平'1);视图(pruneMdl,“模式”,“图”)

更多关于

全部展开