Компактная многоклассовая модель для машин опорных векторов (SVM) и других классификаторов
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
- Бинарные веса учащихсяДвоичные веса учащихся, заданные как числовой вектор-строка. Длина LearnerWeights
равно количеству двоичных учащихся (length(Mdl.BinaryLearners)
).
LearnerWeights(j)
- сумма весов наблюдений, двоичных учащихся j
использует, чтобы обучить его классификатор.
Программное обеспечение использует LearnerWeights
для соответствия апостериорным вероятностям путем минимизации расхождения Куллбека-Лейблера. Программа игнорирует LearnerWeights
когда он использует квадратичный метод программирования оценки апостериорных вероятностей.
Типы данных: double
| single
CategoricalPredictors
- Категориальные индексы предиктора[]
Категориальные индексы предиктора, заданные как вектор положительных целых чисел. Принимая, что данные предиктора содержат наблюдения в строках, CategoricalPredictors
содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не является категориальным, то это свойство пустое ([]
).
Типы данных: single
| double
ClassNames
- Уникальные метки классовУникальные метки классов, используемые в обучении, заданные как категориальный или символьный массив, логический или числовой вектор или массив ячеек векторов символов. ClassNames
имеет тот совпадающий тип данных, что и метки классов Y
. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
ClassNames
также определяет порядок классов.
Типы данных: categorical
| char
| logical
| single
| double
| cell
Cost
- Расходы на неправильную классификациюЭто свойство доступно только для чтения.
Затраты на неправильную классификацию, заданные как квадратная числовая матрица. Cost
имеет K строки и столбцы, где K количество классов.
Cost(i,j)
- стоимость классификации точки в класс j
если его класс true i
. Порядок строк и столбцов Cost
соответствует порядку классов в ClassNames
.
fitcecoc
включает расходы на неправильную классификацию по-разному среди различных типов двоичных учащихся.
Типы данных: double
PredictorNames
- Имена предикторовИмена предиктора в порядке их внешнего вида в данных предиктора, заданные как массив ячеек из векторов символов. Длина PredictorNames
равен количеству переменных в обучающих данных X
или Tbl
используется в качестве переменных.
Типы данных: cell
ExpandedPredictorNames
- Расширенные имена предикторовРасширенные имена предикторов, заданные как массив ячеек из векторов символов.
Если модель использует кодировку для категориальных переменных, то ExpandedPredictorNames
включает имена, которые описывают расширенные переменные. В противном случае ExpandedPredictorNames
то же, что и PredictorNames
.
Типы данных: cell
Prior
- Вероятности предыдущего классаЭто свойство доступно только для чтения.
Вероятности предыдущего класса, заданные как числовой вектор. Prior
имеет столько элементов, сколько количество классов в ClassNames
, и порядок элементов соответствует порядку классов в ClassNames
.
fitcecoc
включает расходы на неправильную классификацию по-разному среди различных типов двоичных учащихся.
Типы данных: 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' | 2 x – 1 |
'symmetricismax' | Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1 |
'symmetriclogit' | 2/(1 + e–x) – 1 |
Для MATLAB® function или функция, которую вы задаете, вводите указатель на функцию.
Mdl.ScoreTransform = @function;
function
необходимо принять матрицу (исходные счета) и вернуть матрицу того же размера (преобразованные счета).
Типы данных: char
| function_handle
compareHoldout | Сравните точности двух классификационных моделей с помощью новых данных |
discardSupportVectors | Сбросьте векторы поддержки линейных двоичных учащихся SVM в модели ECOC |
edge | Классификационное ребро для многоклассовой модели выходных кодов с коррекцией ошибок (ECOC) |
lime | Локальные интерпретируемые модели-агностические объяснения (LIME) |
loss | Классификационные потери для многоклассовой модели выходных кодов с коррекцией ошибок (ECOC) |
margin | Классификационные поля для многоклассовой модели выходных кодов с коррекцией ошибок (ECOC) |
partialDependence | Вычисление частичной зависимости |
plotPartialDependence | Создайте график частичной зависимости (PDP) и отдельные графики условного ожидания (ICE) |
predict | Классифицируйте наблюдения с помощью многоклассовой модели выходных кодов с коррекцией ошибок (ECOC) |
shapley | Значения Shapley |
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 = 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 15116 classreg.learning.classif.CompactClassificationECOC Mdl 1x1 28357 ClassificationECOC
Полная модель ECOC (Mdl
) примерно в два раза превышает размер компактной модели ECOC (CompactMdl
).
Чтобы эффективно пометить новые наблюдения, можно удалить Mdl
из рабочей области MATLAB ®, а затем передайте CompactMdl
и новые значения предиктора, чтобы predict
.
Обучите и перекрестная проверка классификатора ECOC с помощью различных двоичных учащихся и проекта кодирования «один от всех».
Загрузите набор данных радужки Фишера. Задайте данные предиктора X
и данные отклика Y
. Определите имена классов и количество классов.
load fisheriris X = meas; Y = species; classNames = unique(species(~strcmp(species,''))) % Remove empty classes
classNames = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
K = numel(classNames) % Number of classes
K = 3
Можно использовать classNames
для определения порядка классов во время обучения.
Для проекта кодирования один от всех, этот пример имеет K
= 3 двоичных ученика. Задайте шаблоны для двоичных учащихся так, чтобы:
Двоичный ученик 1 и 2 являются наивными классификаторами Байеса. По умолчанию каждый предиктор является условно, обычно распределенным, учитывая его метку.
Двоичный ученик 3 является классификатором SVM. Задайте, чтобы использовать Гауссово ядро.
rng(1); % For reproducibility tNB = templateNaiveBayes(); tSVM = templateSVM('KernelFunction','gaussian'); tLearners = {tNB tNB tSVM};
tNB
и tSVM
являются объектами шаблона для наивного обучения Байеса и SVM, соответственно. Объекты указывают, какие опции использовать во время обучения. Большинство их свойств пусты, за исключением свойств, заданных аргументами пары "имя-значение". Во время обучения программное обеспечение заполняет пустые свойства их значениями по умолчанию.
Обучите и перекрестная проверка классификатора ECOC с помощью двоичных шаблонов учащихся и проекта кодирования «один от всех». Задайте порядок классов. По умолчанию наивные классификаторы Байеса используют апостериорные вероятности как счета, в то время как классификаторы SVM используют расстояния от контура принятия решения. Поэтому, чтобы агрегировать двоичных учащихся, вы должны задать, чтобы соответствовать апостериорным вероятностям.
CVMdl = fitcecoc(X,Y,'ClassNames',classNames,'CrossVal','on',... 'Learners',tLearners,'FitPosterior',true);
CVMdl
является ClassificationPartitionedECOC
перекрестно-проверенная модель. По умолчанию программное обеспечение реализует 10-кратную перекрестную валидацию. Счета через двоичных учащихся имеют ту же форму (то есть являются апостериорными вероятностями), поэтому программное обеспечение может правильно агрегировать результаты двоичных классификаций.
Осмотрите один из обученных складок с помощью записи через точку.
CVMdl.Trained{1}
ans = 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 = CompactClassificationSVM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [-1 1] ScoreTransform: '@(S)sigmoid(S,-4.016735e+00,-3.243061e-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 является элементом матричного < reservedrangesplaceholder0 > проекта кодирования.
По умолчанию и для эффективности, 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] Фюрнкранц, Йоханнес. Round Robin Classification (неопр.) (недоступная ссылка). Journal of Машинное Обучение Research, Vol. 2, 2002, pp. 721-747.
[2] Эскалера, С., О. Пужоль, и П. Радева. «Разделяемость троичных кодов для разреженных проектов выходных кодов с исправлением ошибок». Pattern Recognition Letters, Vol. 30, Issue 3, 2009, pp. 285-297.
Указания и ограничения по применению:
Когда вы обучаете модель ECOC при помощи fitcecoc
, применяются следующие ограничения.
Вы не можете подгонять апостериорные вероятности при помощи 'FitPosterior'
аргумент пары "имя-значение".
Все двоичные ученики должны быть либо классификаторами SVM, либо линейными классификационными моделями. Для 'Learners'
Аргумент пары "имя-значение" можно задать:
'svm'
или 'linear'
Объект шаблона SVM или массив ячеек таких объектов (см. templateSVM
)
Объект шаблона модели линейной классификации или массив ячеек таких объектов (см. templateLinear
)
Когда вы генерируете код с помощью конфигуратора кодера для predict
и update
следующие дополнительные ограничения применяются к двоичным ученикам.
Если вы используете массив ячеек из объектов шаблона SVM, значение 'Standardize'
для учащихся SVM должны быть последовательными. Для примера, если вы задаете 'Standardize',true
для одного учащегося SVM необходимо задать одно и то же значение для всех учащихся SVM.
Если вы используете массив ячеек из объектов шаблона SVM, и используете одного учащегося SVM с линейным ядром ('KernelFunction','linear'
) и другой с другим типом функции ядра, тогда необходимо указать
для учащегося с линейным ядром.'SaveSupportVectors'
Правда
Для получения дополнительной информации смотрите ClassificationECOCCoderConfigurer
. Для получения информации об аргументах пары "имя-значение", которые вы не можете изменить при переобучении модели, см. Раздел « Советы».
Ограничения генерации кода для классификаторов SVM и линейных моделей классификации также применяются к классификаторам ECOC в зависимости от выбора двоичных учащихся. Для получения дополнительной информации смотрите Генерация кода CompactClassificationSVM
класс и генерация кода ClassificationLinear
класс.
Для получения дополнительной информации смотрите Введение в генерацию кода.
ClassificationECOC
| ClassificationPartitionedECOC
| ClassificationPartitionedKernelECOC
| ClassificationPartitionedLinearECOC
| compact
| fitcecoc
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.