Давайте поработаем над примером 2 из CROSSVAL документации.
load('fisheriris');
y = species;
X = meas;
Здесь мы загрузили данные из примера mat-файла и присвоили переменные X
и y
. meas
amtrix содержит различные измерения цветов ириса, а species
- это классы дерева ириса, что мы пытаемся предсказать с помощью данных.
Перекрестная проверка используется для многократного обучения классификатора для одного и того же набора данных. В основном на каждой итерации вы разделяете набор данных на данные обучения и тестирования. Соотношение определяется в k-кратном размере. Например, если k
равно 10, 90% данных будут использоваться для обучения, а остальные 10% - для тестирования, и у вас будет 10 итераций. Это делается с помощью функции CVPARTITION .
cp = cvpartition(y,'k',10); % Stratified cross-validation
Вы можете исследовать cp
объект, если вы наберете cp.
и нажмете Tab . Вы увидите разные свойства и методы. Например, find(cp.test(1))
покажет индексы набора тестов для 1-й итерации.
Следующий шаг - подготовка функции прогнозирования. Это, вероятно, где у вас была главная проблема. Этот оператор создает дескриптор функции, используя анонимную функцию. @(XTRAIN, ytrain,XTEST)
часть объявляет, что эта функция имеет 3 входных аргумента. Следующая часть (classify(XTEST,XTRAIN,ytrain))
определяет функцию, которая получает обучающие данные XTRAIN
с известными ytrain
классами и предсказывает классы для XTEST
данных сгенерированной моделью. (Эти данные взяты из cp
, помните?)
classf = @(XTRAIN, ytrain,XTEST)(classify(XTEST,XTRAIN,ytrain));
Затем мы запускаем функцию CROSSVAL для оценки скорости ошибочной классификации (mcr), передавая полный набор данных, дескриптор функции прогнозирования и объект разделения cp
.
cvMCR = crossval('mcr',X,y,'predfun',classf,'partition',cp)
cvMCR =
0.0200
Еще есть вопросы?