我有一个包含学生信息的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中都能很好地处理分类变量,所以使用我的表和它的分类变量应该没有问题。
但是,当我想使用
cvpartition
和
crossvalind
进行10倍交叉验证。当我尝试创建折叠索引时,会出现以下错误:
不支持使用StSLab.Intual.GrpIdx使用线性索引(一个下标)或多维索引(三个或更多下标)订阅表的错误。使用行下标和变量下标
.
我的目标是执行以下操作:
% 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')
有人能接受这个吗?我知道我可以把分类变量改成数值变量,但我不愿意。这附近有吗?谢谢您。