Классификационные потери для наблюдений, не используемых в обучении
возвращает перекрестно проверенную классификационную частоту ошибок, оцененную перекрестно проверенной, исправляющей ошибки моделью выходных кодов (ECOC), составленной из линейных классификационных моделей L = kfoldLoss(CVMdl)CVMdl. То есть для каждой складки kfoldLoss оценивает классификационную частоту ошибок для наблюдений, которые она протекает при обучении с использованием всех других наблюдений. kfoldLoss применяет те же данные, что и при создании CVMdl (см. fitcecoc).
L содержит классификационные потери для каждой степени регуляризации в линейных классификационных моделях, которые составляют CVMdl.
использует дополнительные опции, заданные одним или несколькими L = kfoldLoss(CVMdl,Name,Value)Name,Value аргументы в виде пар. Для примера задайте схему декодирования, которая складывается, чтобы использовать для вычисления потерь или уровня подробностей.
CVMdl - Перекрестная проверенная модель ECOC, состоящая из линейных классификационных моделейClassificationPartitionedLinearECOC объект моделиПерекрестная проверенная модель ECOC, состоящая из линейных классификационных моделей, заданных как ClassificationPartitionedLinearECOC объект модели. Можно создать ClassificationPartitionedLinearECOC модель с использованием fitcecoc и:
Указание любого из аргументов пары "имя-значение", например CrossVal
Установка аргумента пары "имя-значение" Learners на 'linear' или шаблон линейной классификационной модели, возвращенный templateLinear
Для получения оценок kfoldLoss применяет те же данные, что и для перекрестной проверки модели ECOC (X и Y).
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
'BinaryLoss' - Бинарная функция потерь для учащихся'hamming' | 'linear' | 'logit' | 'exponential' | 'binodeviance' | 'hinge' | 'quadratic' | указатель на функциюДвоичная функция потерь учащегося, заданная как разделенная разделенными запятой парами, состоящая из 'BinaryLoss' и встроенное имя функции потери или указатель на функцию.
Эта таблица содержит имена и описания встроенных функций, где yj является меткой класса для конкретного двоичного ученика (в наборе {-1,1,0}), sj является счетом для j наблюдений и g (yj, sj) является формулой двоичных потерь.
| Значение | Описание | Счет | g (yj, sj) |
|---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | log [1 + exp (-2 yjsj) ]/[ 2log (2)] |
'exponential' | Экспоненциал | (–∞,∞) | exp (- yjsj )/2 |
'hamming' | Хэмминг | [0,1] или (- ∞, ∞) | [1 - знак (yjsj) ]/2 |
'hinge' | Стержень | (–∞,∞) | макс (0,1 - yjsj )/2 |
'linear' | Линейный | (–∞,∞) | (1 – yjsj)/2 |
'logit' | Логистический | (–∞,∞) | журнал [1 + exp (- yjsj) ]/[ 2log (2)] |
'quadratic' | Квадратный | [0,1] | [1 – yj (2 sj – 1)]2/2 |
Программа нормализует двоичные потери так, что потеря составляет 0,5 при yj = 0. Кроме того, программное обеспечение вычисляет средние двоичные потери для каждого класса.
Для пользовательской функции двоичных потерь, например customFunction, задайте его указатель на функцию 'BinaryLoss',@customFunction.
customFunction должна иметь эту форму
bLoss = customFunction(M,s)
M - K матрица кодирования L, сохраненная в Mdl.CodingMatrix.
s - вектор-строка L 1 байта классификационных баллов.
bLoss - классификационные потери. Этот скаляр агрегирует двоичные потери для каждого учащегося в конкретном классе. Для примера можно использовать среднее значение двоичных потерь для агрегирования потерь по учащимся для каждого класса.
K - количество классов.
L - это количество двоичных учащихся.
Для примера передачи пользовательской функции двоичных потерь смотрите Предсказание меток теста-образца модели ECOC с помощью Пользовательской функции двоичных потерь.
По умолчанию, если все двоичные ученики являются линейными моделями классификации с помощью:
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',[1 4 10]
Типы данных: single | double
'LossFun' - Функция потерь'classiferror' (по умолчанию) | указатель на функциюФункция потерь, заданная как разделенная разделенными запятой парами, состоящая из 'LossFun' и указатель на функцию или 'classiferror'.
Вы можете:
Задайте встроенную функцию 'classiferror', тогда функция потерь является ошибкой классификации.
Задайте свою собственную функцию, используя обозначение указателя на функцию.
Для чего следует, n количество наблюдений в обучающих данных (CVMdl.NumObservations) и K количество классов (numel(CVMdl.ClassNames)). Вашей функции нужна подпись lossvalue = , где:lossfun(C, S, W, стоимость)
Выходной аргумент 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-by-1 числовой вектор весов наблюдений. Если вы сдаете Wпрограммное обеспечение нормирует свои элементы в сумме к 1.
Cost является K-by- K числовая матрица затрат на неправильную классификацию. Для примера, Cost = ones(K) -eye(K) задает стоимость 0 для правильной классификации и 1 для неправильной классификации.
Задайте свою функцию используя 'LossFun',@lossfun.
Типы данных: function_handle | char | string
'Mode' - Уровень агрегирования потерь'average' (по умолчанию) | 'individual'Уровень агрегирования потерь, заданный как разделенная разделенными запятой парами, состоящая из 'Mode' и 'average' или 'individual'.
| Значение | Описание |
|---|---|
'average' | Возвращает потери, усредненные по всем складкам |
'individual' | Возвращает потери для каждой складки |
Пример: '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
L - Перекрестно проверенные классификационные потериПерекрестно проверенные классификационные потери, возвращенные как числовой скаляр, вектор или матрица. Толкование L зависит от LossFun.
Позвольте R быть количеством сильных сторон регуляризации является перекрестно проверенные модели (CVMdl.Trained{1}.BinaryLearners{1}.Lambda) и F количество складок (сохранено в CVMdl.KFold).
Если Mode является 'average', затем L является 1-байт- R вектор. L - средние классификационные потери по всем складкам перекрестно проверенной модели, использующей силу регуляризации (j)j.
В противном случае L является F-by- R матрица. L - классификационные потери для складки (i, j)i модели с перекрестной проверкой, которая использует силу регуляризации j.
Загрузите набор данных NLP.
load nlpdataX является разреженной матрицей данных предиктора, и Y является категориальным вектором меток классов.
Перекрестная проверка модели линейной классификации ECOC.
rng(1); % For reproducibility CVMdl = fitcecoc(X,Y,'Learner','linear','CrossVal','on');
CVMdl является ClassificationPartitionedLinearECOC модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную валидацию.
Оцените среднюю частоту несовпадающих ошибок классификации.
ce = kfoldLoss(CVMdl)
ce = 0.0958
Кроме того, можно получить частоту ошибок классификации в относительных единицах путем определения пары "имя-значение" 'Mode','individual' в kfoldLoss.
Загрузите набор данных NLP. Транспонируйте данные предиктора.
load nlpdata
X = X';Для простоты используйте метку 'others' для всех наблюдений в Y которые не 'simulink', 'dsp', или 'comm'.
Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';Создайте шаблон модели линейной классификации, который задает оптимизацию целевой функции с помощью SpaRSA.
t = templateLinear('Solver','sparsa');
Перекрестная валидация модели линейной классификации ECOC с помощью 5-кратной перекрестной валидации. Оптимизируйте целевую функцию с помощью SpaRSA. Задайте, что наблюдения предиктора соответствуют столбцам.
rng(1); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners',t,'KFold',5,'ObservationsIn','columns'); CMdl1 = CVMdl.Trained{1}
CMdl1 =
CompactClassificationECOC
ResponseName: 'Y'
ClassNames: [comm dsp simulink others]
ScoreTransform: 'none'
BinaryLearners: {6x1 cell}
CodingMatrix: [4x6 double]
Properties, Methods
CVMdl является ClassificationPartitionedLinearECOC модель. Оно содержит свойство Trained, который является массивом ячеек 5 на 1, содержащим CompactClassificationECOC моделирует, что программное обеспечение обучалось с использованием набора обучающих данных каждой складки.
Создайте функцию, которая принимает минимальные потери для каждого наблюдения, а затем усредняет минимальные потери для всех наблюдений. Потому что функция не использует матрицу идентификатора класса (C), веса наблюдений (W) и классификационные затраты (Cost), использовать ~ иметь kfoldLoss игнорируйте их положения.
lossfun = @(~,S,~,~)mean(min(-S,[],2));
Оцените средние перекрестные подтвержденные классификационные потери с помощью минимальных потерь на функцию наблюдения. Также получите потери для каждой складки.
ce = kfoldLoss(CVMdl,'LossFun',lossfun)ce = 0.0243
ceFold = kfoldLoss(CVMdl,'LossFun',lossfun,'Mode','individual')
ceFold = 5×1
0.0244
0.0255
0.0248
0.0240
0.0226
Чтобы определить хорошую силу лассо-штрафов для модели ECOC, состоящей из линейных классификационных моделей, которые используют учителей логистической регрессии, реализуйте 5-кратную перекрестную валидацию.
Загрузите набор данных NLP.
load nlpdataX является разреженной матрицей данных предиктора, и Y является категориальным вектором меток классов.
Для простоты используйте метку 'others' для всех наблюдений в Y которые не 'simulink', 'dsp', или 'comm'.
Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';Создайте набор из 11 логарифмически разнесенных сильных сторон регуляризации через .
Lambda = logspace(-7,-2,11);
Создайте шаблон модели линейной классификации, который задает, чтобы использовать учителей логистической регрессии, использовать штрафы лассо с сильными сторонами в Lambda, обучить с помощью SpaRSA и снизить допуск по градиенту целевой функции до 1e-8.
t = templateLinear('Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8);
Перекрестная проверка моделей. Чтобы увеличить скорость выполнения, транспонируйте данные предиктора и укажите, что наблюдения указаны в столбцах.
X = X'; rng(10); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns','KFold',5);
CVMdl является ClassificationPartitionedLinearECOC модель.
Рассечение CVMdl, и каждая модель в ней.
numECOCModels = numel(CVMdl.Trained)
numECOCModels = 5
ECOCMdl1 = CVMdl.Trained{1}ECOCMdl1 =
CompactClassificationECOC
ResponseName: 'Y'
ClassNames: [comm dsp simulink others]
ScoreTransform: 'none'
BinaryLearners: {6×1 cell}
CodingMatrix: [4×6 double]
Properties, Methods
numCLModels = numel(ECOCMdl1.BinaryLearners)
numCLModels = 6
CLMdl1 = ECOCMdl1.BinaryLearners{1}CLMdl1 =
ClassificationLinear
ResponseName: 'Y'
ClassNames: [-1 1]
ScoreTransform: 'logit'
Beta: [34023×11 double]
Bias: [-0.3169 -0.3169 -0.3168 -0.3168 -0.3168 -0.3167 -0.1725 -0.0805 -0.1762 -0.3450 -0.5174]
Lambda: [1.0000e-07 3.1623e-07 1.0000e-06 3.1623e-06 1.0000e-05 3.1623e-05 1.0000e-04 3.1623e-04 1.0000e-03 0.0032 0.0100]
Learner: 'logistic'
Properties, Methods
Потому что fitcecoc реализует 5-кратную перекрестную валидацию, CVMdl содержит массив ячеек 5 на 1 CompactClassificationECOC модели, которые программное обеспечение обучает на каждой складке. The BinaryLearners свойство каждого CompactClassificationECOC модель содержит ClassificationLinear модели. Количество ClassificationLinear модели в каждой компактной модели ECOC зависят от количества отдельных меток и проекта кодирования. Потому что Lambda последовательность регуляризационных сильных сторон, вы можете думать о CLMdl1 как 11 моделей, по одной на каждую силу регуляризации в Lambda.
Определите, насколько хорошо модели обобщаются, путем построения средних значений 5-кратной ошибки классификации для каждой силы регуляризации. Идентифицируйте силу регуляризации, которая минимизирует ошибку обобщения по сетке.
ce = kfoldLoss(CVMdl); figure; plot(log10(Lambda),log10(ce)) [~,minCEIdx] = min(ce); minLambda = Lambda(minCEIdx); hold on plot(log10(minLambda),log10(ce(minCEIdx)),'ro'); ylabel('log_{10} 5-fold classification error') xlabel('log_{10} Lambda') legend('MSE','Min classification error') hold off

Обучите модель ECOC, состоящую из линейной классификационной модели, используя весь набор данных и задайте минимальную прочность регуляризации.
t = templateLinear('Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',minLambda,'GradientTolerance',1e-8); MdlFinal = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns');
Чтобы оценить метки для новых наблюдений, передайте MdlFinal и новые данные для predict.
binary loss является функцией класса и классификационной оценки, которая определяет, насколько хорошо двоичный ученик классифицирует наблюдение в класс.
Предположим следующее:
mkj является элементом (k, j) матрицы разработки кодирования M (то есть кода, соответствующего k классов двоичных j обучающегося).
sj - этот счет двоичных j учащихся для наблюдения.
g является функцией двоичных потерь.
- предсказанный класс для наблюдения.
В loss-based decoding [Escalera et al.] класс, производящий минимальную сумму двоичных потерь по сравнению с двоичными учениками, определяет предсказанный класс наблюдения, то есть
В loss-weighted decoding [Escalera et al.] класс, производящий минимальное среднее значение двоичных потерь по сравнению с двоичными учениками, определяет предсказанный класс наблюдения, то есть
Allwein et al. предположим, что утраченное декодирование повышает точность классификации путем сохранения значений потерь для всех классов в одной динамической области значений.
В этой таблице приведены поддерживаемые функции потерь, где yj является меткой класса для конкретного двоичного обучающегося (в наборе {-1,1,0}), sj является счетом для j наблюдений и g (yj, sj).
| Значение | Описание | Счет | g (yj, sj) |
|---|---|---|---|
'binodeviance' | Биномиальное отклонение | (–∞,∞) | log [1 + exp (-2 yjsj) ]/[ 2log (2)] |
'exponential' | Экспоненциал | (–∞,∞) | exp (- yjsj )/2 |
'hamming' | Хэмминг | [0,1] или (- ∞, ∞) | [1 - знак (yjsj) ]/2 |
'hinge' | Стержень | (–∞,∞) | макс (0,1 - yjsj )/2 |
'linear' | Линейный | (–∞,∞) | (1 – yjsj)/2 |
'logit' | Логистический | (–∞,∞) | журнал [1 + exp (- yjsj) ]/[ 2log (2)] |
'quadratic' | Квадратный | [0,1] | [1 – yj (2 sj – 1)]2/2 |
Программа нормализует двоичные потери таким образом, что потеря составляет 0,5 при yj = 0, и агрегирует, используя среднее значение двоичных учащихся [Allwein et al.].
Не путайте двоичные потери с общими классификационными потерями (заданными 'LossFun' Аргумент пары "имя-значение" из loss и predict функции объекта), который измеряет, насколько хорошо классификатор ECOC работает в целом.
classification error является двоичной мерой ошибки классификации, которая имеет вид
где:
wj - вес для j наблюдений. Программа перенормирует веса до суммы 1.
ej = 1, если предсказанный класс j наблюдения отличается от его истинного класса, и 0 в противном случае.
Другими словами, классификационная ошибка является долей наблюдений, неправильно классифицированных классификатором.
[1] Allwein, E., R. Schapire, and Y. Singer. «Сокращение многоклассового числа до двоичного: Унифицирующий подход к маржинальным classifiers». Журнал исследований машинного обучения. Том 1, 2000, стр. 113-141.
[2] Эскалера, С., О. Пужоль, и П. Радева. «О процессе декодирования в троичных выходных кодах с исправлением ошибок». Транзакции IEEE по шаблонному анализу и машинному анализу. Том 32, Выпуск 7, 2010, стр. 120-134.
[3] Эскалера, С., О. Пужоль, и П. Радева. «Разделяемость троичных кодов для разреженных проектов выходных кодов с исправлением ошибок». Pattern Recogn (Повторный вызов шаблона). Том 30, Выпуск 3, 2009, стр. 285-297.
Чтобы выполнять параллельно, задайте 'Options' аргумент имя-значение в вызове этой функции и установите 'UseParallel' поле структуры опций для true использование statset.
Для примера: 'Options',statset('UseParallel',true)
Для получения дополнительной информации о параллельных вычислениях смотрите Запуск функций MATLAB с автоматической поддержкой параллельных вычислений (Parallel Computing Toolbox).
ClassificationECOC | ClassificationLinear | ClassificationPartitionedLinearECOC | fitcecoc | kfoldPredict | loss | statset
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.