Классификационные потери для наблюдений, не используемых в обучении
возвращает коэффициенты ошибок классификации с перекрестной проверкой, оцененные моделью выходных кодов с перекрестной проверкой и исправлением ошибок (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' | Биномиальное отклонение | (–∞,∞) | журнал [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 с использованием пользовательской двоичной функции потери.
По умолчанию, если все двоичные ученики являются линейными моделями классификации с использованием:
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,Cost)
Выходной аргумент lossvalue является скаляром.
Выберите имя функции (lossfun).
C является nоколо-K логическая матрица со строками, указывающими, какому классу принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в CVMdl.ClassNames.
Конструкция C путем установки C(p,q) = 1 если наблюдение p находится в классе q, для каждой строки. Задать каждый элемент строки p кому 0.
S является nоколо-K числовая матрица отрицательных значений потерь для классов. Каждая строка соответствует наблюдению. Порядок столбцов соответствует порядку классов в CVMdl.ClassNames. S напоминает выходной аргумент NegLoss из kfoldPredict.
W является n-по-1 числовой вектор весов наблюдения. Если вы проходите W, программное обеспечение нормализует свои элементы для суммирования 1.
Cost является Kоколо-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-by-R вектор. L( средняя потеря классификации по всем складкам перекрестно проверенной модели, которая использует силу регуляризации j)j.
В противном случае L является Fоколо-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 линейных классификационных моделей с использованием пятикратной перекрестной проверки. Оптимизируйте целевую функцию с помощью 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, состоящей из моделей линейной классификации, в которых используются учащиеся логистической регрессии, реализуйте пятикратную перекрестную проверку.
Загрузите набор данных 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 реализует пятикратную перекрестную проверку, CVMdl содержит массив ячеек 5 на 1 CompactClassificationECOC модели, которые программное обеспечение обучает на каждой складке. BinaryLearners свойство каждого CompactClassificationECOC модель содержит ClassificationLinear модели. Количество ClassificationLinear модели в каждой компактной модели ECOC зависят от количества отдельных меток и дизайна кодирования. Поскольку Lambda - это последовательность сильных сторон регуляризации, вы можете думать о CLMdl1 как 11 моделей, по одной для каждой силы регуляризации в Lambda.
Определите, насколько хорошо модели обобщаются, построив график средних значений пятикратной ошибки классификации для каждой силы регуляризации. Определите силу регуляризации, которая минимизирует ошибку обобщения по сетке.
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.
Двоичная потеря - это функция класса и оценки классификации, которая определяет, насколько хорошо двоичный ученик классифицирует наблюдение в классе.
Предположим, что:
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 работает в целом.
Ошибка классификации - это двоичная мера ошибки классификации, имеющая вид
где:
wj - вес для наблюдения j. Программа перенормирует весовые коэффициенты до 1.
ej = 1, если прогнозируемый класс наблюдения j отличается от своего истинного класса, и 0 в противном случае.
Другими словами, ошибка классификации - это доля наблюдений, неправильно классифицированных классификатором.
[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.
Для параллельного выполнения укажите 'Options' аргумент name-value в вызове этой функции и установка 'UseParallel' поле структуры опций для true использование statset.
Например: 'Options',statset('UseParallel',true)
Дополнительные сведения о параллельных вычислениях см. в разделе Запуск функций MATLAB с автоматической параллельной поддержкой (панель инструментов параллельных вычислений).
ClassificationECOC | ClassificationLinear | ClassificationPartitionedLinearECOC | fitcecoc | kfoldPredict | loss | statset
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.