Потеря классификации для перекрестно проверенной модели ECOC ядра
возвращает потерю классификации, полученную перекрестно проверенной моделью ECOC ядра (loss = kfoldLoss(CVMdl)ClassificationPartitionedKernelECOC) CVMdl. Для каждого раза, kfoldLoss вычисляет потерю классификации для проверочных наблюдений с использованием модели, обученной тренировочным наблюдениям. kfoldLoss применяет те же данные, что и при создании CVMdl (см. fitcecoc).
По умолчанию kfoldLoss возвращает ошибку классификации.
возвращает потерю классификации с дополнительными опциями, заданными одним или несколькими аргументами пары имя-значение. Например, укажите функцию потери классификации, количество складок, схему декодирования или уровень детализации.loss = kfoldLoss(CVMdl,Name,Value)
Загрузите набор данных радужки Фишера. X содержит измерения цветов, и Y содержит названия видов цветов.
load fisheriris
X = meas;
Y = species;Перекрестная проверка модели ECOC, состоящей из двоичных учеников ядра.
CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on')
CVMdl =
ClassificationPartitionedKernelECOC
CrossValidatedModel: 'KernelECOC'
ResponseName: 'Y'
NumObservations: 150
KFold: 10
Partition: [1x1 cvpartition]
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
Properties, Methods
CVMdl является ClassificationPartitionedKernelECOC модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Чтобы указать другое количество сгибов, используйте 'KFold' аргумент пары имя-значение вместо 'Crossval'.
Оцените перекрестную проверенную потерю классификации. По умолчанию программа вычисляет ошибку классификации.
loss = kfoldLoss(CVMdl)
loss = 0.0333
Кроме того, можно получить кратные ошибки классификации, указав пару имя-значение. 'Mode','individual' в kfoldLoss.
Помимо того, что модель обычно правильно классифицирует наблюдения, можно определить, насколько хорошо модель классифицирует наблюдения в свой прогнозируемый класс. Одним из способов определения этого типа качества модели является передача пользовательской функции потерь kfoldLoss.
Загрузите набор данных радужки Фишера. X содержит измерения цветов, и Y содержит названия видов цветов.
load fisheriris
X = meas;
Y = species;Перекрестная проверка модели ECOC, состоящей из двоичных учеников ядра.
rng(1) % For reproducibility CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on')
CVMdl =
ClassificationPartitionedKernelECOC
CrossValidatedModel: 'KernelECOC'
ResponseName: 'Y'
NumObservations: 150
KFold: 10
Partition: [1x1 cvpartition]
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
Properties, Methods
CVMdl является ClassificationPartitionedKernelECOC модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Чтобы указать другое количество сгибов, используйте 'KFold' аргумент пары имя-значение вместо 'Crossval'.
Создайте пользовательскую функцию, которая принимает минимальные потери для каждого наблюдения, а затем усредняет минимальные потери для всех наблюдений. S соответствует NegLoss вывод kfoldPredict.
lossfun = @(~,S,~,~)mean(min(-S,[],2));
Вычислите настраиваемую потерю, прошедшую перекрестную проверку.
kfoldLoss(CVMdl,'LossFun',lossfun)ans = 0.0199
Средняя минимальная двоичная потеря для проверочных наблюдений составляет около 0,02.
CVMdl - Перекрестная проверка модели ECOC ядраClassificationPartitionedKernelECOC модельПерекрестно проверенная модель ECOC ядра, указанная как ClassificationPartitionedKernelECOC модель. Можно создать ClassificationPartitionedKernelECOC модель путем обучения модели ECOC с использованием fitcecoc и указание следующих аргументов пары имя-значение:
'Learners'- Установите значение в 'kernel', объект шаблона, возвращенный templateKernelили массив ячеек таких объектов шаблона.
Один из аргументов 'CrossVal', 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
kfoldLoss(CVMdl,'Folds',[1 3 5]) указывает использовать только первый, третий и пятый сгибы для вычисления потери классификации.'BinaryLoss' - Двоичная функция потери ученика'hamming' | 'linear' | 'logit' | 'exponential' | 'binodeviance' | 'hinge' | 'quadratic' | дескриптор функцииДвоичная функция потери ученика, заданная как разделенная запятыми пара, состоящая из 'BinaryLoss' и встроенное имя или дескриптор функции потери.
Эта таблица содержит имена и описания встроенных функций, где yj - метка класса для конкретного двоичного ученика (в наборе {-1,1,0}), sj - оценка для наблюдения j, а g (yj, sj) - формула двоичных потерь.
| Стоимость | Описание | Домен оценки | g (yj, sj) |
|---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | журнал [1 + exp (-2yjsj) ]/[ 2log (2)] |
'exponential' | Показательный | (–∞,∞) | exp (-yjsj )/2 |
'hamming' | Хэмминг | [0,1] или (- ∞,∞) | [1 - знак (yjsj) ]/2 |
'hinge' | Стержень | (–∞,∞) | max (0,1 - yjsj )/2 |
'linear' | Линейный | (–∞,∞) | (1 - yjsj )/2 |
'logit' | Логистический | (–∞,∞) | log [1 + exp (-yjsj) ]/[ 2log (2)] |
'quadratic' | Квадратный | [0,1] | [1-yj (2sj-1)] 2/2 |
Программное обеспечение нормализует двоичные потери так, что потери составляют 0,5, когда yj = 0. Кроме того, программное обеспечение вычисляет средние двоичные потери для каждого класса.
Например, для пользовательской двоичной функции потери: customFunction, укажите его функциональный дескриптор 'BinaryLoss',@customFunction.
customFunction имеет следующую форму:
bLoss = customFunction(M,s)
M - матрица кодирования K-by-L, сохраненная в Mdl.CodingMatrix.
s - вектор 1-by-L строк классификационных баллов.
bLoss - потеря классификации. Этот скаляр агрегирует двоичные потери для каждого учащегося в конкретном классе. Например, можно использовать среднюю двоичную потерю для суммирования потерь по учащимся для каждого класса.
K - количество классов.
L - количество двоичных учеников.
По умолчанию, если все двоичные ученики являются моделями классификации ядра с использованием SVM, то BinaryLoss является 'hinge'. Если все двоичные ученики являются моделями классификации ядра с использованием логистической регрессии, то BinaryLoss является 'quadratic'.
Пример: 'BinaryLoss','binodeviance'
Типы данных: char | string | function_handle
'Decoding' - Схема декодирования'lossweighted' (по умолчанию) | 'lossbased'Схема декодирования, которая агрегирует двоичные потери, заданная как разделенная запятыми пара, состоящая из 'Decoding' и 'lossweighted' или 'lossbased'. Дополнительные сведения см. в разделе Потери двоичного кода.
Пример: 'Decoding','lossbased'
'Folds' - Кратные индексы для прогнозирования1:CVMdl.KFold (по умолчанию) | числовой вектор положительных целых чиселИндексы складки для прогнозирования, указанные как пара, разделенная запятыми, состоящая из 'Folds' и числовой вектор положительных целых чисел. Элементы Folds должно находиться в диапазоне от 1 кому CVMdl.KFold.
Программное обеспечение использует только складки, указанные в Folds для прогнозирования.
Пример: 'Folds',[1 4 10]
Типы данных: single | double
'LossFun' - Функция потерь'classiferror' (по умолчанию) | дескриптор функцииФункция потерь, заданная как разделенная запятыми пара, состоящая из 'LossFun' и 'classiferror' или дескриптор функции.
Укажите встроенную функцию 'classiferror'. В этом случае функцией потерь является ошибка классификации.
Или укажите собственную функцию с помощью нотации дескриптора функции.
Предположим, что n - это количество наблюдений в данных обучения (CVMdl.NumObservations) и K - количество классов (numel(CVMdl.ClassNames)). Вашей функции нужна подпись lossvalue = , где:lossfun(C,S,W,Cost)
Выходной аргумент lossvalue является скаляром.
Указывается имя функции (lossfun).
C - логическая матрица n-by-K со строками, указывающими класс, которому принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в CVMdl.ClassNames.
Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в классе q, для каждой строки. Задать каждый элемент строки p кому 0.
S - числовая матрица n-by-K отрицаемых значений потерь для классов. Каждая строка соответствует наблюдению. Порядок столбцов соответствует порядку классов в CVMdl.ClassNames. Вход S напоминает выходной аргумент NegLoss из kfoldPredict.
W является n-на-1 числовым вектором весов наблюдения. Если вы проходите W, программное обеспечение нормализует свои элементы для суммирования 1.
Cost является цифровой матрицей K-by-K затрат на неправильную классификацию. Например, Cost = ones(K) – eye(K) указывает стоимость 0 для правильной классификации и 1 для неправильной классификации.
Укажите свою функцию с помощью 'LossFun',@lossfun.
Типы данных: char | string | function_handle
'Mode' - Уровень агрегации для вывода'average' (по умолчанию) | 'individual'Уровень агрегации для вывода, указанный как пара, разделенная запятыми, состоящая из 'Mode' и 'average' или 'individual'.
В этой таблице описываются значения.
| Стоимость | Описание |
|---|---|
'average' | Вывод является скалярным средним по всем складкам. |
'individual' | Выходной сигнал представляет собой вектор длины k, содержащий одно значение на единицу, где k - количество сгибов. |
Пример: 'Mode','individual'
'Options' - Варианты оценки[] (по умолчанию) | массив структуры, возвращенный statsetОпции оценки, указанные как пара, разделенная запятыми, состоящая из 'Options' и массив структуры, возвращенный statset.
Для вызова параллельных вычислений:
Вам нужна лицензия Parallel Computing Toolbox™.
Определить 'Options',statset('UseParallel',true).
'Verbose' - Уровень детализации0 (по умолчанию) | 1Уровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и 0 или 1. Verbose управляет количеством диагностических сообщений, отображаемых программой в окне команд.
Если Verbose является 0, то программное обеспечение не отображает диагностические сообщения. В противном случае программа отображает диагностические сообщения.
Пример: 'Verbose',1
Типы данных: single | double
loss - классификационные потери;Потеря классификации, возвращаемая в виде числового скалярного или числового вектора столбца.
Если Mode является 'average', то loss - средняя потеря классификации по всем складкам. В противном случае loss - вектор числового столбца k-by-1, содержащий классификационные потери для каждой складки, где k - количество складок.
Ошибка классификации - это двоичная мера ошибки классификации, имеющая вид
где:
wj - вес для наблюдения j. Программа перенормирует весовые коэффициенты до 1.
ej = 1, если прогнозируемый класс наблюдения j отличается от своего истинного класса, и 0 в противном случае.
Другими словами, ошибка классификации - это доля наблюдений, неправильно классифицированных классификатором.
Двоичная потеря - это функция класса и оценки классификации, которая определяет, насколько хорошо двоичный ученик классифицирует наблюдение в классе.
Предположим, что:
mkj - элемент (k, j) матрицы M дизайна кодирования (то есть код, соответствующий классу k двоичного учащегося j).
sj - оценка двоичного ученика j для наблюдения.
g - функция двоичных потерь.
^ - прогнозируемый класс для наблюдения.
При декодировании на основе потерь [Escalera et al.] класс, производящий минимальную сумму двоичных потерь над двоичными учениками, определяет прогнозируемый класс наблюдения, то есть
).
При декодировании со взвешенными потерями [Escalera et al.] класс, производящий минимальное среднее двоичных потерь по двоичным ученикам, определяет прогнозируемый класс наблюдения, то есть
∑j=1L'mkj|.
Allwein et al. предполагают, что взвешенное по потерям декодирование улучшает точность классификации, сохраняя значения потерь для всех классов в одном динамическом диапазоне.
Эта таблица суммирует поддерживаемые функции потерь, где yj - метка класса для конкретного двоичного ученика (в наборе {-1,1,0}), sj - оценка для наблюдения j, и g (yj, sj).
| Стоимость | Описание | Домен оценки | g (yj, sj) |
|---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | журнал [1 + exp (-2yjsj) ]/[ 2log (2)] |
'exponential' | Показательный | (–∞,∞) | exp (-yjsj )/2 |
'hamming' | Хэмминг | [0,1] или (- ∞,∞) | [1 - знак (yjsj) ]/2 |
'hinge' | Стержень | (–∞,∞) | max (0,1 - yjsj )/2 |
'linear' | Линейный | (–∞,∞) | (1 - yjsj )/2 |
'logit' | Логистический | (–∞,∞) | log [1 + exp (-yjsj) ]/[ 2log (2)] |
'quadratic' | Квадратный | [0,1] | [1-yj (2sj-1)] 2/2 |
Программное обеспечение нормализует двоичные потери так, что потери составляют 0,5, когда yj = 0, и агрегирует, используя среднее значение двоичных учеников [Allwein et al.].
Не путайте бинарную потерю с общей классификационной потерей (указанной 'LossFun' аргумент пары имя-значение loss и predict объектные функции), который измеряет, насколько хорошо классификатор ECOC работает в целом.
[1] Allwein, E., R. Schapire и Y. Singer. «Сокращение мультиклассов до двоичных: унифицирующий подход к classifiers маржи». Журнал исследований машинного обучения. Том 1, 2000, стр. 113-141.
[2] Эскалера, С., О. Пужоль и П. Радева. «Процесс декодирования в выходных кодах с тройной коррекцией ошибок». Транзакции IEEE по анализу шаблонов и машинному интеллекту. Том 32, выпуск 7, 2010, стр. 120-134.
[3] Эскалера, С., О. Пужоль и П. Радева. «Разделяемость троичных кодов для разреженных конструкций выходных кодов с исправлением ошибок». Повторная запись шаблона. Том 30, выпуск 3, 2009, стр. 285-297.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.