В чем разница между cvpartition и crossvalind - PullRequest
0 голосов
/ 07 июня 2018
load fisheriris;
y = species; %label
X = meas;

%Create a random partition for a stratified 10-fold cross-validation.

c = cvpartition(y,'KFold',10);
%  split training/testing sets
[trainIdx testIdx] = crossvalind('HoldOut', y, 0.6);

crossvalind используется для перекрестной проверки путем случайного разбиения всего набора функций X на данные обучения и тестирования путем возврата индексов.Используя индексы, мы можем создать данные поезда и испытания как X(trainIdx,:) и X(testIdx,:) соответственно.cvpartition также разбивает данные, используя такие методы, как стратифицированные и не стратифицированные, но не возвращает индексы.Я не видел примеров, когда crossvalind является стратифицированной или не стратифицированной техникой.

Вопрос: Можно ли использовать crossvalind и cvpartition вместе?

Я хочу провести многоуровневую перекрестную проверку.Но я не понимаю, как разделить наборы данных на обучающие, тестировать и получать индексы.

1 Ответ

0 голосов
/ 08 июня 2018

Перекрестная проверка и разделение на поезда / тесты - это два разных способа оценки производительности модели , а не разные способы построения самой модели.Обычно вы должны построить модель, используя все имеющиеся у вас данные, но также использовать один из этих методов (который строит и оценивает одну или несколько дополнительных моделей, используя подмножества этих данных), чтобы оценить, насколько хорошей будет основная модель.

Перекрестная проверка усредняет результаты нескольких разделений поезда / теста, поэтому обычно ожидается, что она даст более реалистичную, то есть более пессимистичную оценку производительности модели.

Из двух упомянутых вами функций crossvalind, кажется, специфичен для Инструментария Биоинформатики и довольно стар.Справка для cvpartition дает пример того, как выполнить многоуровневую перекрестную проверку:

Примеры

Использовать 10многократная стратифицированная перекрестная проверка для вычисления ошибки ошибочной классификации для классификации по данным радужной оболочки.

load('fisheriris');
CVO = cvpartition(species,'k',10);
err = zeros(CVO.NumTestSets,1);
for i = 1:CVO.NumTestSets
    trIdx = CVO.training(i);
    teIdx = CVO.test(i);
    ytest = classify(meas(teIdx,:),meas(trIdx,:),...
       species(trIdx,:));
    err(i) = sum(~strcmp(ytest,species(teIdx)));
end
cvErr = sum(err)/sum(CVO.TestSize);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...