testckfold

通过反复的交叉验证的两种分类模型的精度比较

描述

testckfold统计学评估两种分类模型通过反复交叉验证这两个模型中,确定在分类损失的差异,然后通过组合分类损耗差异配制检验统计量的准确度。当样本大小被限制这种类型的测试是特别适合的。

您可以评估分类模型的准确度是否不同,还是比另外一个分类模型执行得更好。可用的测试包括一个5×2配对t试验中,将5×2配对F测试,和一个10×10次重复交叉验证t测试。有关更多细节,请参见重复交叉验证测试。为了加快计算速度,testckfold万博1manbetx支持并行计算(需要并行计算工具箱™许可证)。

例子

h= testckfold (C1,C2,X1,X2)返回执行一个5乘2配对的测试决定F交叉验证测试。零假设是分类模型C1C2使用表中的预测器和响应数据预测真实的类标签是否具有相同的准确性X1X2h=1表示在5%的显着性水平上拒绝零假设。

testckfold通过应用进行交叉验证试验C1C2在所有的预测变量X1X2, 分别。真正的类标签中X1X2一定是一样的。中的响应变量名X1,X2,C1.ResponseName,C2.ResponseName一定是一样的。

有关比较模型的示例,请参见提示

例子

h= testckfold (C1,C2,X1,X2,Y)应用完整的分类模型或分类模板C1C2数据表或矩阵中的所有预测变量X1X2, 分别。Y对应于真实类标签的表变量名,或一个真实类标签数组。

例子

h= testckfold (___,名称,值)使用任何的由一个或多个指定在先前语法的输入参数和其他选项名称,值对参数。例如,可以指定备选假设的类型,测试的类型,或使用并行计算的。

例子

(h,p,E1,E2)= testckfold (___)也返回p-VALUE的假设检验(p)和相应的分类损失每个交叉验证运行和折叠(E1E2)。

例子

全部折叠

在每一个节点,fitctree选择默认情况下使用穷举搜索到分裂的最佳预测。另外,您也可以选择拆分预测昭示着与曲率进行测试的响应依赖的最证据。此示例统计学比较的分类树通过穷举搜索最佳分裂生长和生长通过用相互作用进行曲率测试。

加载census1994数据集。

负载census1994.matRNG(1)%用于重现

使用训练集生成默认的分类树,adultdata,这是一个表。响应变量名是'薪水'

C1 = fitctree(adultdata,'薪水')
ClassNames: [<=50K >50K] ScoreTransform: 'none' NumObservations: 32561个属性,方法

C1是一个完整的ClassificationTree模型。它的ResponseName属性'薪水'C1使用穷举搜索,以最大分裂增益为基础,找出最佳分割预测器。

使用相同的数据集生成另一棵分类树,但指定使用带有交互的曲率测试找到最好的预测器进行分割。

C2 = fitctree (adultdata,'薪水',“PredictorSelection”,“interaction-curvature”)
C2 = ClassificationTree PredictorNames:{1x14细胞} ResponseName: '工资' CategoricalPredictors:[2 4 6 7 8 9 10 14]的类名:[<= 50K> 50K] ScoreTransform: '无' NumObservations:32561的属性,方法

C2也就是一个完整的ClassificationTree模型与ResponseName等于'薪水'

进行一个5乘2配对F测试比较使用训练集两种模型的精度。因为在数据集和所述响应的变量名ResponseName属性都是相等的,并且两个集合中的响应数据都是相等的,因此可以省略提供响应数据。

h = testckfold (C1、C2、adultdata adultdata)
H =逻辑0

h = 0表示不拒绝原假设C1C2在5%的水平上具有相同的精度。

进行统计检验使用5×2配对比较两种模式的误判率F测试。

加载费舍尔的虹膜数据集。

负载fisheriris;

创建一个朴素贝叶斯模板,并使用默认选项分类树模板。

C1 = templateNaiveBayes;C2 = templateTree;

C1C2是分别对应于朴素贝叶斯和分类树算法,模板对象。

测试的两款车型是否具有相同的预测精度。使用相同的预测数据为每个模型。testckfold执行一个5×2的,双面的,成对的F默认情况下测试。

RNG(1);%用于重现H = testckfold(C1,C2,Meas,测量,物种)
H =逻辑0

h = 0表示不拒绝零假设,这两个车型具有相同的预测精度。

进行统计测试来评估一个简单的模型是否有更好的精度比使用10×10重复交叉验证更复杂的模型t测试。

加载费舍尔的虹膜数据集。创建一个成本矩阵惩罚误分为setosa虹膜两倍误分为弗吉尼亚光圈为花斑癣。

负载fisheriris;汇总(物种)
值计数百分比setosa 50 33.33%50花斑癣33.33%锦葵50 33.33%
Cost = [0 2 2;2 0 1;2 10 0];一会= {'setosa'“花斑癣”“弗吉尼亚”};...%指定成本的行和列的顺序

分类的经验分布是均匀的,分类代价有轻微的不平衡。

创建两个ECOC模板:一种使用线性SVM二进制学习者和一个使用SVM二进制学习者配备了RBF内核。

tSVMLinear = templateSVM(“标准化”,真正);%线性SVM默认tSVMRBF = templateSVM ('KernelFunction',“RBF”,“标准化”,真正);C1 = templateECOC(“学习者”,tSVMLinear);C2 = templateECOC(“学习者”,tSVMRBF);

C1C2在ECOC模板对象。C1为线性支持向量机准备。C2为准备SVM与RBF核训练。

测试零假设简单的模型(C1)的精确程度,顶多与较复杂的模型(C2)在分类成本方面。进行10×10次重复交叉验证测试。请求返回p-价值和误分类成本。

RNG(1);%用于重现[H,P,E1,E2] = testckfold(C1,C2,Meas,测量,物种,...“另类”,“更大的”,'测试','10x10t','成本',成本,...“类名”,类名)
H =逻辑0
p = 0.1077
e1 =10×100 0 0 0.0667 0 0.0667 0.1333 0 0.1333 0 0.0667 0.0667 0 0 0 0 0.0667 0 0.0667 0.0667 0 0 0 0 0 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0 0.0667 0 0.0667 0 0 0.0667 0 0.0667 0.0667 0.0667 0 0.0667 0.0667 0 0 0 00 0 0.1333 0 0 0.0667 0 0 0.0667 0.0667 0.0667 0.0667 0 0 0.0667 0 0 0.0667 0 0.0667 0.0667 0 0.0667 0.0667 0 0.1333 0 0.0667 0 0 0 0.0667 0.1333 0.0667 0.0667 0 0 0 0 0 0 0.0667 0.0667 0.0667 0.0667 0 0 0.0667 0 0
E2 =10×100 0 0 0 0 0 0.0667 0.1333 0.1333 0.2667 0.0667 - 0.0667 0.1333 0 0 0 0 0 0 0 0 0.0667 0.1333 0.1333 0.0667 0.1333 0.1333 0.0667 0.0667 0.0667 0.1333 0.0667 0.0667 0.1333 0.1333 0 0 0 0 0 0 0.0667 0.0667 0.0667 0.0667 0.1333 0.1333 0.0667 0.0667 0.0667 - 0.0667 0 0.0667 0.1333 0.0667 0.0667 0.2000 0.0667 0 0 0 0 0 0.1333 0.0667 0.2000 0.0667 0 0 0.0667 0.1333 0.1333 0 0 0 0 0 0 0 0 0 0.2000 0.1333 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.1333 0.0667 0.0667 - 0.1333 0 0

p- 值小于0.10,这表明保留零假设简单的模型是最多那么精确更复杂的模型稍大。这个结果是任何显着性水平是一致的(Α)最多是0.10。

E1E2是10×10含误分类成本矩阵。行r对应于运行r重复交叉验证。列k对应于测试集折叠k一个特定的交叉验证运行范围内。的例如,元件(2,4)E2是0.1333。这个值的装置是,在交叉验证运行如图2所示,当测试组是折叠图4中,估计的测试集误分类代价是0.1333。

通过从更大的集合中选择一个预测变量(特征)子集来降低分类模型的复杂性,然后统计比较两种模型的准确性。

加载电离层数据集。

负载电离层;

使用AdaBoostM1和整个预测器集训练100个提升分类树的集合。检查每个预测器的重要性度量。

T = templateTree('MaxNumSplits'1);%弱学习者模板树对象C = fitcensemble(X,Y,'方法','AdaBoostM1',“学习者”,T);predImp = predictorImportance(C);数字;巴(predImp);H = GCA;h.XTick = 1:2:h.XLim(2);标题(“预测重要度”);xlabel(“预测”);ylabel(的重要措施);

找出5个最重要的预测因素。

[〜,idxSort] =排序(predImp,“降序”);idx5 = idxSort (1:5);

测试的两款车型是否具有相同的预测精度。指定减少数据集,然后充分预测数据。使用并行计算来加速计算。

S = RandStream('mlfg6331_64');选项= statset(“UseParallel”,真正,“流”,S,'UseSubstreams',真正);[H,P,E1,E2] = testckfold(C,C,X(:,idx5对应)中,X,Y,“选项”选项)
使用“本地”配置文件启动并行池(parpool)…连接到并行池(worker数量:4)。
H =逻辑0
p = 0.4161
e1 =5×20.0686 0.0795 0.0800 0.0625 0.0914 0.0568 0.0400 0.0739 0.0914 0.0966
E2 =5×20.0914 0.0625 0.1257 0.0682 0.0971 0.0625 0.0800 0.0909 0.0914 0.1193

testckfold将经过训练的分类模型作为模板,忽略所有拟合的参数C。也就是说,testckfold跨只会验证C仅使用指定的选项和预测器数据来估计超出折叠的分类损失。

h = 0表示不拒绝零假设,这两个车型具有相同的预测精度。这一结果有利于更简单的合奏。

输入参数

全部折叠

分类模型模板或受过训练的分类模型,指定为任何分类模型模板对象或这些表中所述训练的分类模型对象。

模板类型 返回的
分类树 templateTree
判别分析 templateDiscriminant
集成(推进、套袋和随机子空间) templateEnsemble
纠错输出编码(ECOC),多类分类模型 templateECOC
kNN templateKNN
朴素贝叶斯 templateNaiveBayes
万博1manbetx支持向量机 templateSVM
训练有素的型号类型 模型对象 返回的
分类树 ClassificationTree fitctree
判别分析 ClassificationDiscriminant fitcdiscr
乐团袋装分类模型 ClassificationBaggedEnsemble fitcensemble
集成分类模型 ClassificationEnsemble fitcensemble
ECOC模型 ClassificationECOC fitcecoc
kNN ClassificationKNN fitcknn
朴素贝叶斯 ClassificationNaiveBayes fitcnb
SVM ClassificationSVM fitcsvm

为了提高效率,提供而不是训练的分类模型对象分类模型模板对象。

分类模型模板或受过训练的分类模型,指定为任何分类模型模板对象或这些表中所述训练的分类模型对象。

模板类型 返回的
分类树 templateTree
判别分析 templateDiscriminant
集成(推进、套袋和随机子空间) templateEnsemble
纠错输出编码(ECOC),多类分类模型 templateECOC
kNN templateKNN
朴素贝叶斯 templateNaiveBayes
万博1manbetx支持向量机 templateSVM
训练有素的型号类型 模型对象 返回的
分类树 ClassificationTree fitctree
判别分析 ClassificationDiscriminant fitcdiscr
乐团袋装分类模型 ClassificationBaggedEnsemble fitcensemble
集成分类模型 ClassificationEnsemble fitcensemble
ECOC模型 ClassificationECOC fitcecoc
kNN ClassificationKNN fitcknn
朴素贝叶斯 ClassificationNaiveBayes fitcnb
SVM ClassificationSVM fitcsvm

为了提高效率,提供而不是训练的分类模型对象分类模型模板对象。

用于应用于第一个完整分类模型或模板的数据,C1,指定为数字矩阵或表。

每行X1对应于一个观测,并且每一列对应于一个变量。testckfold不支持多列变量和除万博1manbetx字符向量的单元数组外的单元数组。

X1X2必须是相同的数据类型,并且X1,X2,Y必须具有相同的若干意见。

如果您指定Y作为数组,那么testckfold对待的所有列X1作为单独的预测变量。

数据类型:||表格

用于应用于第二个完整分类模型或模板的数据,C2,指定为数字矩阵或表。

每行X2对应于一个观测,并且每一列对应于一个变量。testckfold不支持多列变量和除万博1manbetx字符向量的单元数组外的单元数组。

X1X2必须是相同的数据类型,并且X1,X2,Y必须具有相同的若干意见。

如果您指定Y作为数组,那么testckfold对待的所有列X2作为单独的预测变量。

数据类型:||表格

真类标签,指定为分类,字符或字符串数​​组,逻辑或数字向量,特征向量的单元阵列,或字符向量或标量的字符串。

  • 对于一个字符向量或标量的字符串,X1X2必须是表,他们的反应变量必须具有相同的名称和价值观,Y必须是共同的变量名。例如,如果X1.LabelsX2.Labels那么,响应变量是多少Y“标签”X1.LabelsX2.Labels必须等同。

  • 对于所有其他支持的数据类型,万博1manbetxY是一个真正的类标签数组。

    • 如果Y是一个字符数组,那么每个元素必须对应于数组的一行。

    • X1,X2,Y必须有相同数量的观测(行)。

  • 如果这两个表述都是正确的,那么可以省略supplyY

    • X1X2包含相同响应变量(值和名称)的表。

    • C1C2是否包含完整的分类模型ResponseName属性指定在响应变量名X1X2

    因此,testckfold使用表中的公共响应变量。例如,如果表中的响应变量是X1.LabelsX2.Labels的值C1.ResponseNameC2.ResponseName“标签”,那么你就不必供应了Y

数据类型:分类|烧焦||逻辑|||细胞

名称-值对的观点

的可选逗号分隔对名称,值参数。的名字参数名和是对应的值。的名字必须出现在引号内。可以按任意顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例子:“替代”、“大”、“测试”,“10 x10t”、“选项”,statsset (UseParallel,真的)指定到测试是否所述第一组第一预测类别标签的是比第二组更精确,以进行10×10 t检验,并且使用并行计算为交叉验证。

假设检验显著性水平,指定为逗号分隔对所组成'Α'和在区间(0,1)的标量值。

例子:'阿尔法',0.1

数据类型:|

替代假设进行评估,指定为逗号分隔的一对组成的“另类”以及表中列出的值之一。

备择假设说明 万博1manbetx支持测试
'不等'(默认) 对于预测Y中,该组从所得的预测C1应用于X1C2应用于X2有不平等的精度。 '5x2F','5x2t','10x10t'
“更大的” 对于预测Y中,该组从所得的预测C1应用于X1C2应用于X2 '5x2t''10x10t'
'减' 对于预测Y中,该组从所得的预测C1应用于X1不如C2应用于X2 '5x2t''10x10t'

有关支持测试的详细信息,请参阅万博1manbetx测试

例子:“另类”,“大”

标志识别所述第一测试组预测数据分类预测(X1),指定为逗号分隔的一对组成的'X1CategoricalPredictors'和以下其中之一:

  • 从指数的数值矢量1通过p,其中p的列数是X1

  • 长度的逻辑矢量p,一个真正条目的意思是对应的列X1是一个分类变量。

  • “所有”,意味着所有的预言者都是绝对的。

规格X1CategoricalPredictors是合适的,如果:

  • 至少有一个预测是绝对的和C1是分类树、分类树的集合、ECOC模型或朴素贝叶斯分类模型。

  • 所有的预测都是绝对的和C1是一个k神经网络分类模型。

如果您指定X1CategoricalPredictors对于任何其它情况,那么testckfold抛出一个错误。例如,该函数不能使用范畴预测器来训练SVM学习者。

默认值是[],表示不存在绝对的预言者。

例子:'X1CategoricalPredictors', '所有'

数据类型:||逻辑|烧焦|

标志识别所述第二测试组预测数据分类预测(X2),指定为逗号分隔的一对组成的“X2CategoricalPredictors”和以下其中之一:

  • 从指数的数值矢量1通过p,其中p的列数是X2

  • 长度的逻辑矢量p,一个真正条目的意思是对应的列X2是一个分类变量。

  • “所有”,意味着所有的预言者都是绝对的。

规格X2CategoricalPredictors是合适的,如果:

  • 至少有一个预测是绝对的和C2是分类树、分类树的集合、ECOC模型或朴素贝叶斯分类模型。

  • 所有的预测都是绝对的和C2是一个k神经网络分类模型。

如果您指定X2CategoricalPredictors对于任何其它情况,那么testckfold抛出一个错误。例如,该函数不能使用范畴预测器来训练SVM学习者。

默认值是[],表示不存在绝对的预言者。

例子:'X2CategoricalPredictors', '所有'

数据类型:||逻辑|烧焦|

类名,指定为逗号分隔的一对组成的“类名”和分类,字符或字符串数​​组,逻辑或数字载体,或字符向量的单元阵列。您必须设置一会的数据类型Y

如果一会是一个字符数组,那么每个元素必须对应于数组的一行。

使用一会:

  • 指定任何输入参数尺寸量级对应于类的顺序。例如,使用一会指定尺寸的顺序成本

  • 选择测试的类的子集。例如,假设集所有不同类名的Y{ 'A', 'B', 'C'}。使用课堂上的观察来训练和测试模型'一个''C'只是,指定'类名',{ '一个', 'C'}

默认值是集合中的所有不同的类名Y

例子:“类名”,{' b ', ' g '}

数据类型:||逻辑|烧焦||细胞|分类

分类成本,指定为逗号分隔的一对组成的'成本'以及一个方阵或结构数组。

  • 如果你指定了方阵成本,然后成本(i, j)将一个分数分类的成本是多少j如果它的真类是。也就是说,行对应于真类和列对应于所预测的类。要为相应的行和列指定类订单成本,另外指定一会名称-值对的论点。

  • 如果指定了结构年代,然后年代必须有两个字段:

    • S.ClassNames,其包含类名作为为相同的数据类型的变量Y。您可以使用此字段指定的类的顺序。

    • S.ClassificationCosts,其中包含价值矩阵,具有行和列次序同S.ClassNames

对于成本敏感的测试中使用,testcholdout

它是提供用于训练分类模型相同的成本矩阵的最佳做法。

默认值是成本(i, j) = 1如果I〜= j的,成本(i, j) = 0如果我=我

例子:'Cost',[0 1 2;1 0 2;2 2 0)

数据类型:||结构体

损耗函数,指定为逗号分隔的一对组成的'LossFun''classiferror',“binodeviance”,“指数”,'合页'或功能句柄。

  • 下表列出了可用的损失函数。

    损失函数
    “binodeviance” 二项式越轨
    'classiferror' 分类错误
    “指数” 指数损失
    '合页' 铰链损失

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

    假设N =尺寸(X,1)样本容量是多少K独特的类。你的函数必须有签名lossvalue =lossfun(C,S,W,成本),地点:

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

    • lossfun是函数的名称。

    • C是一个n-通过-K与指示对应的观察属于哪个类行逻辑矩阵。列顺序对应于所述类顺序一会名称-值对的论点。

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

    • 年代是一个n-通过-K分类分数的数字矩阵。列顺序对应于所述类顺序一会名称-值对的论点。年代为分类分数矩阵。

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

    • 成本是一个K-通过-K分类成本的数字矩阵。例如,Cost = ones(K) - eye(K)指定的成本0对于正确的分类和成本1误分类。

    使用指定功能'LossFun',@lossfun

并行计算选项,指定为逗号分隔的一对组成的“选项”以及返回的结构数组statset。这些选项需要并行计算工具箱。testckfold使用“流”,“UseParallel”,'UseSubtreams'领域。

此表总结了可用的选项。

选项 描述
“流”

一个RandStream对象或此类对象的单元格数组。如果您没有指定,该软件使用默认的流或流。如果您指定中,使用一个单一的对象除了当满足下列条件:

  • 你有一个开放的平行池。

  • UseParallel真正

  • UseSubstreams

在这种情况下,使用相同的大小作为平行池的单元阵列。如果并行游泳池不开放,那么软件会尝试(根据自己的喜好)开放的,并必须提供单个随机数流。

“UseParallel” 如果您有并行计算工具箱,那么你可以通过调用设置的工人池'UseParallel',真
'UseSubstreams' 设置为真正指定的流并行计算“流”。默认值是。例如,一套一种类型的允许子,如'mlfg6331_64'要么'mrg32k3a'

例子:'选项',statset( 'UseParallel',真)

数据类型:结构体

先验概率为每个类,指定为逗号分隔的一对组成的“之前”'经验','制服',数字载体或结构。

此表概括了用于设置先验概率可用的选项。

描述
'经验' 类先验概率是类的相对频率Y
'制服' 所有类先验概率都等于1/K,其中K是的类的数量。
数字矢量 每个元素都是一个类的先验概率。属性指定订单一会名称-值对的论点。该软件标准化的元件,使得它们的和为1
结构体

的结构年代两个字段:

  • S.ClassNames将类名作为变量的类型包含Y

  • S.ClassProbs包含对应的先验概率的矢量。该软件标准化的元件,使得它们的和为1

例子:'之前',结构( '类名',{{ 'setosa', '云芝'}}, 'ClassProbs',[1,2])

数据类型:烧焦||||结构体

测试行为,指定为逗号分隔的一对组成的'测试'和他的一个下列:'5x2F','5x2t','10x10t'

描述 万博1manbetx支持备择假设
'5x2F'(默认) 5×2配对F测试。只适用于双面测试。 '不等'
'5x2t' 5×2配对t测试 '不等','减',“更大的”
'10x10t' 10×10次重复交叉验证t测试 '不等','减',“更大的”

有关可用测试的详细信息,请参见重复交叉验证测试。有关支持的备选假设的详细信息,万博1manbetx请参见替代

例子:“测试”、“10 x10t

冗长级别,指定为逗号分隔的对,由“详细”0,1, 要么2详细的控制的诊断信息,所述软件显示在命令窗口的每个交叉验证的训练期间折叠的量。

此表总结了可用的详细级别选项。

描述
0 该软件不显示诊断信息。
1 每次实现新的交叉验证运行时,该软件都会显示诊断消息。
2 每次训练上的特定折叠时它实现一个新的交叉验证运行每一次,和所述软件显示的诊断消息。

例子:'冗长',1

数据类型:|

观察权重,指定为逗号分隔的一对组成的“权重”和数字矢量。

的大小权重的行数必须等于X1。该软件对每一行的观察结果进行权衡X加上相应的权值权重

该软件规格化权重总结在相应类的先验概率的值。

数据类型:|

注:

  • testckfold将经过训练的分类模型视为模板。因此,忽略模型中所有拟合参数。也就是说,testckfold仅使用模型中指定的选项和预测器数据进行交叉验证。

  • 重复交叉验证检验依赖于零假设下检验统计量渐近正态的假设。高度不平衡的成本矩阵(例如,成本=[0 100 1 0])和高度的离散响应分布(即,大部分的观察是在一个小数量的类)可能违反渐近正态假设。对于成本敏感的测试,使用testcholdout

  • S,<未定义>值,空字符向量()、空字符串(“”),<缺失>值表示丢失的数据值。

输出参数

全部折叠

假设检验结果,返回一个逻辑值。

h = 1表示在拒绝原假设Α显著性水平。

h = 0时,表示未能拒绝原假设Α显著性水平。

数据类型:逻辑

p-测试的值,作为区间[0,1]中的标量返回。p给定零假设为真,随机检验统计量至少与观察到的检验统计量一样极端的概率。

testckfold估计p使用检验统计量,其与测试的类型而变化的分布。有关测试统计的详细信息,请参阅重复交叉验证测试

分类损失时,返回作为数字矩阵。的行E1对应于交叉验证运行和列对应于测试折。

testckfold施加第一测试组预测数据(X1)至第一个分类模式(C1)来估计所述第一组类的标签。

E1总结第一分类标记集预测真正的类标签的精度(Y)用于每次交叉验证运行和折叠。元素的含义E1依赖于分类损失的类型。

分类损失时,返回作为数字矩阵。的行E2对应于交叉验证运行和列对应于测试折。

testckfold应用第二个测试集预测数据(X2)至第二类分类模式(C2)来估计第二组类标签。

E2概述第二套类别标签预测真实类别标签的准确性(Y)用于每次交叉验证运行和折叠。元素的含义E2依赖于分类损失的类型。

更多关于

全部折叠

重复交叉验证测试

反复交叉验证测试结合数据反复交叉验证产生的分类损失差异,形成检验统计量,比较两种分类模型的准确率。当样本量有限时,重复交叉验证试验是有用的。

要进行一次R-通过-K测试:

  1. 随机分(按类分层)预测数据集和真实类标签进入K集,R次了。每个分部称为a每一组内运行被称为。每次运行都包含完整但分割的数据集。

  2. 对于运行r= 1到R,重复这些步骤k= 1到K:

    1. 储备倍k作为测试组,并使用在其余各自的预测数据集训练所述两个分类模型K- 1倍。

    2. 使用训练过的模型和它们各自的折线预测类标签k预测数据集。

    3. 将两组估计的标签与真实的标签进行比较,估计分类损失。表示 e c r k 作为分类损失当测试组是折k在运行r分类模型c

    4. 计算两个模型的分类损耗之间的区别:

      δ ^ r k = e 1 r k - e 2 r k

    在跑步的最后,有K每个分类模型的分类损失。

  3. 合并步骤2的结果。为每一个r= 1到R:

    • 估计差异的折内平均值及其平均值: δ ¯ r = 1 K Σ k = 1 K δ ^ k r

    • 估计差异的总体平均值: δ ¯ = 1 K R Σ r = 1 R Σ k = 1 K δ ^ r k

    • 估计差异的折内方差: 年代 r 2 = 1 K Σ k = 1 K ( δ ^ r k - δ ¯ r ) 2

    • 估计的内倍差的平均值: 年代 ¯ 2 = 1 R Σ r = 1 R 年代 r 2

    • 估计的差的总体样本方差: 年代 2 = 1 K R - 1 Σ r = 1 R Σ k = 1 K ( δ ^ r k - δ ¯ ) 2

    计算检验统计量。所有支持万博1manbetx试验这里描述的假设,下H0时,估计差是独立的,近似正态分布,均值为0,有一个有限的公共标准差。但是,这些测试违反了独立性假设,因此测试统计量分布是近似的。

    • R= 2,试验是配对检验。这两个支撑测试配万博1manbetx对tF测试。

      • 配对的测试统计量t测试

        t p 一个 r e d * = δ ^ 11 年代 ¯ 2

        t p 一个 r e d * 有一个t- 配送与R零假设下的自由度。

        为了减少相关的估计的差之间的效果,量 δ ^ 11 占据分子,而不是 δ ¯

        5×2配对t测试可以是略显保守[4]

      • 配对的测试统计量F测试

        F p 一个 r e d * = 1 R K Σ r = 1 R Σ k = 1 K ( δ ^ r k ) 2 年代 ¯ 2

        F p 一个 r e d * 有一个F分布与RKR的自由度。

        一个5×2配对F测试有可比电源5×2t测试,但较为保守[1]

    • R> 2,测试是一个重复的交叉验证测试。检验统计量

      t C V * = δ ¯ 年代 / ν + 1

      t C V * 有一个t分布与ν的自由度。如果这些差异是真正独立的,那么ν=RK- 1。在这种情况下,必须优化自由度参数。

      用于10乘10重复交叉验证t测试时,最佳自由度在8至11之间([2][3])。testckfold使用ν= 10。

重复交叉验证测试相对于成对测试的优点是结果更具有可重复性[3]。缺点是它们需要较高的计算资源。

分类损失

分类损失表示分类模型或预测的标签集的准确度。通常,对于一个固定的成本矩阵,分类精度作为分类损失增加而减小。

testckfold返回分类损失(见E1E2)备择假设下(即,无限制分类损失)。在下面的定义:

  • 分类的损失集中于第一个分类模型。第二个模型分类的损失是相似的。

  • n测试是测试设置样本大小。

  • (x)为指示函数。如果x是一个真正的声明,然后(x)= 1。否则,(x)= 0。

  • p ^ 1 j 分类模型1预测的分类分配是否可供观察j

  • yj观察的真正分类标签是什么j

  • 二项式越轨具有形式

    e 1 = Σ j = 1 n t e 年代 t w j 日志 ( 1 + EXP ( - 2 y j f ( X j ) ) ) Σ j = 1 n t e 年代 t w j

    地点:

    • yj= 1为正类和-1的负类。

    • f ( X j ) 为分类分数。

    二项式偏差具有二项式似然函数的最大化的连接。有关二项式越轨行为的详细信息,请参阅[5]

  • 指数损失与二项异常行为相似,其形式是什么

    e 1 = Σ j = 1 n t e 年代 t w j EXP ( - y j f ( X j ) ) Σ j = 1 n t e 年代 t w j

    yj f ( X j ) 采用与二项偏差公式相同的形式。

  • 铰链损失具有形式

    e 1 = Σ j = 1 n w j 马克斯 { 0 , 1 - y j f ( X j ) } Σ j = 1 n w j ,

    yj f ( X j ) 采用与二项偏差公式相同的形式。

    铰链损失线性惩罚的错误分类的观察,并与用于优化的SVM目标函数。有关铰链损失的详细信息,请参阅[5]

  • 误分类率,或分类误差,是区间[0,1]中的标量,表示错误分类观测的比例。即第一个分类模型的误分类率为

    e 1 = Σ j = 1 n t e 年代 t w j ( p ^ 1 j y j ) Σ j = 1 n t e 年代 t w j

提示

  • 方式比较模型的例子包括:

    • 通过将同一组预测数据的比较简单的分类模型和更复杂的模型的精度。

    • 用两组不同的预测器比较两种不同模型的准确性。

    • 执行各种类型的特征选择。例如,你可以比较使用一组预测的一个受过训练的一个子集或不同的一组预测的准确性培养了模型的准确性。您可以任意选择一组预测的,或使用像PCA或顺序特征选择特征选择技术(见主成分分析sequentialfs)。

  • 如果这两个表述都是正确的,那么可以省略supplyY

    • X1X2是包含响应变量表,并使用相同的响应变量名。

    • C1C2是含等于全分类模型ResponseName属性(如。比较字符串(C1.ResponseName C2.ResponseName)=1)。

    因此,testckfold使用表中的公共响应变量。

  • 执行成本不敏感特征选择的一种方法是:

    1. 创建描述第一个分类模型的分类模型模板(C1)。

    2. 创建一个表征第二分类模型分类模型模板(C2)。

    3. 指定两个预测数据集。例如,指定X1为充分预测和集X2作为一个简化集。

    4. 输入testckfold(C1,C2,X1,X2,Y, '替代', '少')。如果testckfold返回1,然后有足够的证据表明分类模型使用较少的预测变量进行比使用完全预测结果集合模型更好。

    或者,您可以评估两种模型的准确性之间是否存在显著差异。要执行此评估,请删除“替代”,“少”说明书中第4步。testckfold进行双边测试,和h = 0表明没有足够的证据表明这两个模型的精度差。

  • 该测试适用于错误率分类损失,但您可以指定其他丢失函数(请参阅LossFun)。关键的假设,估计的分类损失是独立的并且通常与双面零假设下均值为0,有限共同方差分布。比错误率等分类的损失也不能违反这个假设。

  • 高度离散的数据、不平衡的类和高度不平衡的代价矩阵会违反分类损失差异的正态性假设。

算法

如果指定要进行10×10重复交叉验证t测试使用“测试”、“10 x10t,然后testckfold使用10个自由度的t分布,能够找到的关键区域,并估计p-值。有关更多细节,请参见[2][3]

选择

使用testcholdout:

  • 对于样本容量较大的测试集

  • 实现不同的McNemar测试,比较两种分类模型的精度

  • 对于使用卡方或似然比检验成本敏感的测试。卡方检验用途quadprog,这需要一个优化工具箱™许可证。

参考

[1] Alpaydin,E.“组合的5×2 CV F测试,用于比较监督分类学习算法”。神经计算卷。11,第8期,1999,第1885至1992年。

bouckaer [2]。在基于校准测试的两种学习算法中进行选择。国际机器学习会议, 2003,第51-58页。

[3] Bouckaert,R.,和E.弗兰克。“评估显着性检验的学习算法相比的可复制性。”在知识发现和数据挖掘,8日太平洋亚洲会议进展,2004年,第3-12。

[4] Dietterich,T.“近似的统计测试,用于比较监督分类学习算法”。神经计算《中华人民共和国宪法》,1998年第10卷第7期,1895-1923页。

[5] Hastie的,T.,R. Tibshirani,和J.弗里德曼。统计学习的要素,第2版。纽约:施普林格,2008年。

扩展功能

介绍了在R2015a