Перекрестный подтвердите функцию с помощью перекрестной подтвержденной модели 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.