Компактная модель мультикласса для машин вектора поддержки (SVMs) и других классификаторов
CompactClassificationECOC
является компактной версией модели выходных кодов с коррекцией ошибок (ECOC) мультикласса. Компактный классификатор не включает данные, используемые для обучения мультикласс модель ECOC. Поэтому вы не можете выполнить определенные задачи, такие как перекрестная проверка, с помощью компактного классификатора. Используйте компактный мультикласс модель ECOC для задач, таких как классификация новых данных (predict
).
Можно создать модель CompactClassificationECOC
двумя способами:
Создайте компактную модель ECOC из обученной модели ClassificationECOC
при помощи функции объекта compact
.
Создайте компактную модель ECOC при помощи функции fitcecoc
и определения аргумента пары "имя-значение" 'Learners'
как 'linear'
, 'kernel'
, объект templateLinear
или templateKernel
или массив ячеек таких объектов.
После того, как вы создадите объект модели CompactClassificationECOC
, можно использовать запись через точку, чтобы получить доступ к ее свойствам. Для примера смотрите Train и перекрестный Подтвердите Классификатор ECOC.
BinaryLearners
— Обученные бинарные ученикиОбученные бинарные ученики, заданные как вектор ячейки объектов модели. Количество бинарных учеников зависит от количества классов в Y
и проекте кодирования.
Программное обеспечение обучает BinaryLearner{j}
согласно бинарной проблеме, заданной CodingMatrix
(:,j)
. Например, для изучения мультикласса с помощью учеников SVM, каждый элемент BinaryLearners
является классификатором CompactClassificationSVM
.
Типы данных: cell
BinaryLoss
— Бинарная функция потерь ученика'binodeviance'
| 'exponential'
| 'hamming'
| 'hinge'
| 'linear'
| 'logit'
| 'quadratic'
Бинарная функция потерь ученика, заданная как вектор символов, представляющий имя функции потерь.
Если вы обучаете использующих бинарных учеников, которые используют различные функции потерь, то программное обеспечение устанавливает BinaryLoss
на 'hamming'
. Чтобы потенциально увеличить точность, задайте бинарную функцию потерь кроме значения по умолчанию во время прогноза или вычисления потерь при помощи аргумента пары "имя-значение" 'BinaryLoss'
predict
или loss
.
Типы данных: char
CodingMatrix
— Коды присвоения классаКоды присвоения класса для бинарных учеников, заданных как числовая матрица. CodingMatrix
является K-by-L матрица, где K является количеством классов, и L является количеством бинарных учеников.
Элементами CodingMatrix
является –1
, 0
или 1
, и значения соответствуют дихотомическим присвоениям класса. Эта таблица описывает, как ученик j
присваивает наблюдения в классе i
к дихотомическому классу, соответствующему значению CodingMatrix(i,j)
.
Значение | Дихотомическое присвоение класса |
---|---|
–1 | Ученик j присваивает наблюдения в классе i к отрицательному классу. |
0 | Перед обучением ученик j удаляет наблюдения в классе i от набора данных. |
1 | Ученик j присваивает наблюдения в классе i к положительному классу. |
Типы данных: double
| single
| int8
| int16
| int32
| int64
LearnerWeights
— Бинарные веса ученикаБинарные веса ученика, заданные как числовой вектор - строка. Длина LeanerWeights
равна количеству бинарных учеников (length(Mdl.BinaryLearners)
).
LearnerWeights(j)
является суммой весов наблюдения что бинарный ученик использование j
, чтобы обучить его классификатор.
Программное обеспечение использует LearnerWeights
, чтобы соответствовать апостериорным вероятностям путем минимизации расхождения Kullback-Leibler. Программное обеспечение игнорирует LearnerWeights
, когда это использует метод квадратичного программирования оценки апостериорных вероятностей.
Типы данных: double | single
CategoricalPredictors
— Категориальные индексы предиктора[]
Категориальные индексы предиктора, заданные как вектор положительных целых чисел. CategoricalPredictors
содержит индексные значения, соответствующие столбцам данных о предикторе, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пусто ([]
).
Типы данных: single | double
ClassNames
— Уникальные метки классаУникальные метки класса используются в обучении, заданном как категориальное или символьный массив, логический или числовой вектор или массив ячеек из символьных векторов. ClassNames
имеет совпадающий тип данных, когда класс маркирует Y
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
ClassNames
также определяет порядок класса.
Типы данных: categorical
| char
| logical
| single
| double
| cell
Cost
— Затраты MisclassificationЭто свойство доступно только для чтения.
Затраты Misclassification, заданные как квадратная числовая матрица. Cost
имеет строки и столбцы K, где K является количеством классов.
Cost(i,j)
является стоимостью классификации точки в класс j
, если его истинным классом является i
. Порядок строк и столбцов Cost
соответствует порядку классов в ClassNames
.
fitcecoc
включает затраты misclassification по-другому среди различных типов бинарных учеников.
Типы данных: double
ExpandedPredictorNames
— Расширенные имена предиктораРасширенные имена предиктора, заданные как массив ячеек из символьных векторов.
Если образцовое кодирование использования для категориальных переменных, то ExpandedPredictorNames
включает имена, которые описывают расширенные переменные. В противном случае ExpandedPredictorNames
совпадает с PredictorNames
.
PredictorNames
— Имена предиктораПредиктор называет в порядке их внешнего вида в данных о предикторе X
, заданный как массив ячеек из символьных векторов. Длина PredictorNames
равна количеству столбцов в X
.
Типы данных: cell
Prior
— Предшествующие вероятности классаЭто свойство доступно только для чтения.
Предшествующие вероятности класса, заданные как числовой вектор. Prior
имеет столько же элементов сколько количество классов в ClassNames
, и порядок элементов соответствует порядку классов в ClassNames
.
fitcecoc
включает затраты misclassification по-другому среди различных типов бинарных учеников.
Типы данных: double
ResponseName
— Имя переменной откликаИмя переменной отклика, заданное как вектор символов.
Типы данных: char
ScoreTransform
— Выиграйте функцию преобразования, чтобы примениться к предсказанным очкам'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| 'none'
| указатель на функцию |...Выиграйте функцию преобразования, чтобы примениться к предсказанным очкам, заданным как имя функции или указатель на функцию.
Изменить функцию преобразования счета на function
, например, запись через точку использования.
Для встроенной функции введите этот код и замените function
на значение в таблице.
Mdl.ScoreTransform = 'function';
Значение | Описание |
---|---|
'doublelogit' | 1/(1 + e –2x) |
'invlogit' | журнал (x / (1 – x)) |
'ismax' | Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к 0 |
'logit' | 1/(1 + e –x) |
'none' или 'identity' | x (никакое преобразование) |
'sign' | – 1 для x <0 0 для x = 0 1 для x> 0 |
'symmetric' | 2x – 1 |
'symmetricismax' | Устанавливает счет к классу с самым большим счетом к 1 и устанавливает музыку ко всем другим классам к –1 |
'symmetriclogit' | 2/(1 + e –x) – 1 |
Для функции MATLAB® или функции, которую вы задаете, введите ее указатель на функцию.
Mdl.ScoreTransform = @function;
function
должен принять матрицу (исходные очки) и возвратить матрицу, одного размера (преобразованные очки).
Типы данных: char
| function_handle
compareHoldout | Сравните точность двух моделей классификации с помощью новых данных |
discardSupportVectors | Отбросьте векторы поддержки линейных бинарных учеников SVM в модели ECOC |
edge | Ребро классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса |
loss | Потеря классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса |
margin | Поля классификации для модели выходных кодов с коррекцией ошибок (ECOC) мультикласса |
predict | Классифицируйте наблюдения с помощью модели выходных кодов с коррекцией ошибок (ECOC) мультикласса |
selectModels | Выберите подмножество мультикласса модели ECOC, состоявшие из бинарных учеников ClassificationLinear |
update | Обновите параметры модели для генерации кода |
Уменьшайте размер полной модели ECOC путем удаления данных тренировки. Полные модели ECOC (модели ClassificationECOC
) содержат данные тренировки. Чтобы повысить эффективность, используйте меньший классификатор.
Загрузите ирисовый набор данных Фишера. Задайте данные о предикторе X
, данные об ответе Y
и порядок классов в Y
.
load fisheriris
X = meas;
Y = categorical(species);
classOrder = unique(Y);
Обучите модель ECOC с помощью двоичных классификаторов SVM. Стандартизируйте данные о предикторе с помощью шаблона SVM t
и задайте порядок классов. Во время обучения программное обеспечение использует значения по умолчанию для пустых опций в t
.
t = templateSVM('Standardize',true); Mdl = fitcecoc(X,Y,'Learners',t,'ClassNames',classOrder);
Mdl
является моделью ClassificationECOC
.
Уменьшайте размер модели ECOC.
CompactMdl = compact(Mdl)
CompactMdl = classreg.learning.classif.CompactClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [setosa versicolor virginica] ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingMatrix: [3x3 double] Properties, Methods
CompactMdl
является моделью CompactClassificationECOC
. CompactMdl
не хранит все свойства, которые хранит Mdl
. В частности, это не хранит данные тренировки.
Отобразите объем памяти каждый классификатор использование.
whos('CompactMdl','Mdl')
Name Size Bytes Class Attributes CompactMdl 1x1 14364 classreg.learning.classif.CompactClassificationECOC Mdl 1x1 27439 ClassificationECOC
Полная модель ECOC (Mdl
) приблизительно удваивает размер компактной модели ECOC (CompactMdl
).
Чтобы маркировать новые наблюдения эффективно, можно удалить Mdl
из MATLAB® Workspace, и затем передать CompactMdl
и новые значения предиктора к predict
.
Обучите и перекрестный подтвердите классификатор ECOC с помощью различных бинарных учеников и one-all, кодирующего проект.
Загрузите ирисовый набор данных Фишера. Задайте данные о предикторе X
и данные об ответе Y
. Определите имена классов и количество классов.
load fisheriris X = meas; Y = species; classNames = unique(species(~strcmp(species,''))) % Remove empty classes
classNames = 3x1 cell array
{'setosa' }
{'versicolor'}
{'virginica' }
K = numel(classNames) % Number of classes
K = 3
Можно использовать classNames
, чтобы задать порядок классов во время обучения.
Для one-all, кодирующего проект, этот пример имеет K
= 3 бинарных ученика. Задайте шаблоны для бинарных учеников, таким образом что:
Бинарный ученик 1 и 2 является наивными классификаторами Байеса. По умолчанию каждый предиктор условно, нормально распределен, учитывая свою метку.
Бинарный ученик 3 является классификатором SVM. Задайте, чтобы использовать Гауссово ядро.
rng(1); % For reproducibility tNB = templateNaiveBayes(); tSVM = templateSVM('KernelFunction','gaussian'); tLearners = {tNB tNB tSVM};
tNB
и tSVM
являются объектами шаблона для наивного Бейеса и изучения SVM, соответственно. Объекты указывают который опции использовать во время обучения. Большинство их свойств пусто, кроме заданных аргументами пары "имя-значение". Во время обучения программное обеспечение заполняет пустые свойства с их значениями по умолчанию.
Обучите и перекрестный подтвердите классификатор ECOC с помощью бинарных шаблонов ученика и one-all, кодирующего проект. Задайте порядок классов. По умолчанию наивные классификаторы Байеса используют апостериорные вероятности в качестве очков, тогда как классификаторы SVM используют расстояния от контура решения. Поэтому, чтобы агрегировать бинарных учеников, необходимо задать, чтобы соответствовать апостериорным вероятностям.
CVMdl = fitcecoc(X,Y,'ClassNames',classNames,'CrossVal','on',... 'Learners',tLearners,'FitPosterior',true);
CVMdl
является ClassificationPartitionedECOC
перекрестная подтвержденная модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную проверку. Очки через бинарных учеников имеют ту же форму (то есть, они - апостериорные вероятности), таким образом, программное обеспечение может агрегировать результаты бинарных классификаций правильно.
Осмотрите один из обученных сгибов с помощью записи через точку.
CVMdl.Trained{1}
ans = classreg.learning.classif.CompactClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingMatrix: [3x3 double] Properties, Methods
Каждый сгиб является моделью CompactClassificationECOC
, обученной на 90% данных.
Можно получить доступ к результатам бинарных учеников, использующих индексация ячейки и запись через точку. Отобразите обученный классификатор SVM (третий бинарный ученик) в первом сгибе.
CVMdl.Trained{1}.BinaryLearners{3}
ans = classreg.learning.classif.CompactClassificationSVM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [-1 1] ScoreTransform: '@(S)sigmoid(S,-4.016735e+00,-3.243073e-01)' Alpha: [33x1 double] Bias: -0.1345 KernelParameters: [1x1 struct] SupportVectors: [33x4 double] SupportVectorLabels: [33x1 double] Properties, Methods
Оцените ошибку обобщения.
genError = kfoldLoss(CVMdl)
genError = 0.0333
В среднем ошибка обобщения составляет приблизительно 3%.
Для данного количества классов K программное обеспечение генерирует случайные матрицы проекта кодирования можно следующим образом.
Программное обеспечение генерирует одну из этих матриц:
Плотный случайный — программное обеспечение присваивает 1 или –1 с равной вероятностью к каждому элементу K-by-Ld кодирующий матрицу проекта, где .
Разреженный случайный — программное обеспечение присваивает 1 каждому элементу K-by-Ls кодирующий матрицу проекта с вероятностью 0.25, –1 с вероятностью 0.25, и 0 с вероятностью 0.5, где .
Если столбец не содержит по крайней мере один 1 и по крайней мере один –1, то программное обеспечение удаляет тот столбец.
Для отличных столбцов u и v, если u = v или u = –v, то программное обеспечение удаляет v из матрицы проекта кодирования.
Программное обеспечение случайным образом генерирует 10 000 матриц по умолчанию и сохраняет матрицу с самым большим, минимальным, попарным расстоянием строки на основе меры Хэмминга ([4]) данный
где mkjl является элементом кодирования матрицы проекта j.
По умолчанию и для эффективности, fitcecoc
освобождает Alpha
, SupportVectorLabels
и свойства SupportVectors
для всех линейных бинарных учеников SVM. fitcecoc
перечисляет Beta
, а не Alpha
, в образцовом отображении.
Чтобы сохранить Alpha
, SupportVectorLabels
и SupportVectors
, передают линейный шаблон SVM, который задает векторы поддержки хранения к fitcecoc
. Например, введите:
t = templateSVM('SaveSupportVectors',true) Mdl = fitcecoc(X,Y,'Learners',t);
Можно удалить векторы поддержки и связанные значения путем передачи получившейся модели ClassificationECOC
discardSupportVectors
.
[1] Fürnkranz, Иоганнес. “Круговая Классификация”. Журнал Исследования Машинного обучения, Издания 2, 2002, стр 721–747.
[2] Escalera, S., О. Пуджол и П. Радева. “Отделимость троичных кодов для разреженных проектов выходных кодов с коррекцией ошибок”. Буквы Распознавания образов, Издание 30, Выпуск 3, 2009, стр 285–297.
Указания и ограничения по применению:
Когда вы обучаете модель ECOC при помощи fitcecoc
, следующие ограничения применяются.
Вы не можете соответствовать апостериорным вероятностям при помощи аргумента пары "имя-значение" 'FitPosterior'
.
Все бинарные ученики должны быть или классификаторами SVM или линейными моделями классификации. Для аргумента пары "имя-значение" 'Learners'
можно задать:
'svm'
или 'linear'
Объект шаблона SVM или массив ячеек таких объектов (см. templateSVM
),
Линейный объект шаблона модели классификации или массив ячеек таких объектов (см. templateLinear
),
Когда вы генерируете код с помощью кодера configurer для predict
и update
, следующие дополнительные ограничения применяются к бинарным ученикам.
Необходимо использовать учеников SVM.
Если вы используете массив ячеек объектов шаблона SVM, значение 'Standardize'
для учеников SVM должно быть сопоставимым. Например, если вы задаете 'Standardize',true
для одного ученика SVM, необходимо задать то же значение для всех учеников SVM.
Если вы используете массив ячеек объектов шаблона SVM, и вы используете одного ученика SVM с линейным ядром ('KernelFunction','linear'
) и другой с другим типом функции ядра, то необходимо задать
для ученика с линейным ядром.'SaveSupportVectors','on'
Для получения дополнительной информации смотрите ClassificationECOCCoderConfigurer
.
Ограничения генерации кода для классификаторов SVM и линейных моделей классификации также применяются к классификаторам ECOC, в зависимости от выбора бинарных учеников. Для получения дополнительной информации смотрите Генерацию кода класса CompactClassificationSVM
и Генерацию кода класса ClassificationLinear
.
Для получения дополнительной информации смотрите Введение в Генерацию кода.
ClassificationECOC
| ClassificationPartitionedECOC
| ClassificationPartitionedKernelECOC
| ClassificationPartitionedLinearECOC
| compact
| fitcecoc
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.