Найдите ошибку классификации для классификатора машины опорных векторов (SVM)
возвращает ошибку классификации (см. Потерю Классификации), скалярное представление как хорошо обученный классификатор машины опорных векторов (SVM) (L
= loss(SVMModel
,TBL
,ResponseVarName
)SVMModel
) классифицирует данные о предикторе на таблицу TBL
по сравнению с истинным классом помечает в TBL.ResponseVarName
.
loss
нормирует вероятности класса в TBL.ResponseVarName
к предшествующим вероятностям класса, что fitcsvm
используемый в обучении, сохраненном в Prior
свойство SVMModel
.
Потеря классификации (L
) обобщение или качественная мера по перезамене. Его интерпретация зависит от функции потерь и схемы взвешивания, но в целом лучшие классификаторы дают к меньшим значениям классификации потерь.
задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Например, можно задать функцию потерь и веса классификации.L
= loss(___,Name,Value
)
Загрузите ionosphere
набор данных.
load ionosphere rng(1); % For reproducibility
Обучите классификатор SVM. Задайте 15%-ю выборку затяжки для тестирования, стандартизируйте данные и задайте тот 'g'
положительный класс.
CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},... 'Standardize',true); CompactSVMModel = CVSVMModel.Trained{1}; % Extract the trained, compact classifier testInds = test(CVSVMModel.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:);
CVSVMModel
ClassificationPartitionedModel
классификатор. Это содержит свойство Trained
, который является массивом ячеек 1 на 1, содержащим CompactClassificationSVM
классификатор, что программное обеспечение обучило использование набора обучающих данных.
Определите, как хорошо алгоритм делает вывод путем оценки тестовой ошибки классификации выборок.
L = loss(CompactSVMModel,XTest,YTest)
L = 0.0787
Классификатор SVM неправильно классифицирует приблизительно 8% тестовой выборки.
Загрузите ionosphere
набор данных.
load ionosphere rng(1); % For reproducibility
Обучите классификатор SVM. Задайте 15%-ю выборку затяжки для тестирования, стандартизируйте данные и задайте тот 'g'
положительный класс.
CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},... 'Standardize',true); CompactSVMModel = CVSVMModel.Trained{1}; % Extract the trained, compact classifier testInds = test(CVSVMModel.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:);
CVSVMModel
ClassificationPartitionedModel
классификатор. Это содержит свойство Trained
, который является массивом ячеек 1 на 1, содержащим CompactClassificationSVM
классификатор, что программное обеспечение обучило использование набора обучающих данных.
Определите, как хорошо алгоритм делает вывод путем оценки тестовой демонстрационной потери стержня.
L = loss(CompactSVMModel,XTest,YTest,'LossFun','hinge')
L = 0.2998
Потеря стержня - приблизительно 0,3. Классификаторы с потерями стержня близко к 0 предпочтены.
SVMModel
— Модель классификации SVMClassificationSVM
объект модели | CompactClassificationSVM
объект моделиМодель классификации SVM, заданная как ClassificationSVM
объект модели или CompactClassificationSVM
объект модели возвращен fitcsvm
или compact
, соответственно.
TBL
— Выборочные данныеВыборочные данные, заданные как таблица. Каждая строка TBL
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, TBL
может содержать дополнительные столбцы для весов наблюдения и переменной отклика. TBL
должен содержать все предикторы, используемые, чтобы обучить SVMModel
. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.
Если TBL
содержит переменную отклика, используемую, чтобы обучить SVMModel
, затем вы не должны задавать ResponseVarName
или Y
.
Если вы обучили SVMModel
использование выборочных данных, содержавшихся в таблице, затем входные данные для loss
должен также быть в таблице.
Если вы устанавливаете 'Standardize',true
в fitcsvm
когда учебный SVMModel
, затем программное обеспечение стандартизирует столбцы данных о предикторе с помощью соответствующих средних значений в SVMModel.Mu
и стандартные отклонения в SVMModel.Sigma
.
Типы данных: table
ResponseVarName
— Имя переменной откликаTBL
Имя переменной отклика, заданное как имя переменной в TBL
.
Необходимо задать ResponseVarName
как вектор символов или скаляр строки. Например, если переменная отклика Y
хранится как TBL.Y
, затем задайте ResponseVarName
как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы TBL
, включая Y
, как предикторы, когда обучение модель.
Переменная отклика должна быть категориальным, символом, или массивом строк, логическим или числовым вектором или массивом ячеек из символьных векторов. Если переменная отклика является символьным массивом, то каждый элемент должен соответствовать одной строке массива.
Типы данных: char |
string
X
— Данные о предиктореДанные о предикторе, заданные как числовая матрица.
Каждая строка X
соответствует одному наблюдению (также известный как экземпляр или пример), и каждый столбец соответствует одной переменной (также известный как функцию). Переменные в столбцах X
должен совпасть с переменными, которые обучили SVMModel
классификатор.
Длина Y
и количество строк в X
должно быть равным.
Если вы устанавливаете 'Standardize',true
в fitcsvm
обучать SVMModel
, затем программное обеспечение стандартизирует столбцы X
использование соответствующих средних значений в SVMModel.Mu
и стандартные отклонения в SVMModel.Sigma
.
Типы данных: double |
single
Y
— Метки классаМетки класса, заданные как категориальное, символ, или массив строк, логический или числовой вектор или массив ячеек из символьных векторов. Y
должен совпасть с типом данных SVMModel.ClassNames
. (Программное обеспечение обрабатывает строковые массивы как массивы ячеек из символьных векторов.)
Длина Y
должен равняться количеству строк в TBL
или количество строк в X
.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
loss(SVMModel,TBL,Y,'Weights',W)
взвешивает наблюдения в каждой строке TBL
использование соответствующего веса в каждой строке переменной W
в TBL
.'LossFun'
— Функция потерь'classiferror'
(значение по умолчанию) | 'binodeviance'
| 'exponential'
| 'hinge'
| 'logit'
| 'mincost'
| 'quadratic'
| указатель на функциюФункция потерь, заданная как разделенная запятой пара, состоящая из 'LossFun'
и встроенное имя функции потерь или указатель на функцию.
Эта таблица приводит доступные функции потерь. Задайте тот с помощью его соответствующего вектора символов или представьте скаляр в виде строки.
Значение | Описание |
---|---|
'binodeviance' | Биномиальное отклонение |
'classiferror' | Ошибка классификации |
'exponential' | Экспоненциал |
'hinge' | Стержень |
'logit' | Логистический |
'mincost' | Минимальный ожидал стоимость misclassification (для баллов классификации, которые являются апостериорными вероятностями), |
'quadratic' | Квадратичный |
'mincost'
подходит для баллов классификации, которые являются апостериорными вероятностями. Можно задать, чтобы использовать апостериорные вероятности в качестве музыки классификации к моделям SVM установкой 'FitPosterior',true
когда вы перекрестный подтверждаете модель с помощью fitcsvm
.
Задайте свою собственную функцию при помощи обозначения указателя на функцию.
Предположим тот n
количество наблюдений в X
, и K
количество отличных классов (numel(SVMModel.ClassNames)
) используемый, чтобы создать входную модель (SVMModel
). Ваша функция должна иметь эту подпись
lossvalue = lossfun
(C,S,W,Cost)
Выходной аргумент lossvalue
скаляр.
Вы выбираете имя функции (lossfun
).
C
n
- K
логическая матрица со строками, указывающими на класс, которому принадлежит соответствующее наблюдение. Порядок следования столбцов соответствует порядку класса в SVMModel.ClassNames
.
Создайте C
установкой C(p,q) = 1
если наблюдение p
находится в классе q
, для каждой строки. Установите все другие элементы строки p
к 0
.
S
n
- K
числовая матрица баллов классификации, похожих на выход predict
. Порядок следования столбцов соответствует порядку класса в SVMModel.ClassNames
.
W
n
- 1 числовой вектор весов наблюдения. Если вы передаете W
, программное обеспечение нормирует веса, чтобы суммировать к 1
.
Cost
K
- K
числовая матрица затрат misclassification. Например, Cost = ones(K) – eye(K)
задает стоимость 0
для правильной классификации и 1
для misclassification.
Задайте свое использование функции 'LossFun', @
.lossfun
Для получения дополнительной информации о функциях потерь смотрите Потерю Классификации.
Пример: 'LossFun','binodeviance'
Типы данных: char |
string
| function_handle
'Weights'
— Веса наблюденияones(size(X,1),1)
(значение по умолчанию) | числовой вектор | имя переменной в TBL
Веса наблюдения, заданные как разделенная запятой пара, состоящая из 'Weights'
и числовой вектор или имя переменной в TBL
. Программное обеспечение взвешивает наблюдения в каждой строке X
или TBL
с соответствующим весом в Weights
.
Если вы задаете Weights
как числовой вектор, затем размер Weights
должно быть равно количеству строк в X
или TBL
.
Если вы задаете Weights
как имя переменной в TBL
, необходимо сделать так как вектор символов или представить скаляр в виде строки. Например, если веса хранятся как TBL.W
, затем задайте Weights
как 'W'
. В противном случае программное обеспечение обрабатывает все столбцы TBL
, включая TBL.W
, как предикторы.
Если вы не задаете свою собственную функцию потерь, то программное обеспечение нормирует Weights
суммировать до значения априорной вероятности в соответствующем классе.
Пример: 'Weights','W'
Типы данных: single
| double
| char
| string
Функции Classification loss измеряют прогнозирующую погрешность моделей классификации. Когда вы сравниваете тот же тип потери среди многих моделей, более низкая потеря указывает на лучшую прогнозную модель.
Рассмотрите следующий сценарий.
L является средневзвешенной потерей классификации.
n является объемом выборки.
Для бинарной классификации:
yj является наблюдаемой меткой класса. Программные коды это как –1 или 1, указывая на отрицательный или положительный класс, соответственно.
f (Xj) является необработанным счетом классификации к наблюдению (строка) j данных о предикторе X.
mj = yj f (Xj) является счетом классификации к классификации наблюдения j в класс, соответствующий yj. Положительные значения mj указывают на правильную классификацию и не способствуют очень средней потере. Отрицательные величины mj указывают на неправильную классификацию и значительно способствуют средней потере.
Для алгоритмов, которые поддерживают классификацию мультиклассов (то есть, K ≥ 3):
yj* является вектором K – 1 нуль, с 1 в положении, соответствующем истинному, наблюдаемому классу yj. Например, если истинный класс второго наблюдения является третьим классом и K = 4, то y *2 = [0 0 1 0] ′. Порядок классов соответствует порядку в ClassNames
свойство входной модели.
f (Xj) является длиной вектор K музыки класса к наблюдению j данных о предикторе X. Порядок баллов соответствует порядку классов в ClassNames
свойство входной модели.
mj = yj* ′ f (Xj). Поэтому mj является скалярным счетом классификации, который модель предсказывает для истинного, наблюдаемого класса.
Весом для наблюдения j является wj. Программное обеспечение нормирует веса наблюдения так, чтобы они суммировали к соответствующей предшествующей вероятности класса. Программное обеспечение также нормирует априорные вероятности, таким образом, они суммируют к 1. Поэтому
Учитывая этот сценарий, следующая таблица описывает поддерживаемые функции потерь, которые можно задать при помощи 'LossFun'
аргумент пары "имя-значение".
Функция потерь | Значение LossFun | Уравнение |
---|---|---|
Биномиальное отклонение | 'binodeviance' | |
Экспоненциальная потеря | 'exponential' | |
Ошибка классификации | 'classiferror' | Это - взвешенная часть неправильно классифицированных наблюдений где метка класса, соответствующая классу с максимальной апостериорной вероятностью. I {x} является функцией индикатора. |
Потеря стержня | 'hinge' | |
Потеря логита | 'logit' | |
Минимальная стоимость | 'mincost' | Минимальная стоимость. Программное обеспечение вычисляет взвешенную минимальную стоимость с помощью этой процедуры в наблюдениях j = 1..., n.
Взвешенная, средняя, минимальная потеря стоимости |
Квадратичная потеря | 'quadratic' |
Этот рисунок сравнивает функции потерь (кроме 'mincost'
) для одного наблюдения по m. Некоторые функции нормированы, чтобы пройти [0,1].
classification score SVM для классификации наблюдения x является расстоянием со знаком от x до контура решения в пределах от - ∞ к + ∞. Положительный счет к классу указывает, что x предсказан, чтобы быть в том классе. Отрицательный счет указывает в противном случае.
Положительный счет классификации классов обученная функция классификации SVM. также числовой, предсказанный ответ для x или счет к предсказанию x в положительный класс.
где предполагаемые параметры SVM, скалярное произведение на пробеле предиктора между x и векторами поддержки, и сумма включает наблюдения набора обучающих данных. Отрицательный счет классификации классов к x или счет к предсказанию x в отрицательный класс, является –f (x).
Если G (xj, x) = xj ′x (линейное ядро), то функция счета уменьшает до
s является шкалой ядра, и β является вектором подходящих линейных коэффициентов.
Для получения дополнительной информации смотрите Машины опорных векторов Понимания.
[1] Hastie, T., Р. Тибширэни и Дж. Фридман. Элементы Статистического Изучения, второго выпуска. Спрингер, Нью-Йорк, 2008.
Эта функция полностью поддерживает "высокие" массивы. Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
ClassificationSVM
| CompactClassificationSVM
| fitcsvm
| predict
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.