K-кратная перекрестная проверка на столе в Matlab - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть таблица 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')

Кто-нибудь может принять это, пожалуйста? Я знаю, что могу изменить категориальные переменные на числовые, но я бы не стал. Есть ли что-нибудь вокруг этого? Спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Я думаю, что ваша главная проблема в том, что ваш набор данных слишком мал. У вас n = 5, что недостаточно даже для создания неподтвержденной модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...