testckfold
通过重复交叉验证比较两种分类模型的准确性
语法
描述
testckfold
通过对两个分类模型进行反复交叉验证,确定分类损失的差异,然后结合分类损失差异制定检验统计量,对两个分类模型的准确性进行统计评估。当样本量有限时,这种类型的测试尤其适用。
您可以评估分类模型的准确性是否不同,或者一个分类模型是否比另一个分类模型表现更好。可用的测试包括5 × 2配对t测试,一个5乘2的配对F测试,并进行10 × 10重复交叉验证t测试。详情请参见重复交叉验证测试.为了加快计算速度,testckfold
金宝app支持并行计算(需要并行计算工具箱™许可证)。
例子
比较分类树预测选择算法
在每个节点上,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
表示不拒绝两个模型具有相同预测精度的零假设。这个结果有利于更简单的集成。
输入参数
C1
- - - - - -分类模型模板或训练好的分类模型
分类模型模板对象|训练分类模型对象
分类模型模板或训练过的分类模型,指定为这些表中描述的任何分类模型模板对象或训练过的分类模型对象。
模板类型 | 返回的 |
---|---|
分类树 | 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 |
为了提高效率,提供一个分类模型模板对象,而不是一个训练好的分类模型对象。
C2
- - - - - -分类模型模板或训练过的模型
分类模型模板对象|训练分类模型对象
分类模型模板或训练过的分类模型,指定为这些表中描述的任何分类模型模板对象或训练过的分类模型对象。
模板类型 | 返回的 |
---|---|
分类树 | 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 |
为了提高效率,提供一个分类模型模板对象,而不是一个训练好的分类模型对象。
Y
- - - - - -真正的类别标签
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组|特征向量|字符串标量
True类标签,指定为类别、字符或字符串数组、逻辑或数字向量、字符向量的单元格数组或字符向量或字符串标量。
对于字符向量或字符串标量,
X1
而且X2
必须是表,它们的响应变量必须具有相同的名称和值,以及Y
必须是公共变量名。例如,如果X1。标签
而且X2。标签
那么是响应变量吗Y
是“标签”
而且X1。标签
而且X2。标签
必须是等价的。对于所有其他受支持的数据类型金宝app,
Y
是真实类标签的数组。如果
Y
是字符数组,则每个元素必须对应数组中的一行。X1
,X2
,Y
必须有相同数量的观察(行)。
如果这两种说法都是正确的,那么你可以省略供应
Y
.因此,
testckfold
使用表中的常见响应变量。例如,如果表中的响应变量为X1。标签
而且X2。标签
的值C1。Re年代ponseName
而且C2。Re年代ponseName
是“标签”
,那么你就不必供应了Y
.
数据类型:分类
|字符
|字符串
|逻辑
|单
|双
|细胞
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:“替代”、“大”、“测试”,“10 x10t”、“选项”,statsset (UseParallel,真的)
指定测试第一个预测类别标签的第一组是否比第二组更准确,进行10 × 10 t检验,并使用并行计算进行交叉验证。
α
- - - - - -假设检验显著性水平
0.05
(默认)|区间(0,1)中的标量值
假设检验显著性水平,由逗号分隔的对组成“α”
和区间(0,1)中的标量值。
例子:“阿尔法”,0.1
数据类型:单
|双
替代
- - - - - -评估的替代假设
“不平等”
(默认)|“更大的”
|“少”
X1CategoricalPredictors
- - - - - -标识分类预测符的标记
[]
(默认)|逻辑向量|数值向量|“所有”
在第一个测试集预测器数据中标识分类预测器的标记(X1
),指定为逗号分隔的对,由“X1CategoricalPredictors”
和以下其中之一:
具有from下标的数值向量
1
通过p
,在那里p
列数是X1
.长度的逻辑向量
p
,其中真正的
的对应列表示X1
是分类变量。“所有”
这意味着所有的预测因素都是绝对的。
默认为[]
,这表明数据不包含分类预测因子。
对于一个k神经网络分类模型,有效的选项是[]
而且“所有”
.
您必须指定X1CategoricalPredictors
如果X1
是一个矩阵,包括分类预测器。testckfold
不使用CategoricalPredictors
的属性C1
当C1
是经过训练的分类模型。如果C1
用分类预测器训练的模型是指定的吗X1CategoricalPredictors, C1。CategoricalPredictors
.
例子:“X1CategoricalPredictors”、“所有”
数据类型:单
|双
|逻辑
|字符
|字符串
X2CategoricalPredictors
- - - - - -标识分类预测符的标记
[]
(默认)|逻辑向量|数值向量|“所有”
标识第二个测试集预测器数据中的分类预测器(X2
),指定为逗号分隔的对,由“X2CategoricalPredictors”
和以下其中之一:
具有from下标的数值向量
1
通过p
,在那里p
列数是X2
.长度的逻辑向量
p
,其中真正的
的对应列表示X2
是分类变量。“所有”
这意味着所有的预测因素都是绝对的。
默认为[]
,这表明数据不包含分类预测因子。
对于一个k神经网络分类模型,有效的选项是[]
而且“所有”
.
您必须指定X2CategoricalPredictors
如果X2
是一个矩阵,包括分类预测器。testckfold
不使用CategoricalPredictors
的属性C2
当C2
是经过训练的分类模型。如果C2
用分类预测器训练的模型是指定的吗X2CategoricalPredictors, C2。CategoricalPredictors
.
例子:“X2CategoricalPredictors”、“所有”
数据类型:单
|双
|逻辑
|字符
|字符串
一会
- - - - - -类名
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
类名,指定为逗号分隔的对,由“类名”
以及类别、字符或字符串数组、逻辑或数字向量,或字符向量的单元格数组。你必须设置一会
的数据类型Y
.
如果一会
是字符数组,则每个元素必须对应数组中的一行。
使用一会
:
指定与类顺序对应的任何输入参数维度的顺序。例如,使用
一会
指定…尺寸的顺序成本
.选择用于测试的类子集。例如,假设集合中所有不同的类名
Y
是{' a ', ' b ', ' c '}
.利用课堂上的观察来训练和测试模型“一个”
而且“c”
只是,指定“类名”,{' a ', ' c '}
.
中的所有不同类名的默认集合Y
.
例子:“类名”,{' b ', ' g '}
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
|分类
成本
- - - - - -成本分类
方阵|结构数组
分类成本,指定为逗号分隔的对,由“成本”
一个方阵或结构数组。
对于成本敏感的测试,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”
|“指数”
|“枢纽”
|函数处理
损失函数,指定为逗号分隔的对,由“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的所有其他元素p
来0
.年代
是一个n
——- - - - - -K
分类分数的数字矩阵。类中的类顺序对应于列顺序一会
名称-值对参数。年代
是分类分数的矩阵。W
是一个n
-by-1观测权重的数值向量。如果你通过了W
时,软件将求和的权重归一化1
.成本
是一个K
——- - - - - -K
分类费用的数字矩阵。例如,成本=单位(K) -眼(K)
的代价0
为了正确的分类和成本1
误分类。
使用以下命令指定函数
“LossFun”@
.lossfun
选项
- - - - - -并行计算选项
[]
(默认)|返回的结构数组statset
并行计算选项,指定为逗号分隔的对,由“选项”
和返回的结构数组statset
.这些选项需要“并行计算工具箱”。testckfold
使用“流”
,“UseParallel”
,“UseSubtreams”
字段。
下表总结了可用的选项。
选项 | 描述 |
---|---|
“流” |
一个
在这种情况下,使用与并行池大小相同的单元格数组。如果并行池未打开,则软件将尝试打开一个并行池(取决于您的首选项),然后 |
“UseParallel” |
如果您有并行计算工具箱,那么您可以通过设置调用工作池“UseParallel”,真的 . |
“UseSubstreams” |
设置为真正的 属性指定的流进行并行计算“流” .默认是假 .例如,set流 到允许子流的类型,例如“mlfg6331_64” 或“mrg32k3a” . |
例子:“选项”,statset (UseParallel,真的)
数据类型:结构体
之前
- - - - - -先验概率
“经验”
(默认)|“统一”
|数值向量|结构
每个类的先验概率,由逗号分隔的对组成“之前”
而且“经验”
,“统一”
数字向量或结构。
下表总结了设置先验概率的可用选项。
价值 | 描述 |
---|---|
“经验” |
类先验概率是类的相对频率Y . |
“统一” |
所有类先验概率都等于1/K,在那里K是类的数量。 |
数值向量 | 每个元素都是一个类先验概率。属性指定顺序一会 名称-值对参数。软件将元素规范化,使它们的和为1 . |
结构 | 一个结构
|
例子:“之前”,结构(“类名”,{{“setosa”、“癣”}},“ClassProbs”,[1,2])
数据类型:字符
|字符串
|单
|双
|结构体
测试
- - - - - -进行测试
“5 x2f”
(默认)|“5 x2t”
|“10 x10t”
详细的
- - - - - -冗长的水平
0
(默认)|1
|2
详细级别,指定为逗号分隔的对,由“详细”
而且0
,1
,或2
.详细的
控制在每个交叉验证折叠训练期间软件在命令窗口中显示的诊断信息的数量。
下表总结了可用的详细级别选项。
价值 | 描述 |
---|---|
0 |
软件不显示诊断信息。 |
1 |
每次执行新的交叉验证时,软件都会显示诊断消息。 |
2 |
该软件每次执行新的交叉验证运行时,以及每次在特定折叠上训练时,都会显示诊断信息。 |
例子:“详细”,1
数据类型:双
|单
权重
- - - - - -观察权重
(大小(X, 1), 1)
(默认)|数值向量
注:
testckfold
将训练好的分类模型作为模板。因此,忽略了模型中所有拟合参数。也就是说,testckfold
只使用模型和预测器数据中指定的选项进行交叉验证。重复交叉验证检验依赖于原假设下检验统计量渐近正态的假设。高度不平衡的成本矩阵(例如,
成本
=[0 100; 100]
)和高度离散的响应分布(即大多数观测值分布在少数类中)可能违反渐近正态性假设。对于成本敏感的测试,使用testcholdout
.南
年代,<定义>
值、空字符向量(”
),空字符串(""
),< >失踪
值表示缺失的数据值。
输出参数
h
-假设检验结果
1
|0
p
- - - - - -p价值
区间[0,1]中的标量
p-value测试值,作为间隔[0,1]中的标量返回。p
假设原假设为真,随机检验统计量至少与观察到的检验统计量一样极端的概率。
testckfold
估计p
使用测试统计量的分布,它随测试类型的不同而不同。有关测试统计信息的详细信息,请参见重复交叉验证测试.
更多关于
重复交叉验证测试
重复交叉验证测试结合数据反复交叉验证导致的分类损失差异,形成两个分类模型精度比较的检验统计量。当样本量有限时,重复交叉验证测试是有用的。
进行R——- - - - - -K测试:
将预测器数据集和真实类别标签随机分成(按类别分层)K集,R次了。每个部门被称为运行每一组都被称为a褶皱.每次运行都包含完整但划分的数据集。
为运行r= 1到R,重复这些步骤k= 1到K:
储备褶皱k作为测试集,并在剩下的数据集上使用各自的预测器数据集训练两个分类模型K- 1折。
使用训练过的模型和它们各自的折叠来预测类标签k预测器数据集。
将两组估计的标签与真实标签进行比较,估算分类损失。表示 如测试集被折叠时的分类损失k在运行r分类模型c.
计算两种模型分类损失的差值:
在跑步结束的时候,有K每种分类模型的分类损失。
结合第2步的结果。为每一个r= 1到R:
估计差异的倍数内平均值及其平均值:
估计差异的总体平均值:
估计差异的倍内方差:
估计倍内差异的平均值:
估计总体样本方差的差异:
计算测试统计量。此处描述金宝app的所有受支持的测试都假设在H0,估计的差异是独立的,近似正态分布,均值为0,共有标准偏差有限。然而,这些检验违反了独立性假设,因此检验统计量分布是近似的。
与配对测试相比,重复交叉验证测试的优点是结果更可重复[3].缺点是它们需要很高的计算资源。
分类损失
分类损失表明分类模型或一组预测标签的准确性。一般来说,对于一个固定成本矩阵,分类精度随着分类损失的增加而降低。
testckfold
返回分类损失(参见e1
而且e2
)在备择假设(即无限制分类损失)下。在以下定义中:
分类损失主要集中在第一个分类模型上。第二种模型的分类损失相似。
n测验是测试集样本大小。
我(x)为指标函数。如果x这是真的吗我(x) = 1。否则,我(x) = 0。
分类模型1的预测类分配是否用于观察j.
yj观察的真正等级标签是什么j.
提示
比较模型的方法包括:
通过传递同一组预测器数据,比较简单分类模型和更复杂模型的准确性。
比较使用两组不同预测因子的两个不同模型的准确性。
执行各种类型的特征选择.例如,您可以将使用一组预测器训练的模型的准确性与使用子集或不同预测器集训练的模型的准确性进行比较。您可以任意选择预测器集,或使用特征选择技术,如PCA或顺序特征选择(参见
主成分分析
而且sequentialfs
).
如果这两种说法都是正确的,那么你可以省略供应
Y
.因此,
testckfold
使用表中的常见响应变量。执行成本不敏感特征选择的一种方法是:
创建一个描述第一个分类模型的分类模型模板(
C1
).创建描述第二个分类模型的分类模型模板(
C2
).指定两个预测器数据集。例如,指定
X1
作为完整的预测集和X2
作为一个约简集。输入
testckfold (C1, C2, X1, X2, Y,“另类”、“少”)
.如果testckfold
返回1
,则有足够的证据表明,使用较少预测因子的分类模型比使用完整预测因子集的模型表现更好。
或者,您可以评估两个模型的准确性之间是否存在显著差异。要执行此评估,请删除
“替代”、“少”
第4步中的规范。testckfold
进行双面测试,和H = 0
表明没有足够的证据表明两个模型的准确性存在差异。该试验适用于误分类率分类损失,但可以指定其他损失函数(参见
LossFun
).关键假设是,在双侧零假设下,估计的分类损失是独立的,正态分布,均值为0,公共方差有限。除误分类率外的分类损失可能违反这一假设。高度离散的数据、不平衡的类和高度不平衡的成本矩阵可能违反分类损失差异的正态假设。
选择
使用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。
扩展功能
自动平行支撑金宝app
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要并行运行,请指定“选项”
参数中的名称-值,并将“UseParallel”
字段的选项结构为真正的
使用statset
.
例如:“选项”,statset (UseParallel,真的)
有关并行计算的更多信息,请参见运行MATLAB函数与自动并行支持金宝app(并行计算工具箱).
版本历史
在R2015a中引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。