Перекрестный подтвердите функцию с помощью перекрестной подтвержденной модели ECOC
vals = kfoldfun(CVMdl,fun)
Обучите мультикласс классификатор 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
-by-n числовая матрица с одной строкой на сгиб.
ClassificationECOC
| ClassificationPartitionedECOC
| crossval
| fitcecoc
| kfoldEdge
| kfoldLoss
| kfoldMargin
| kfoldPredict
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.