Край классификации для наблюдений, не используемых для обучения
возвращает границы классификации с перекрестной проверкой, полученные с помощью модели выходных кодов с перекрестной проверкой с исправлением ошибок (ECOC), состоящей из моделей линейной классификации e = kfoldEdge(CVMdl)CVMdl. То есть, для каждого раза, kfoldEdge оценивает край классификации для наблюдений, который он выдает, когда он тренируется с использованием всех других наблюдений.
e содержит край классификации для каждой силы регуляризации в моделях линейной классификации, которые содержат CVMdl.
использует дополнительные параметры, указанные одним или несколькими e = kfoldEdge(CVMdl,Name,Value)Name,Value аргументы пары. Например, укажите схему декодирования, которая будет использоваться для вычисления кромки, или уровень детализации.
CVMdl - Перекрестная проверка модели ECOC, состоящей из моделей линейной классификацииClassificationPartitionedLinearECOC объект моделиПерекрестно проверенная модель ECOC, состоящая из линейных классификационных моделей, указанных как ClassificationPartitionedLinearECOC объект модели. Можно создать ClassificationPartitionedLinearECOC модель с использованием fitcecoc и путем:
Указание любого из аргументов пары перекрестная проверка, имя-значение, например, CrossVal
Установка аргумента пары имя-значение Learners кому 'linear' или шаблон модели линейной классификации, возвращенный templateLinear
Для получения оценок kfoldEdge применяет те же данные, которые используются для перекрестной проверки модели 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
'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
e - Перекрестно проверенные границы классификацииПерекрестно проверенные края классификации, возвращаемые в виде числового скаляра, вектора или матрицы.
Давайте L - количество сильных сторон регуляризации в перекрестно проверенных моделях (то есть L является numel(CVMdl.Trained{1}.BinaryLearners{1}.Lambda)) и F - количество складок (хранящихся в CVMdl.KFold).
Если Mode является 'average', то e является 1-by-L вектор. e( - средний край классификации по всем складкам перекрестно проверенной модели, в которой используется сила регуляризации j)j.
В противном случае e является Fоколо-L матрица. e( является классификационным ребром для гибки i,j)i перекрестной проверенной модели, в которой используется сила регуляризации j.
Загрузите набор данных NLP.
load nlpdataX является разреженной матрицей данных предиктора, и Y является категориальным вектором меток класса.
Для простоты используйте метку «others» для всех наблюдений в Y которые не являются 'simulink', 'dsp', или 'comm'.
Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';Перекрестная проверка многоклассовой модели линейной классификации.
rng(1); % For reproducibility CVMdl = fitcecoc(X,Y,'Learner','linear','CrossVal','on');
CVMdl является ClassificationPartitionedLinearECOC модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Можно изменить количество сгибов с помощью 'KFold' аргумент пары имя-значение.
Оцените среднее значение не складываемых кромок.
e = kfoldEdge(CVMdl)
e = 0.7232
Кроме того, можно получить кромки по складке, указав пару имя-значение. 'Mode','individual' в kfoldEdge.
Одним из способов выбора элемента является сравнение k-образных кромок из нескольких моделей. Исходя исключительно из этого критерия, классификатор с наивысшим ребром является лучшим классификатором.
Загрузите набор данных NLP. Выполните предварительную обработку данных, как в разделе Оценка k-кратного края перекрестной проверки, и сориентируйте данные предиктора таким образом, чтобы наблюдения соответствовали столбцам.
load nlpdata Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others'; X = X';
Создайте два набора данных:
fullX содержит все предикторы.
partX содержит 1/2 предикторов, выбранных случайным образом.
rng(1); % For reproducibility p = size(X,1); % Number of predictors halfPredIdx = randsample(p,ceil(0.5*p)); fullX = X; partX = X(halfPredIdx,:);
Создайте шаблон модели линейной классификации, определяющий оптимизацию целевой функции с помощью SpaRSA.
t = templateLinear('Solver','sparsa');
Перекрестная проверка двух моделей ECOC, состоящих из двоичных моделей линейной классификации: одна использует все предикторы, а другая - половину предикторов. Укажите, что наблюдения соответствуют столбцам.
CVMdl = fitcecoc(fullX,Y,'Learners',t,'CrossVal','on',... 'ObservationsIn','columns'); PCVMdl = fitcecoc(partX,Y,'Learners',t,'CrossVal','on',... 'ObservationsIn','columns');
CVMdl и PCVMdl являются ClassificationPartitionedLinearECOC модели.
Оцените k-кратное ребро для каждого классификатора.
fullEdge = kfoldEdge(CVMdl)
fullEdge = 0.3090
partEdge = kfoldEdge(PCVMdl)
partEdge = 0.2617
Основываясь на k-кратных ребрах, классификатор, который использует все предикторы, является лучшей моделью.
Чтобы определить хорошую силу лассо-штрафа для модели линейной классификации, которая использует учащегося логистической регрессии, сравните k-кратные края.
Загрузите набор данных NLP. Выполните предварительную обработку данных, как в разделе Выбор элемента с помощью k-образных кромок.
load nlpdata Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others'; X = X';
Создайте набор из 8 логарифмически разнесенных уровней регуляции от до .
Lambda = logspace(-8,1,8);
Создайте шаблон модели линейной классификации, который определяет использование логистической регрессии с штрафом за лассо, использование каждой из сильных сторон регуляризации, оптимизацию целевой функции с помощью SpaRSA и уменьшение допуска для градиента целевой функции до 1e-8.
t = templateLinear('Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8);
Перекрестная проверка модели ECOC, состоящей из двоичных линейных классификационных моделей, с использованием пятикратной перекрестной проверки и
rng(10) % For reproducibility CVMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns','KFold',5)
CVMdl =
ClassificationPartitionedLinearECOC
CrossValidatedModel: 'LinearECOC'
ResponseName: 'Y'
NumObservations: 31572
KFold: 5
Partition: [1x1 cvpartition]
ClassNames: [comm dsp simulink others]
ScoreTransform: 'none'
Properties, Methods
CVMdl является ClassificationPartitionedLinearECOC модель.
Оцените края для каждой складки и силы регуляризации.
eFolds = kfoldEdge(CVMdl,'Mode','individual')
eFolds = 5×8
0.5515 0.5513 0.5516 0.5499 0.4939 0.2945 0.1033 0.0853
0.5252 0.5254 0.5259 0.5263 0.4769 0.2947 0.1058 0.0866
0.5269 0.5279 0.5297 0.5293 0.4771 0.2899 0.1031 0.0867
0.5397 0.5407 0.5410 0.5372 0.4810 0.2906 0.1016 0.0856
0.5506 0.5557 0.5584 0.5581 0.4942 0.2936 0.1020 0.0849
eFolds представляет собой матрицу рёбер 5 на 8. Строки соответствуют складкам, а столбцы соответствуют прочностям регуляризации в Lambda. Вы можете использовать eFolds для выявления плохо работающих складок, то есть необычно низких кромок.
Оцените среднюю кромку по всем складкам для каждой силы регуляризации.
e = kfoldEdge(CVMdl)
e = 1×8
0.5388 0.5402 0.5413 0.5402 0.4846 0.2927 0.1031 0.0858
Определите, насколько хорошо модели обобщаются, построив график средних значений 5-кратного края для каждой силы регуляризации. Определите силу регуляризации, которая максимизирует пятикратную кромку по сетке.
figure plot(log10(Lambda),log10(e),'-o') [~, maxEIdx] = max(e); maxLambda = Lambda(maxEIdx); hold on plot(log10(maxLambda),log10(e(maxEIdx)),'ro') ylabel('log_{10} 5-fold edge') xlabel('log_{10} Lambda') legend('Edge','Max edge') hold off

Несколько значений Lambda получить такие же высокие края. Более высокие значения силы регуляризации приводят к переменной разреженности предиктора, которая является хорошим качеством классификатора.
Выберите силу регуляризации, которая возникает непосредственно перед тем, как край начнет уменьшаться.
LambdaFinal = Lambda(4);
Обучение модели ECOC, состоящей из модели линейной классификации, с использованием всего набора данных и определение силы регуляризации LambdaFinal.
t = templateLinear('Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',LambdaFinal,'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 работает в целом.
Край классификации - это средневзвешенное значение полей классификации.
Один из способов выбора из нескольких классификаторов, например, выбор элемента, - выбор классификатора, который дает наибольший край.
Запас классификации для каждого наблюдения представляет собой разницу между отрицательными потерями для истинного класса и максимальными отрицательными потерями среди ложных классов. Если поля находятся в одной шкале, то они служат мерой достоверности классификации. Среди нескольких классификаторов лучше те, которые дают большую маржу.
[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 | edge | fitcecoc | kfoldMargin | kfoldPredict | statset
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.