Matlab中表格上的K折交叉验证

Posted

技术标签:

【中文标题】Matlab中表格上的K折交叉验证【英文标题】:K-fold Cross-Validation on table in Matlab 【发布时间】:2019-04-11 05:20:04 【问题描述】:

我有一个包含学生信息(数字和分类)的 Matlab 表。这里给出了一个示例:

School = 'GB'; 'UR'; 'GB'; 'GB'; 'UR';
School = categorical(School);
Age = [14;14;12;16;19];
Relationship = 'yes'; 'yes'; 'no'; 'no'; 'yes';
Relationship = categorical(Relationship);
Status = 'ft'; 'pt'; 'ft'; 'ft'; 'ft';
Status = categorical(Status);
Father_Job = 'pol'; 'ser'; 'oth'; 'ele'; 'cle';
Father_Job = categorical(Father_Job);
Health = [1;2;3;3;5];
Exam = 'pass'; 'pass'; 'fail'; 'fail'; 'pass';
Exam = categorical(Exam);

T =
School    Age    Relationship    Status    Father_Job    Health    Exam
______    ___    ____________    ______    __________    ______    ____

  GB      14         yes           ft         pol          1       pass
  UR      14         yes           pt         ser          2       pass
  GB      12         no            ft         oth          3       fail
  GB      16         no            ft         ele          3       fail
  UR      19         yes           ft         cle          5       pass

我想使用这些数据来预测和分类考试的通过/失败。我打算使用fitglm 进行逻辑回归,并使用fitcnb 进行朴素贝叶斯分类器。我知道这两种方法都可以很好地处理 Matlab 中的分类变量,所以使用我的表格应该没有问题,它的分类变量。

但是,当我想使用 cvpartitioncrossvalind 执行 10 折交叉验证时,我遇到了问题。当我尝试创建折叠索引时,我收到以下错误:Error using statslib.internal.grp2idx 不支持使用线性索引(一个下标)或多维索引(三个或更多下标)为表下标。使用行下标和变量下标

我的目标是执行以下操作:

% Column 7 (Exam) is the response variable
X = T(:, 1:6);
Y = T(:, 7);

% Create indices of 5-fold cross-validation (here I get errors)
cvpart = cvpartition(Y,'KFold',5);
indices = crossvalind('Kfold',Y,5);

% Create my test and training sets
for i = 1:5
 test = (indices == i); 
 train = ~test;
 Xtrain = X(train,:);
 Xtest = X(test,:);
 Ytrain = Y(train,:);
 Ytest = Y(test,:);
end

% Fit logistic model
mdl = fitglm(Xtrain,Ytrain,'Distribution','binomial')

请问有人对此有意见吗?我知道我可以将分类变量更改为数值变量,但我宁愿不这样做。有没有办法解决?谢谢。

【问题讨论】:

【参考方案1】:

我认为您的主要问题是您的数据集太小了。您有 n = 5,这甚至不足以创建未经验证的模型。

【讨论】:

你好。我在这里发布的数据集只是一个示例,我正在使用的数据集有 600 多行和 33 列。所以这应该不是问题。

以上是关于Matlab中表格上的K折交叉验证的主要内容,如果未能解决你的问题,请参考以下文章

交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么?

在使用 k 折交叉验证训练训练数据后如何测试数据?

k折交叉验证模型选择方法

MATLAB 中神经网络分类的 10 折交叉验证示例

机器学习100天(二十九):029 K折交叉验证

机器学习100天(二十九):029 K折交叉验证