Потеря классификации для многоклассовой модели выходных кодов с исправлением ошибок (ECOC)
возвращает потерю классификации (L = loss(Mdl,tbl,ResponseVarName)L), скаляр, представляющий, насколько хорошо модель обученных многоклассовых выходных кодов с исправлением ошибок (ECOC) Mdl классифицирует данные предиктора в tbl по сравнению с метками истинного класса в tbl.ResponseVarName. По умолчанию loss использует ошибку классификации для вычисления L.
указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно указать схему декодирования, функцию потери классификации и уровень детализации.L = loss(___,Name,Value)
Загрузите набор данных радужки Фишера. Укажите данные предиктора X, данные ответа Yи порядок классов в Y.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
Обучение модели ECOC с использованием двоичных классификаторов SVM. Укажите 15% -ную выборку, стандартизируйте предикторы с помощью шаблона SVM и укажите порядок классов.
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.15,'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl является ClassificationPartitionedECOC модель. Имеет свойство Trained, массив ячеек 1 на 1, содержащий CompactClassificationECOC модель, которую программное обеспечение обучило с использованием обучающего набора.
Оцените ошибку классификации тестового образца, которая является потерей классификации по умолчанию.
testInds = test(PMdl.Partition); % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);
L = loss(Mdl,XTest,YTest)L = 0
Модель ECOC правильно классифицирует все ирисы в тестовом образце.
Определите качество модели ECOC с помощью пользовательской функции потерь, которая учитывает минимальные двоичные потери для каждого наблюдения.
Загрузите набор данных радужки Фишера. Укажите данные предиктора X, данные ответа Yи порядок классов в Y.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1) % For reproducibility
Обучение модели ECOC с использованием двоичных классификаторов SVM. Укажите 15% -ную выборку, стандартизируйте предикторы с помощью шаблона SVM и определите порядок классов.
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.15,'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl является ClassificationPartitionedECOC модель. Имеет свойство Trained, массив ячеек 1 на 1, содержащий CompactClassificationECOC модель, которую программное обеспечение обучило с использованием обучающего набора.
Создайте функцию, которая принимает минимальные потери для каждого наблюдения, а затем усредняет минимальные потери для всех наблюдений. S соответствует NegLoss вывод predict.
lossfun = @(~,S,~,~)mean(min(-S,[],2));
Вычислите пользовательские потери тестового образца.
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); loss(Mdl,XTest,YTest,'LossFun',lossfun)
ans = 0.0033
Средняя минимальная двоичная потеря для наблюдений тестового образца составляет 0.0033.
Mdl - Полная или компактная многоклассная модель ECOCClassificationECOC объект модели | CompactClassificationECOC объект моделиПолная или компактная многоклассная модель ECOC, заданная как ClassificationECOC или CompactClassificationECOC объект модели.
Чтобы создать полную или компактную модель ECOC, см. раздел ClassificationECOC или CompactClassificationECOC.
tbl - Образцы данныхОбразец данных, указанный как таблица. Каждая строка tbl соответствует одному наблюдению, и каждый столбец соответствует одной прогнозирующей переменной. Дополнительно, tbl может содержать дополнительные столбцы для переменной ответа и весов наблюдения. tbl должен содержать все предикторы, используемые для обучения Mdl. Многозначные переменные и массивы ячеек, отличные от массивов ячеек символьных векторов, не допускаются.
Если вы тренируетесь Mdl с использованием образцов данных, содержащихся в table, затем входные данные для loss также должен находиться в таблице.
При обучении Mdl, предположим, что вы установили 'Standardize',true для объекта шаблона, указанного в 'Learners' аргумент пары имя-значение fitcecoc. В этом случае для соответствующего двоичного ученика j, программное обеспечение стандартизирует столбцы новых данных предиктора, используя соответствующие средства в Mdl.BinaryLearner{j}.Mu и стандартные отклонения в Mdl.BinaryLearner{j}.Sigma.
Типы данных: table
ResponseVarName - Имя переменной ответаtblИмя переменной ответа, указанное как имя переменной в tbl. Если tbl содержит переменную ответа, используемую для обучения Mdl, то указывать не нужно ResponseVarName.
При указании ResponseVarName, то это необходимо сделать как вектор символа или скаляр строки. Например, если переменная ответа сохранена как tbl.y, затем укажите ResponseVarName как 'y'. В противном случае программа обрабатывает все столбцы tbl, в том числе tbl.y, как предикторы.
Переменная ответа должна быть категориальным, символьным или строковым массивом, логическим или числовым вектором или массивом ячеек символьных векторов. Если ответная переменная является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char | string
X - Данные предиктораДанные предиктора, заданные как числовая матрица.
Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной. Переменные в столбцах X должны совпадать с переменными, подготовившими классификатор Mdl.
Количество строк в X должно равняться количеству строк в Y.
При обучении Mdl, предположим, что вы установили 'Standardize',true для объекта шаблона, указанного в 'Learners' аргумент пары имя-значение fitcecoc. В этом случае для соответствующего двоичного ученика j, программное обеспечение стандартизирует столбцы новых данных предиктора, используя соответствующие средства в Mdl.BinaryLearner{j}.Mu и стандартные отклонения в Mdl.BinaryLearner{j}.Sigma.
Типы данных: double | single
Y - Этикетки классовМетки класса, указанные как категориальный, символьный или строковый массив, логический или числовой вектор или массив ячеек символьных векторов. Y должен иметь тот же тип данных, что и Mdl.ClassNames. (Программа рассматривает строковые массивы как массивы ячеек символьных векторов.)
Количество строк в Y должно равняться количеству строк в tbl или X.
Типы данных: categorical | char | string | logical | single | double | cell
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
loss(Mdl,X,Y,'BinaryLoss','hinge','LossFun',@lossfun) определяет 'hinge' как двоичная функция потери ученика и пользовательский дескриптор функции @lossfun в качестве общей функции потерь.'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 - количество двоичных учеников.
Пример передачи пользовательской двоичной функции потери см. в разделе Прогнозирование меток тестовой выборки модели ECOC с использованием пользовательской двоичной функции потери.
Дефолт BinaryLoss значение зависит от диапазонов баллов, возвращаемых двоичными учениками. В этой таблице описаны некоторые значения по умолчанию BinaryLoss значения, основанные на данных допущениях.
| Предположение | Значение по умолчанию |
|---|---|
| Все двоичные ученики являются SVM или линейными или классификационными моделями SVM. | 'hinge' |
Все бинарные учащиеся являются ансамблями, обученными AdaboostM1 или GentleBoost. | 'exponential' |
Все бинарные учащиеся являются ансамблями, обученными LogitBoost. | 'binodeviance' |
Все двоичные ученики являются линейными или классификационными моделями ядра учащихся логистической регрессии. Или вы указываете, чтобы предсказать апостериорные вероятности класса путем установки 'FitPosterior',true в fitcecoc. | 'quadratic' |
Чтобы проверить значение по умолчанию, используйте точечную нотацию для отображения BinaryLoss свойство обучаемой модели в командной строке.
Пример: 'BinaryLoss','binodeviance'
Типы данных: char | string | function_handle
'Decoding' - Схема декодирования'lossweighted' (по умолчанию) | 'lossbased'Схема декодирования, которая агрегирует двоичные потери, заданная как разделенная запятыми пара, состоящая из 'Decoding' и 'lossweighted' или 'lossbased'. Дополнительные сведения см. в разделе Потери двоичного кода.
Пример: 'Decoding','lossbased'
'LossFun' - Функция потерь'classiferror' (по умолчанию) | дескриптор функцииФункция потерь, заданная как разделенная запятыми пара, состоящая из 'LossFun' и 'classiferror' или дескриптор функции.
Укажите встроенную функцию 'classiferror'. В этом случае функцией потерь является ошибка классификации, которая является долей неправильно классифицированных наблюдений.
Или укажите собственную функцию с помощью нотации дескриптора функции.
Предположим, что n = size(X,1) - размер выборки и K - количество классов. Ваша функция должна иметь подпись lossvalue = lossfun(C,S,W,Cost), где:
Выходной аргумент lossvalue является скаляром.
Указывается имя функции (lossfun).
C является nоколо-K логическая матрица со строками, указывающими класс, которому принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в Mdl.ClassNames.
Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в классе q, для каждой строки. Установка всех остальных элементов строки p кому 0.
S является nоколо-K числовая матрица отрицательных значений потерь для классов. Каждая строка соответствует наблюдению. Порядок столбцов соответствует порядку классов в Mdl.ClassNames. Вход S напоминает выходной аргумент NegLoss из predict.
W является n-по-1 числовой вектор весов наблюдения. Если вы проходите W, программное обеспечение нормализует свои элементы для суммирования 1.
Cost является Kоколо-K числовая матрица затрат на неправильную классификацию. Например, Cost = ones(K) – eye(K) указывает стоимость 0 для правильной классификации и 1 для неправильной классификации.
Укажите свою функцию с помощью 'LossFun',@lossfun.
Типы данных: char | string | function_handle
'ObservationsIn' - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как пара, разделенная запятыми, состоящая из 'ObservationsIn' и 'columns' или 'rows'. Mdl.BinaryLearners должен содержать ClassificationLinear модели.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', можно значительно сократить время выполнения. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.
'Options' - Варианты оценки[] (по умолчанию) | массив структуры, возвращенный statsetОпции оценки, указанные как пара, разделенная запятыми, состоящая из 'Options' и массив структуры, возвращенный statset.
Для вызова параллельных вычислений:
Вам нужна лицензия Parallel Computing Toolbox™.
Определить 'Options',statset('UseParallel',true).
'Verbose' - Уровень детализации0 (по умолчанию) | 1Уровень детализации, указанный как разделенная запятыми пара, состоящая из 'Verbose' и 0 или 1. Verbose управляет количеством диагностических сообщений, отображаемых программой в окне команд.
Если Verbose является 0, то программное обеспечение не отображает диагностические сообщения. В противном случае программа отображает диагностические сообщения.
Пример: 'Verbose',1
Типы данных: single | double
'Weights' - Наблюдательные весаones(size(X,1),1) (по умолчанию) | числовой вектор | имя переменной в tblВеса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и числовой вектор или имя переменной в tbl. Если вы поставляете веса, то loss вычисляет взвешенные потери.
При указании Weights как числовой вектор, то размер Weights должно быть равно количеству строк в X или tbl.
При указании Weights как имя переменной в tbl, необходимо сделать это как вектор символа или скаляр строки. Например, если веса сохранены как tbl.w, затем укажите Weights как 'w'. В противном случае программа обрабатывает все столбцы tbl, в том числе tbl.w, как предикторы.
Если не указана собственная функция потерь (с помощью LossFun), то программное обеспечение нормализуется Weights для суммирования значения предшествующей вероятности в соответствующем классе.
Типы данных: single | double | char | string
L - классификационные потери;Потеря классификации, возвращаемая в виде числового скалярного вектора или вектора строки. L является показателем качества обобщения или повторного замещения. Его интерпретация зависит от функции потерь и схемы взвешивания, но в целом лучшие классификаторы дают меньшие значения классификационных потерь.
Если Mdl.BinaryLearners содержит ClassificationLinear модели, затем L - вектор 1-by-ℓ, где ℓ - количество уровней регуляризации в моделях линейной классификации (numel(Mdl.BinaryLearners{1}.Lambda)). Стоимость L(j) является потерей для модели, обученной с использованием силы регуляризации Mdl.BinaryLearners{1}.Lambda(j).
В противном случае L является скалярным значением.
Ошибка классификации - это двоичная мера ошибки классификации, имеющая вид
где:
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.
Примечания и ограничения по использованию:
loss не поддерживает высокий table данные при Mdl содержит ядро или линейные двоичные ученики.
Дополнительные сведения см. в разделе Массивы Tall.
Для параллельного выполнения укажите 'Options' аргумент name-value в вызове этой функции и установка 'UseParallel' поле структуры опций для true использование statset.
Например: 'Options',statset('UseParallel',true)
Дополнительные сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с автоматической параллельной поддержкой (панель инструментов параллельных вычислений).
ClassificationECOC | CompactClassificationECOC | fitcecoc | predict | resubLoss
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.