主要内容

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(成人数据,“工资”
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(成人数据,“工资”“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 = templateTree;

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

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

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

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

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

加载费雪的虹膜数据集。创建一个成本矩阵,将错误分类为setosa虹膜的惩罚是将virvirica虹膜错误分类为versiccolor的两倍。

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

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

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

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

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

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

rng (1);%用于再现性[h,p,e1,e2] = testckfold(C1,C2,meas,meas,物种,...“替代”“更大的”“测试”“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对应于运行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);bar(predImp) h = gca;h.XTick = 1:2:h.XLim(2);标题(“预测重要性”)包含(“预测”) ylabel (的重要措施

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

[~,idxSort] = sort(predim,“下”);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
高斯核分类与支持向量机(SVM)或逻辑回归学习器金宝app templateKernel
k神经网络 templateKNN
线性分类支持向量机或逻辑回归学习器 templateLinear
朴素贝叶斯 templateNaiveBayes
支持向量机 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
高斯核分类与支持向量机(SVM)或逻辑回归学习器金宝app templateKernel
k神经网络 templateKNN
线性分类支持向量机或逻辑回归学习器 templateLinear
朴素贝叶斯 templateNaiveBayes
支持向量机 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。标签必须是等价的。

  • 对于所有其他受支持的数据类型金宝app,Y是真实类标签的数组。

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

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

  • 如果这两种说法都是正确的,那么你可以省略供应Y

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

    • C1而且C2完整的分类模型是否包含ResponseName中指定响应变量名称的X1而且X2

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

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

名称-值参数

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

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

例子:“替代”、“大”、“测试”,“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应用于X1更准确C2应用于X2 “5 x2t”而且“10 x10t”
“少” 预测Y的一组预测C1应用于X1不如准确C2应用于X2 “5 x2t”而且“10 x10t”

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

例子:“替代”、“大”

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

  • 具有from下标的数值向量1通过p,在那里p列数是X1

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

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

默认为[],这表明数据不包含分类预测因子。

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

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

例子:“X1CategoricalPredictors”、“所有”

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

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

  • 具有from下标的数值向量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,Cost(i,j) = 0如果I = j

例子:'Cost',[0 12 2;1 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; 100])和高度离散的响应分布(即大多数观测值分布在少数类中)可能违反渐近正态性假设。对于成本敏感的测试,使用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褶皱.每次运行都包含完整但划分的数据集。

  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 × 2的相当t测试,但比较保守[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 x 2 CV F检验”。神经计算, 1999年第11卷第8期,第1885-1992页。

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

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

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

哈斯蒂、T.、R.蒂布谢拉尼和J.弗里德曼。统计学习的要素,第二版,纽约:施普林格,2008。

扩展功能

版本历史

在R2015a中引入