Перекрестный подтвердите функцию с помощью перекрестной подтвержденной модели ECOC
Обучите мультикласс классификатор ECOC, и затем перекрестный подтвердите модель с помощью пользовательской функции потерь k-сгиба.
Загрузите ирисовый набор данных Фишера. Задайте данные о предикторе 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
для общего misclassification и стоимости 10
для неправильной классификации цветка как versicolor
.
Если вы используете файл live скрипта в этом примере, noversicolor
функция уже включена в конце файла. В противном случае необходимо создать эту функцию в конце.m файла или добавить его как файл на пути MATLAB.
Вычислите среднее значение misclassification ошибка с 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
- n числовая матрица с одной строкой на сгиб.
ClassificationECOC
| ClassificationPartitionedECOC
| crossval
| fitcecoc
| kfoldEdge
| kfoldLoss
| kfoldMargin
| kfoldPredict
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.