Край классификации для перекрестно проверенной модели ECOC
возвращает границу классификации, полученную перекрестно проверенной моделью ECOC (edge = kfoldEdge(CVMdl)ClassificationPartitionedECOC) CVMdl. Для каждого раза, kfoldEdge вычисляет край классификации для кратных по валидации наблюдений с использованием модели ECOC, обученной на кратных по обучению наблюдениях. CVMdl.X содержит оба набора наблюдений.
возвращает край классификации с дополнительными параметрами, заданными одним или несколькими аргументами пары имя-значение. Например, укажите количество складок, схему декодирования или уровень детализации.edge = kfoldEdge(CVMdl,Name,Value)
Загрузите набор данных радужки Фишера. Укажите данные предиктора X, данные ответа Yи порядок классов в Y.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); rng(1); % For reproducibility
Подготовка и перекрестная проверка модели ECOC с использованием двоичных классификаторов вспомогательных векторных машин (SVM). Стандартизируйте данные предиктора с помощью шаблона SVM и укажите порядок классов.
t = templateSVM('Standardize',1); CVMdl = fitcecoc(X,Y,'CrossVal','on','Learners',t,'ClassNames',classOrder);
CVMdl является ClassificationPartitionedECOC модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Можно указать другое количество сгибов с помощью 'KFold' аргумент пары имя-значение.
Оцените среднее значение ребер.
edge = kfoldEdge(CVMdl)
edge = 0.4825
Кроме того, можно получить кромки по складке, указав пару имя-значение. 'Mode','individual' в kfoldEdge.
Край классификации является относительной мерой качества классификатора. Чтобы определить, какие складки работают плохо, отобразите кромки для каждой складки.
Загрузите набор данных радужки Фишера. Укажите данные предиктора X, данные ответа Yи порядок классов в Y.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); rng(1); % For reproducibility
Обучение модели ECOC с использованием двоичных классификаторов SVM. Используйте 8-кратную перекрестную проверку, стандартизируйте предикторы с помощью шаблона SVM и укажите порядок классов.
t = templateSVM('Standardize',1); CVMdl = fitcecoc(X,Y,'KFold',8,'Learners',t,'ClassNames',classOrder);
Оцените край классификации для каждой складки.
edges = kfoldEdge(CVMdl,'Mode','individual')
edges = 8×1
0.4791
0.4872
0.4260
0.5300
0.5064
0.4576
0.4860
0.4687
Края имеют сходные величины по складкам. Складки, которые работают плохо, имеют небольшие края относительно других складок.
Чтобы вернуть среднее ребро классификации по складкам, которые работают хорошо, укажите 'Folds' аргумент пары имя-значение.
Край классификатора измеряет среднее значение полей классификатора. Одним из способов выбора элемента является сравнение кромок перекрестной проверки из нескольких моделей. Исходя исключительно из этого критерия, классификатор с наибольшим ребром является лучшим классификатором.
Загрузите набор данных радужки Фишера. Укажите данные предиктора X, данные ответа Yи порядок классов в Y.
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
Определите следующие два набора данных.
fullX содержит все предикторы.
partX содержит размеры лепестков.
fullX = X; partX = X(:,3:4);
Для каждого набора предикторов обучайте и перекрестно проверяйте модель ECOC с использованием двоичных классификаторов SVM. Стандартизируйте предикторы с помощью шаблона SVM и укажите порядок классов.
t = templateSVM('Standardize',1); CVMdl = fitcecoc(fullX,Y,'CrossVal','on','Learners',t,... 'ClassNames',classOrder); PCVMdl = fitcecoc(partX,Y,'CrossVal','on','Learners',t,... 'ClassNames',classOrder);
CVMdl и PCVMdl являются ClassificationPartitionedECOC модели. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку.
Оцените край для каждого классификатора.
fullEdge = kfoldEdge(CVMdl)
fullEdge = 0.4825
partEdge = kfoldEdge(PCVMdl)
partEdge = 0.4951
Две модели имеют сопоставимые края.
CVMdl - Перекрестная проверка модели ECOCClassificationPartitionedECOC модельМодель ECOC с перекрестной проверкой, указанная как ClassificationPartitionedECOC модель. Можно создать ClassificationPartitionedECOC модель двумя способами:
Пройти обученную модель ECOC (ClassificationECOCКому crossval.
Обучение модели ECOC с помощью fitcecoc и укажите любой из этих аргументов пары имя-значение перекрестной проверки: 'CrossVal', 'CVPartition', 'Holdout', 'KFold', или 'Leaveout'.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
kfoldEdge(CVMdl,'BinaryLoss','hinge') определяет 'hinge' в качестве двоичной функции потери учащегося.'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'
'Folds' - Кратные индексы для прогнозирования1:CVMdl.KFold (по умолчанию) | числовой вектор положительных целых чиселИндексы складки для прогнозирования, указанные как пара, разделенная запятыми, состоящая из 'Folds' и числовой вектор положительных целых чисел. Элементы Folds должно находиться в диапазоне от 1 кому CVMdl.KFold.
Программное обеспечение использует только складки, указанные в Folds для прогнозирования.
Пример: 'Folds',[1 4 10]
Типы данных: single | double
'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
edge - Край классификацииКрай классификации, возвращаемый как числовой скалярный или числовой вектор столбца.
Если Mode является 'average', то edge - средний край классификации по всем складкам. В противном случае edge является вектором числового столбца k-by-1, содержащим классификационное ребро для каждой складки, где k - количество складок.
Край классификации - это средневзвешенное значение полей классификации.
Один из способов выбора из нескольких классификаторов, например, выбор элемента, - выбор классификатора, который дает наибольший край.
Запас классификации для каждого наблюдения представляет собой разницу между отрицательными потерями для истинного класса и максимальными отрицательными потерями среди ложных классов. Если поля находятся в одной шкале, то они служат мерой достоверности классификации. Среди нескольких классификаторов лучше те, которые дают большую маржу.
Двоичная потеря - это функция класса и оценки классификации, которая определяет, насколько хорошо двоичный ученик классифицирует наблюдение в классе.
Предположим, что:
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 | ClassificationPartitionedECOC | edge | fitcecoc | kfoldMargin | kfoldPredict | statset
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.