Classification Matlab';s crossval方法是否考虑类频率?

Classification Matlab';s crossval方法是否考虑类频率?,classification,cross-validation,svm,matlab,Classification,Cross Validation,Svm,Matlab,在(二进制)分类上下文中,Matlab的crossval方法是否考虑类频率 Matlab中的大多数分类模型都提供了计算。例如,当通过SVM=fitcsvm(X,y)训练线性SVM时,可以通过调用cv=crossval(svm)来计算交叉验证模型。(此处为该方法的文档。)该交叉验证模型可用于估计训练过程的泛化误差 现在我的问题是:在划分训练数据时,crossval是否考虑了课堂频率?例如,类0的观测值$X_0$可能是类1的观测值$X_1$的5倍。那么,数据的分区版本对每个类的观测值比率大致相同吗(

在(二进制)分类上下文中,Matlab的
crossval
方法是否考虑类频率

Matlab中的大多数分类模型都提供了计算。例如,当通过
SVM=fitcsvm(X,y)训练线性SVM时
,可以通过调用
cv=crossval(svm)来计算交叉验证模型。(此处为该方法的文档。)该交叉验证模型可用于估计训练过程的泛化误差

现在我的问题是:在划分训练数据时,
crossval
是否考虑了课堂频率?例如,类0的观测值$X_0$可能是类1的观测值$X_1$的5倍。那么,数据的分区版本对每个类的观测值比率大致相同吗(在我的示例中为5:1)?或者完全忽略了这一点,因为如果数据集足够大,分区很可能具有大致相同的相对类大小

在处理Matlab的
crossval
特性之前,我使用了自己的分区算法,在分割数据时,该算法考虑了相对类大小。本质上,该算法将随机抽取类别0的5个项目,如果类别频率为5/6和1/6,则抽取类别1的1个项目,直到分区已满

如果忽略相对类大小,我会说对于非常不平衡和/或小的数据集,这可能会有问题。还是我弄错了?很高兴看到你对这件事的看法

如果忽略相对类大小,我会说这是可以忽略的 对于非常不平衡和/或小的数据集,这是有问题的

是的,它可能会成为问题,您可能遇到的一种情况是,在交叉验证的一次过程中根本不会遇到特定少数类的实例。由于您处理的是二进制分类,我认为这不再是一个问题,但取决于类不平衡的程度,一个人仍可能在一个方面运气不佳。
但是请注意,如果你处理不平衡的数据,你可能会把这个问题读一读,例如考虑你的评估方法中的类不平衡。 关于您的第一个问题

您所描述的“尊重课堂频率”通常是通过分层抽样实现的。在描述Matlabs
crossval
的情况下,函数不会自动使用分层分区作为交叉验证的一部分。但是,它们在示例2中提供了一个示例:

load('fisheriris');
y = species;
X = meas;
cp = cvpartition(y,'k',10); % Stratified cross-validation

classf = @(XTRAIN, ytrain,XTEST)(classify(XTEST,XTRAIN,...
ytrain));



cvMCR = crossval('mcr',X,y,'predfun',classf,'partition',cp)
cvMCR =
    0.0200
这里您看到的是,他们通过
cvpartition
类基于变量
y
为数据创建“分区方案”。在这种情况下,分区将创建10个分区,并尝试在所有这些分区中保持不同
y
值的比率大致相等

您也应该看看的文档,因为它们描述了当前的语法,自上一个示例创建以来,语法显然发生了变化。根据当前值,k=10时应为以下值

c=cvpartition(y,'KFold',10)


我希望这回答了你的问题。如果我遗漏了什么,请告诉我。

这正好回答了我的问题。非常感谢。如果我有足够的重复,我甚至会投票:)我不知道
cvpartition
支持这种分层交叉验证,并且可以使用
'mcr'
模式
crossval
来“注入”分区方案。