У меня есть таблица 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-кратной перекрестной проверки. Когда я пытаюсь создать индексы своих сгибов, я получаю следующую ошибку: Ошибка при использовании 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')
Кто-нибудь может принять это, пожалуйста? Я знаю, что могу изменить категориальные переменные на числовые, но я бы не стал. Есть ли что-нибудь вокруг этого? Спасибо.