Перекрестная валидация функции с использованием перекрестной проверенной модели ECOC
Обучите многоклассовый классификатор ECOC, а затем перекрестно проверьте модель с помощью пользовательской функции k-fold loss.
Загрузите набор данных радужки Фишера. Задайте данные предиктора X
, данные отклика Y
, и порядок классов в Y
.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
Обучите и перекрестная проверка модели ECOC с помощью машины опорных векторов (SVM) двоичных классификаторов. Стандартизируйте предикторы с помощью шаблона SVM и задайте порядок классов.
t = templateSVM('Standardize',1); CVMdl = fitcecoc(X,Y,'CrossVal','on','Learners',t,... 'ClassNames',classOrder);
CVMdl
является ClassificationPartitionedECOC
модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную валидацию.
Вычислите классификационную ошибку (долю неправильно классифицированных наблюдений) для наблюдений с разбиением на валидации.
L = kfoldLoss(CVMdl)
L = 0.0400
Исследуйте результат, когда стоимость неправильной классификации цветка как versicolor
является 10
и стоимость любой другой ошибки 1
. Написание функции с именем noversicolor
который присваивает стоимость 1
для общей неправильной классификации и стоимости 10
за неправильную классификацию цветка как versicolor
.
Если вы используете файл live скрипта для этого примера, noversicolor
функция уже включена в конец файла. В противном случае вам нужно создать эту функцию в конце файла .m или добавить ее как файл по пути MATLAB.
Вычислите среднюю ошибку неправильной классификации с noversicolor
стоимость.
foldLoss = kfoldfun(CVMdl,@noversicolor); mean(foldLoss)
ans = 0.0667
Этот код создает функцию noversicolor
.
function averageCost = noversicolor(CMP,Xtrain,Ytrain,Wtrain,Xtest,Ytest,Wtest) % noversicolor: Example custom cross-validation function that assigns a cost of % 10 for misclassifying versicolor irises and a cost of 1 for misclassifying % the other irises. This example function requires the fisheriris data % set. Ypredict = predict(CMP,Xtest); misclassified = not(strcmp(Ypredict,Ytest)); % Different result classifiedAsVersicolor = strcmp(Ypredict,'versicolor'); % Index of bad decisions cost = sum(misclassified) + ... 9*sum(misclassified & classifiedAsVersicolor); % Total differences averageCost = single(cost/numel(Ytest)); % Average error end
CVMdl
- Перекрестная проверенная модель ECOCClassificationPartitionedECOC
модельПерекрестная проверенная модель ECOC, заданная как ClassificationPartitionedECOC
модель.
fun
- Перекрестная проверенная функцияПерекрестная проверенная функция, заданная как указатель на функцию. fun
имеет следующий синтаксис:
testvals = fun(CMP,Xtrain,Ytrain,Wtrain,Xtest,Ytest,Wtest)
CMP
- компактная модель, сохраненная в одном элементе CVMdl.Trained
свойство.
Xtrain
- обучающая матрица значений предиктора.
Ytrain
- обучающий массив значений отклика.
Wtrain
- набор обучающих весов для наблюдений.
Xtest
и Ytest
являются ли данные валидации со связанными весами Wtest
.
Возвращенное значение testvals
должен иметь одинаковый размер по всем складкам.
Типы данных: function_handle
vals
- Результаты перекрестной валидацииРезультаты перекрестной валидации, возвращенные как числовая матрица. vals
соответствует массивам testvals
выход, сцепленный вертикально по всем складкам. Для примера, если testvals
из каждой складки является числовым вектором длины n, kfoldfun
возвращает KFold
-by - n числовую матрицу с одной строкой на складку.
ClassificationECOC
| ClassificationPartitionedECOC
| crossval
| fitcecoc
| kfoldEdge
| kfoldLoss
| kfoldMargin
| kfoldPredict
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.