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