Проблемы, связанные с участками в распознавании образов (Часть 1) - PullRequest
3 голосов
/ 03 апреля 2012

Я не могу следовать функции crossval() & cvpartition(), указанной в документации MATLAB crossval () . Что входит в параметр и как это поможет сравнить производительность и точность различных классификаторов. Буду признателен, если здесь будет предоставлена ​​более простая версия.

1 Ответ

2 голосов
/ 03 апреля 2012

Давайте поработаем над примером 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

Еще есть вопросы?

...