主要内容

testckfold

通过重复交叉验证比较两种分类模型的准确性

描述

testckfold通过对两种分类模型的重复交叉验证,确定分类损失的差异,结合分类损失的差异制定检验统计量,统计评估两种分类模型的准确性。当样本量有限时,这种类型的检验尤其适用。

您可以评估分类模型的准确性是否不同,或者一个分类模型是否比另一个更好。可用的测试包括5 × 2配对测试t测试,一个5乘2的配对F测试,并进行10乘10的重复交叉验证t测试。有关更多细节,请参见重复交叉验证测试.为了加快计算速度,testckfold金宝app支持并行计算(需要并行计算工具箱™许可证)。

例子

h= testckfold (C1C2X1X2返回执行5 × 2配对结果的测试决策F交叉验证测试。零假设是分类模型C1而且C2使用表中的预测器和响应数据预测真正的类别标签是否具有同等的准确性X1而且X2h1表示在5%显著性水平上拒绝原假设。

testckfold通过应用进行交叉验证测试C1而且C2中的所有预测变量X1而且X2,分别。真正的阶级标签在里面X1而且X2一定是一样的。中的响应变量名称X1X2C1。Re年代ponseName,C2。Re年代ponseName一定是一样的。

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

例子

h= testckfold (C1C2X1X2Y应用完整的分类模型或分类模板C1而且C2对数据表或矩阵中的所有预测变量X1而且X2,分别。Y是与真实类标签或真实类标签数组对应的表变量名。

例子

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

例子

hpe1e2= testckfold(___也返回p假设检验的-值(p)及各自的分类损失对于每次交叉验证运行和折叠(e1而且e2).

例子

全部折叠

在每个节点上,fitctree默认情况下使用穷尽搜索选择要拆分的最佳预测器。或者,您可以选择通过进行曲率测试来分割显示出与响应相关性证据最多的预测器。此示例在统计上比较了通过穷尽搜索最佳分割生长的分类树和通过进行交互曲率测试生长的分类树。

加载census1994数据集。

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

使用训练集生长一个默认分类树,adultdata,这是一个表格。响应变量的名称是“工资”

C1 = fitctree(adultdata,“工资”
C1 = ClassificationTree PredictorNames: {1x14 cell} ResponseName: 'salary' CategoricalPredictors: [2 4 6 7 8 9 10 14] ClassNames: [<=50K >50K] ScoreTransform: 'none' NumObservations: 32561 Properties, Methods

C1是一个完整的ClassificationTree模型。它的ResponseName属性是“工资”C1使用穷尽搜索,根据最大拆分增益找到拆分的最佳预测器。

使用相同的数据集生长另一个分类树,但指定找到最好的预测器,使用具有交互作用的曲率测试进行拆分。

C2 = fitctree(adultdata,“工资”“PredictorSelection”“interaction-curvature”
C2 = ClassificationTree PredictorNames: {1x14 cell} ResponseName: 'salary' CategoricalPredictors: [2 4 6 7 8 9 10 14] ClassNames: [<=50K >50K] ScoreTransform: 'none' NumObservations: 32561 Properties, Methods

C2也是一个完整的ClassificationTree模型与ResponseName等于“工资”

进行5 × 2配对F利用训练集测试比较两种模型的准确性。因为数据集中的响应变量名和ResponseName属性均相等,且两个集合中的响应数据相等,则可以省略提供响应数据。

h = testckfold(C1,C2,adultdata,adultdata)
h =逻辑0

H = 0表示不拒绝零假设C1而且C2在5%的水平有相同的准确性。

使用5 × 2配对,对两个模型的误分类率进行统计检验F测试。

载入费雪的虹膜数据集。

负载fisheriris

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

C1 = templateNaiveBayes;C2 =模板树;

C1而且C2分别为朴素贝叶斯算法和分类树算法对应的模板对象。

测试两个模型是否具有相同的预测精度。对每个模型使用相同的预测器数据。testckfold引导一个5 × 2,双面,成对F默认为测试。

rng (1);%用于重现性h = testckfold(C1,C2,meas,meas,species)
h =逻辑0

H = 0表示不拒绝零假设,即两个模型具有相等的预测精度。

使用10 × 10重复交叉验证进行统计检验,以评估一个更简单的模型是否比一个更复杂的模型具有更好的准确性t测试。

载入费雪的虹膜数据集。创建一个成本矩阵,对错误分类的鸢尾花的惩罚是将处女鸢尾错误分类为彩色鸢尾花的两倍。

负载fisheriris;汇总(物种)
值计数百分比setosa 50 33.33% versicolol50 33.33% virginica 50 33.33%
成本= [0 2 2;2 0 1;2 1 0];ClassNames = {“setosa”“多色的”“virginica”};...%指定开销中行和列的顺序

类别的经验分布是均匀的,分类成本略有不平衡。

创建两个ECOC模板:一个使用线性SVM二元学习器,另一个使用配备RBF内核的SVM二元学习器。

tSVMLinear = templateSVM(“标准化”,真正的);默认为线性支持向量机tSVMRBF = templateSVM(“KernelFunction”“RBF”“标准化”,真正的);C1 = templateECOC(“学习者”, tSVMLinear);C2 = templateECOC(“学习者”, tSVMRBF);

C1而且C2是ECOC模板对象。C1为线性支持向量机准备。C2对支持向量机进行RBF核训练。

测试零假设,更简单的模型(C1)最多与更复杂的模型(C2)的分类成本。进行10 × 10重复交叉验证测试。请求返回p-值和错误分类成本。

rng (1);%用于重现性[h,p,e1,e2] = testckfold(C1,C2,meas,meas,species,...“替代”“更大的”“测试”“10 x10t”“成本”、成本、...“类名”类名)
h =逻辑0
P = 0.1077
e1 =10×100 0 0 0 0 0.0667 0.1333 0.0667 0.0667 0.1333 0.0667 - 0.0667 0 0 0 0 0 0 0 0 0 0 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0 0 0 0 0 0 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.1333 0 0 0 0 0 0 0 0 0 0 0 0 0.0667 0 0 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0.1333 0.0667 - 0.0667 0.0667 - 0.0667 0 0 0 0 0 0 0 0 0 0 0 0.0667 0.0667 0.1333 0.0667 0.0667 0.0667 0.0667 0.0667 0.0667 0 0 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-value值略大于0.10,这表明在保留零假设的情况下,更简单的模型最多与更复杂的模型一样准确。该结果与任何显著性水平(α),最多为0.10。

e1而且e2是包含错误分类代价的10乘10矩阵。行r对应于runr重复交叉验证。列k对应于测试集折叠k在特定的交叉验证运行中。的元素(2,4)e2是0.1333。这个值意味着在交叉验证运行2中,当测试集为fold 4时,估计的测试集错误分类代价为0.1333。

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

加载电离层数据集。

负载电离层

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

t = templateTree(“MaxNumSplits”1);弱学习者模板树对象C = fitcensemble(X,Y,“方法”“AdaBoostM1”“学习者”t);predImp = predictorImportance(C);bar(predImp) h = gca;h.XTick = 1:2:h.XLim(2);标题(“预测重要性”)包含(“预测”) ylabel (的重要措施

根据它们的重要性确定前五个预测因素。

[~,idxSort] = sort(predImp,“下”);idx5 = idxSort(1:5);

测试两个模型是否具有相同的预测精度。先指定缩减后的数据集,再指定完整的预测器数据。使用并行计算加快计算速度。

s = RandStream(“mlfg6331_64”);选项= statset(“UseParallel”,真的,“流”年代,“UseSubstreams”,真正的);[h,p,e1,e2] = testckfold(C,C,X(:,idx5),X,Y,“选项”选项)
使用“本地”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:6)。
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
k神经网络 templateKNN
朴素贝叶斯 templateNaiveBayes
金宝app支持向量机(SVM) templateSVM
训练模型类型 模型对象 返回的
分类树 ClassificationTree fitctree
判别分析 ClassificationDiscriminant fitcdiscr
袋装分类模型的集成 ClassificationBaggedEnsemble fitcensemble
分类模型集合 ClassificationEnsemble fitcensemble
ECOC模型 ClassificationECOC fitcecoc
广义相加模型(GAM) ClassificationGAM fitcgam
k神经网络 ClassificationKNN fitcknn
朴素贝叶斯 ClassificationNaiveBayes fitcnb
神经网络 ClassificationNeuralNetwork(观察结果按行排列) fitcnet
支持向量机 ClassificationSVM fitcsvm

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

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

模板类型 返回的
分类树 templateTree
判别分析 templateDiscriminant
集合(增强、套袋和随机子空间) templateEnsemble
纠错输出码(ECOC),多类分类模型 templateECOC
k神经网络 templateKNN
朴素贝叶斯 templateNaiveBayes
金宝app支持向量机(SVM) templateSVM
训练模型类型 模型对象 返回的
分类树 ClassificationTree fitctree
判别分析 ClassificationDiscriminant fitcdiscr
袋装分类模型的集成 ClassificationBaggedEnsemble fitcensemble
分类模型集合 ClassificationEnsemble fitcensemble
ECOC模型 ClassificationECOC fitcecoc
广义相加模型(GAM) ClassificationGAM fitcgam
k神经网络 ClassificationKNN fitcknn
朴素贝叶斯 ClassificationNaiveBayes fitcnb
神经网络 ClassificationNeuralNetwork(观察结果按行排列) fitcnet
支持向量机 ClassificationSVM fitcsvm

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

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

每一行X1对应一个观察结果,每一列对应一个变量。testckfold除了字符向量的单元金宝app格数组外,不支持多列变量和单元格数组。

X1而且X2必须具有相同的数据类型,并且X1X2Y必须有相同的观察次数。

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

数据类型:||表格

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

每一行X2对应一个观察结果,每一列对应一个变量。testckfold除了字符向量的单元金宝app格数组外,不支持多列变量和单元格数组。

X1而且X2必须具有相同的数据类型,并且X1X2Y必须有相同的观察次数。

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

数据类型:||表格

True类标签,指定为类别、字符或字符串数组、逻辑或数字向量、字符向量的单元格数组或字符向量或字符串标量。

  • 对于字符向量或字符串标量,X1而且X2必须是表,它们的响应变量必须具有相同的名称和值,并且Y必须是公共变量名。例如,如果X1。标签而且X2。标签那么是响应变量吗Y“标签”而且X1。标签而且X2。标签必须是等价的。

  • 对于所有其他支持的数据类型,金宝appY是一个真正的类标签数组。

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

    • X1X2Y必须有相同数量的观察(行)。

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

    • X1而且X2是包含相同响应变量(值和名称)的表。

    • C1而且C2完整的分类模型包含哪些内容ResponseName中的响应变量名X1而且X2

    因此,testckfold使用表中的公共响应变量。例如,如果表中的响应变量为X1。标签而且X2。标签的值C1。Re年代ponseName而且C2。Re年代ponseName“标签”,那么你就不必供应了Y

数据类型:分类|字符|字符串|逻辑|||细胞

名称-值参数

指定逗号分隔的可选对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

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

假设检验显著性水平,指定为逗号分隔对组成“α”和区间(0,1)中的一个标量值。

例子:“阿尔法”,0.1

数据类型:|

要评估的备选假设,指定为逗号分隔的对,由“替代”和表中列出的值之一。

价值 备择假设描述 金宝app支持测试
“不平等”(默认) 预测Y的一组预测C1应用于X1而且C2应用于X2有不相等的准确性。 “5 x2f”“5 x2t”,“10 x10t”
“更大的” 预测Y的一组预测C1应用于X1C2应用于X2 “5 x2t”而且“10 x10t”
“少” 预测Y的一组预测C1应用于X1没有那么准确C2应用于X2 “5 x2t”而且“10 x10t”

有关支持的测试的详细信息,请参金宝app见测试

例子:“替代”、“大”

在第一个测试集预测器数据中标识类别预测器的标记(X1),指定为逗号分隔的对,由“X1CategoricalPredictors”和以下其中之一:

  • 具有索引的数字向量1通过p,在那里p列数是X1

  • 长度的逻辑向量p,其中真正的的对应列表示X1是一个类别变量。

  • “所有”这意味着所有的预测因素都是绝对的。

默认为[],这表明数据不包含类别预测器。

对于一个k神经网络分类模型,有效选项有[]而且“所有”

您必须指定X1CategoricalPredictors如果X1是一个矩阵,它包含范畴预测器。testckfold不使用CategoricalPredictors的属性C1C1是经过训练的分类模型。如果C1用分类预测器训练的模型是指定的吗X1CategoricalPredictors, C1。CategoricalPredictors

例子:“X1CategoricalPredictors”、“所有”

数据类型:||逻辑|字符|字符串

在第二个测试集预测器数据中标识类别预测器的标记(X2),指定为逗号分隔的对,由“X2CategoricalPredictors”和以下其中之一:

  • 具有索引的数字向量1通过p,在那里p列数是X2

  • 长度的逻辑向量p,其中真正的的对应列表示X2是一个类别变量。

  • “所有”这意味着所有的预测因素都是绝对的。

默认为[],这表明数据不包含类别预测器。

对于一个k神经网络分类模型,有效选项有[]而且“所有”

您必须指定X2CategoricalPredictors如果X2是一个矩阵,它包含范畴预测器。testckfold不使用CategoricalPredictors的属性C2C2是经过训练的分类模型。如果C2用分类预测器训练的模型是指定的吗X2CategoricalPredictors, C2。CategoricalPredictors

例子:“X2CategoricalPredictors”、“所有”

数据类型:||逻辑|字符|字符串

类名,指定为逗号分隔的对,由“类名”以及类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。你必须设置一会的数据类型Y

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

使用一会:

  • 指定与类顺序对应的任何输入参数维度的顺序。例如,使用一会指定…尺寸的顺序成本

  • 选择类的一个子集进行测试。例如,假设所有不同的类名的集合Y{' a ', ' b ', ' c '}.训练和测试模型使用观察班级“一个”而且“c”只是,指定“类名”,{' a ', ' c '}

中的所有不同的类名的集合Y

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

数据类型:||逻辑|字符|字符串|细胞|分类

分类开销,指定为逗号分隔的对,由“成本”和一个方阵或结构数组。

  • 如果你指定了方阵成本,然后成本(i, j)将一个点分类到类的成本是多少j如果它真正的阶级是.也就是说,行对应真正的类,列对应预测的类。的相应行和列的类顺序成本,另外指定一会名称-值对参数。

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

    • S.ClassNames,其中将类名作为数据类型与Y.您可以使用此字段指定类的顺序。

    • S.ClassificationCosts,其中包含成本矩阵,行和列的顺序为S.ClassNames

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

提供用于训练分类模型的相同成本矩阵是一种最佳实践。

默认为成本(i,j) = 1如果I ~= j,成本(i,j) = 0如果I = j

例子:'Cost',[0 1 2;10 0 2;2 2 0]

数据类型:||结构体

损失函数,指定为逗号分隔的对,由“LossFun”而且“classiferror”“binodeviance”“指数”“枢纽”,或函数句柄。

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

    价值 损失函数
    “binodeviance” 二项异常
    “classiferror” 分类错误
    “指数” 指数损失
    “枢纽” 铰链的损失

  • 使用函数句柄表示法指定自己的函数。

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

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

    • lossfun是函数的名称。

    • C是一个n——- - - - - -K逻辑矩阵,用行表示对应的观察结果属于哪一类。中的类顺序对应一会名称-值对参数。

      构造C通过设置C(p,q) = 1如果观察p在课堂上,为每一行。设置row的所有其他元素p0

    • 年代是一个n——- - - - - -K分类分数的数字矩阵。中的类顺序对应一会名称-值对参数。年代是分类分数的矩阵。

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

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

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

并行计算选项,指定为逗号分隔的对,由“选项”和返回的结构数组statset.这些选项需要“并行计算工具箱”。testckfold使用“流”“UseParallel”,“UseSubtreams”字段。

下表总结了可用的选项。

选项 描述
“流”

一个RandStream对象或此类对象的单元格数组。如果不指定,软件使用默认流或流。如果你指定,除非下列情况为真,否则使用单个对象:

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

  • UseParallel真正的

  • UseSubstreams

在这种情况下,使用与并行池相同大小的单元格数组。如果一个并行池没有打开,那么软件会尝试打开一个并行池(取决于您的首选项),然后必须提供单个随机数流。

“UseParallel” 如果您有“并行计算工具箱”,那么您可以通过设置来调用工作人员池“UseParallel”,真的
“UseSubstreams” 设置为真正的通过指定的流进行并行计算“流”.默认是.例如,set到允许子流的类型,例如“mlfg6331_64”“mrg32k3a”

例子:“选项”,statset (UseParallel,真的)

数据类型:结构体

每个类的先验概率,指定为逗号分隔的对,由“之前”而且“经验”“统一”数字向量或结构。

下表总结了设置先验概率的可用选项。

价值 描述
“经验” 类的先验概率是类的相对频率Y
“统一” 所有类的先验概率都等于1/K,在那里K是类的数量。
数值向量 每个元素都是一个类先验概率。方法指定顺序一会名称-值对参数。该软件将元素规范化,使它们的和为1
结构

一个结构年代有两个字段:

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

  • S.ClassProbs包含相应先验概率的向量。该软件将元素规范化,使它们的和为1

例子:“之前”,结构(“类名”,{{“setosa”、“癣”}},“ClassProbs”,[1,2])

数据类型:字符|字符串|||结构体

测试,指定为逗号分隔的对,由“测试”其中一个是:“5 x2f”“5 x2t”“10 x10t”

价值 描述 金宝app支持的备择假设
“5 x2f”(默认) 5×2配对F测试。只适用于双面测试。 “不平等”
“5 x2t” 5×2配对t测验 “不平等”“少”“更大的”
“10 x10t” 10 × 10重复交叉验证t测验 “不平等”“少”“更大的”

有关可用测试的详细信息,请参见重复交叉验证测试.有关支持的备选假设的详细信息,金宝app请参见替代

例子:“测试”、“10 x10t

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

此表总结了可用的冗长级别选项。

价值 描述
0 软件不显示诊断信息。
1 软件每次执行新的交叉验证运行时都会显示诊断消息。
2 该软件每次执行新的交叉验证运行时,以及每次在特定折叠上进行训练时,都会显示诊断信息。

例子:“详细”,1

数据类型:|

观察权值,用逗号分隔的对表示“重量”一个数字向量。

的大小权重必须等于的行数X1.软件对每一行的观察结果进行加权X对应的权重权重

软件规范化权重加起来等于各自类的先验概率的值。

数据类型:|

注:

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

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

  • 年代,<定义>值,空字符向量(),空字符串(""),< >失踪值表示丢失的数据值。

输出参数

全部折叠

假设检验结果,作为逻辑值返回。

H = 1表示拒绝原假设α显著性水平。

H = 0表示未能拒绝零假设α显著性水平。

数据类型:逻辑

p-value,作为间隔[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运行每一组都叫做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

    计算测试统计数据。这里描述金宝app的所有受支持的测试都假设,在H0,估计的差异是独立的和近似正态分布的,平均值为0和一个有限的共同标准差。然而,这些检验违反了独立性假设,因此检验统计量分布是近似的。

    • R= 2时,该测试为配对测试。受支持的两个测试金宝app是成对的t而且F测试。

      • 配对的测试统计信息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分布与RK而且R自由度。

        一对5乘2的FTest的性能堪比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返回分类损失(参见e1而且e2)在备择假设(即不受限制的分类损失)下。在下面的定义中:

  • 分类损失主要集中在第一种分类模型上。第二种模型的分类损失类似。

  • 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 + 经验值 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 经验值 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 取与二项偏差公式相同的形式。

    铰链损失是对错误分类的观察的线性惩罚,与用于优化的支持向量机目标函数有关。有关铰链丢失的详细信息,请参见[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).

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

    • X1而且X2包含响应变量并使用相同响应变量名的表。

    • C1而且C2完整的分类模型是否包含相等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检验>。神经计算1999年第11卷第8期,第1885-1992页。

bouckaer[2]。R.《在基于校准测试的两种学习算法之间的选择》。机器学习国际会议, 2003,第51-58页。

[3]布克尔特和e弗兰克。评估比较学习算法的显著性检验的可复制性。知识发现与数据挖掘研究进展,第八届亚太会议, 2004, pp. 3-12。

[4] Dietterich, T. <比较监督分类学习算法的近似统计检验>。神经计算, 1998年第10卷第7期,1895-1923页。

[5]哈斯蒂,T., R.蒂布希拉尼,J.弗里德曼。统计学习的要素纽约:施普林格,2008。

扩展功能

在R2015a中介绍