Машина опорных векторов
возвращает шаблон обучающегося компьютера с вектором поддержки (SVM), подходящий для настройки многоклассовых моделей выходного кода с исправлением ошибок (ECOC).t
= templateSVM()
Если вы задаете шаблон по умолчанию, то во время обучения программное обеспечение использует значения по умолчанию для всех входных параметров.
Задайте t
как двоичный ученик, или один в наборе двоичных учащихся, в fitcecoc
для обучения многоклассового классификатора ECOC.
возвращает шаблон с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".t
= templateSVM(Name,Value
)
Например, можно задать прямоугольное ограничение, функцию ядра или стандартизировать предикторы.
Если вы отображаете t
в Командном окне, затем все опции появляются пустыми ([]
), кроме тех, которые вы задаете используя аргументы пары "имя-значение". Во время обучения программа использует значения по умолчанию для пустых опций.
Использование templateSVM
для задания шаблона SVM по умолчанию.
t = templateSVM()
t = Fit template for classification SVM. Alpha: [0x1 double] BoxConstraint: [] CacheSize: [] CachingMethod: '' ClipAlphas: [] DeltaGradientTolerance: [] Epsilon: [] GapTolerance: [] KKTTolerance: [] IterationLimit: [] KernelFunction: '' KernelScale: [] KernelOffset: [] KernelPolynomialOrder: [] NumPrint: [] Nu: [] OutlierFraction: [] RemoveDuplicates: [] ShrinkagePeriod: [] Solver: '' StandardizeData: [] SaveSupportVectors: [] VerbosityLevel: [] Version: 2 Method: 'SVM' Type: 'classification'
Все свойства объекта шаблона пусты, кроме Method
и Type
. Когда ты проходишь t
для функции обучения программа заполняет пустые свойства соответствующими значениями по умолчанию. Например, программное обеспечение заполняет KernelFunction
свойство с 'linear'
. Для получения дополнительной информации о других значениях по умолчанию смотрите fitcsvm
.
t
является планом для обучающегося SVM, и никаких расчетов при его указании не происходит. Можно пройти t
на fitcecoc
для определения двоичных учащихся SVM для многоклассового обучения ECOC. Однако по умолчанию fitcecoc
использует двоичных учащихся SVM по умолчанию.
Создайте шаблон SVM без параметров для использования в fitcecoc
.
Загрузите набор данных радужки Фишера.
load fisheriris
Создайте шаблон для двоичных классификаторов SVM и укажите, использовать функцию Гауссова ядра.
t = templateSVM('KernelFunction','gaussian')
t = Fit template for classification SVM. Alpha: [0x1 double] BoxConstraint: [] CacheSize: [] CachingMethod: '' ClipAlphas: [] DeltaGradientTolerance: [] Epsilon: [] GapTolerance: [] KKTTolerance: [] IterationLimit: [] KernelFunction: 'gaussian' KernelScale: [] KernelOffset: [] KernelPolynomialOrder: [] NumPrint: [] Nu: [] OutlierFraction: [] RemoveDuplicates: [] ShrinkagePeriod: [] Solver: '' StandardizeData: [] SaveSupportVectors: [] VerbosityLevel: [] Version: 2 Method: 'SVM' Type: 'classification'
Все свойства объекта шаблона пусты, кроме DistributionNames
, Method
, и Type
. После обучения программа заполняет пустые свойства соответствующими значениями по умолчанию.
Задайте t
в качестве двоичного ученика для многоклассовой модели ECOC.
Mdl = fitcecoc(meas,species,'Learners',t);
Mdl
является ClassificationECOC
многоклассовый классификатор. По умолчанию программное обеспечение обучает Mdl
использование проекта кодирования один от одного.
Отображение ошибки неправильной классификации в выборке (повторная замена).
L = resubLoss(Mdl,'LossFun','classiferror')
L = 0.0200
Когда вы обучаете модель ECOC с линейными двоичными учениками SVM, fitcecoc
опустошает Alpha
, SupportVectorLabels
, и SupportVectors
свойства двоичных учащихся по умолчанию. Можно выбрать вместо этого сохранить векторы поддержки и связанные значения, а затем сбросить их из модели позже.
Загрузите набор данных радужки Фишера.
load fisheriris rng(1); % For reproducibility
Обучите модель ECOC, используя весь набор данных. Укажите сохранение поддерживающих векторов путем передачи в соответствующий шаблон SVM.
t = templateSVM('SaveSupportVectors',true); MdlSV = fitcecoc(meas,species,'Learners',t);
MdlSV
является обученным ClassificationECOC
модель с линейными SVM двоичными учениками. По умолчанию fitcecoc
реализует проект кодирования один от одного, который требует трех двоичных учащихся для трехклассного обучения.
Доступ к предполагаемому (альфа) значения с использованием записи через точку.
alpha = cell(3,1); alpha{1} = MdlSV.BinaryLearners{1}.Alpha; alpha{2} = MdlSV.BinaryLearners{2}.Alpha; alpha{3} = MdlSV.BinaryLearners{3}.Alpha; alpha
alpha=3×1 cell array
{ 3x1 double}
{ 3x1 double}
{23x1 double}
alpha
- массив ячеек 3 на 1, в котором хранятся предполагаемые значения .
Отменить векторы поддержки и связанные значения из модели ECOC.
Mdl = discardSupportVectors(MdlSV);
Mdl
аналогичен MdlSV
, за исключением того, что Alpha
, SupportVectorLabels
, и SupportVectors
свойства всех линейных двоичных учащихся SVM пусты ([]
).
areAllEmpty = @(x)isempty([x.Alpha x.SupportVectors x.SupportVectorLabels]); cellfun(areAllEmpty,Mdl.BinaryLearners)
ans = 3x1 logical array
1
1
1
Сравните размеры двух моделей ECOC.
vars = whos('Mdl','MdlSV'); 100*(1 - vars(1).bytes/vars(2).bytes)
ans = 4.7075
Mdl
примерно на 5% меньше MdlSV
.
Уменьшите использование памяти путем уплотнения Mdl
а затем очистка Mdl
и MdlSV
из рабочей области.
CompactMdl = compact(Mdl); clear Mdl MdlSV;
Спрогнозируйте метку для случайной строки обучающих данных, используя более эффективную модель SVM.
idx = randsample(size(meas,1),1)
idx = 63
predictedLabel = predict(CompactMdl,meas(idx,:))
predictedLabel = 1x1 cell array
{'versicolor'}
trueLabel = species(idx)
trueLabel = 1x1 cell array
{'versicolor'}
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'BoxConstraint',0.1,'KernelFunction','gaussian','Standardize',1
задает прямоугольное ограничение 0.1
, использовать ядро Гауссова (RBF) и стандартизировать предикторы.'BoxConstraint'
- Прямоугольное ограничениеПрямоугольное ограничение, заданное как разделенная разделенными запятой парами, состоящая из 'BoxConstraint'
и положительная скалярная величина.
Для одноклассного обучения программное обеспечение всегда устанавливает прямоугольное ограничение равным 1
.
Для получения дополнительной информации об отношениях и алгоритмическом поведении BoxConstraint
, Cost
, Prior
, Standardize
, и Weights
, см. Алгоритмы.
Пример: 'BoxConstraint',100
Типы данных: double
| single
'CacheSize'
- Размер кэша1000
(по умолчанию) | 'maximal'
| положительная скалярная величинаРазмер кэша, заданный как разделенная разделенными запятой парами, состоящая из 'CacheSize'
и 'maximal'
или положительная скалярная величина.
Если CacheSize
является 'maximal'
, тогда программа сохраняет достаточно памяти, чтобы сохранить целую матрицу n -by n Gram.
Если CacheSize
является положительная скалярная величина, затем программное обеспечение резервирует CacheSize
мегабайты памяти для настройки модели.
Пример: 'CacheSize','maximal'
Типы данных: double
| single
| char
| string
'ClipAlphas'
- Флаг для обрезки альфа-коэффициентовtrue
(по умолчанию) | false
Флаг для клипа альфа-коэффициентов, заданный как разделенная разделенными запятой парами, состоящая из 'ClipAlphas'
и любой из них true
или false
.
Предположим, что альфа-коэффициент для j наблюдений αj, и прямоугольное ограничение для j наблюдений Cj, j = 1,..., n, где n - размер обучающей выборки.
Значение | Описание |
---|---|
true | На каждой итерации, если αj около 0 или около Cj, то MATLAB® устанавливает αj равным 0 или Cj, соответственно. |
false | MATLAB не изменяет альфа-коэффициенты во время оптимизации. |
MATLAB хранит окончательные значения α в Alpha
свойство обученного объекта модели SVM.
ClipAlphas
может повлиять на сходимость SMO и ISDA.
Пример: 'ClipAlphas',false
Типы данных: logical
'DeltaGradientTolerance'
- Допуск для различия градиентовДопуск для различия градиентов между верхними и нижними нарушителями, полученный с помощью последовательной минимальной оптимизации (SMO) или итерационного алгоритма одиночных данных (ISDA), задается как разделенная разделенными запятой парами, состоящая из 'DeltaGradientTolerance'
и неотрицательный скаляр.
Если DeltaGradientTolerance
является 0
тогда программа не использует допуск для различия градиентов для проверки на сходимость оптимизации.
Значениями по умолчанию являются:
1e-3
если решателем является SMO (для примера вы задаете 'Solver','SMO'
)
0
если решателем является ISDA (для примера вы задаете 'Solver','ISDA'
)
Пример: 'DeltaGradientTolerance',1e-2
Типы данных: double
| single
'GapTolerance'
- допуск погрешности технико-экономического обоснования0
(по умолчанию) | неотрицательной скаляромДопуск погрешности, полученный SMO или ISDA, задается как разделенная разделенными запятой парами, состоящая из 'GapTolerance'
и неотрицательный скаляр.
Если GapTolerance
является 0
тогда программное обеспечение не использует допуск погрешности для проверки на сходимость оптимизации.
Пример: 'GapTolerance',1e-2
Типы данных: double
| single
'IterationLimit'
- Максимальное количество итераций численной оптимизации1e6
(по умолчанию) | положительное целое числоМаксимальное количество итераций численной оптимизации, заданное как разделенная разделенными запятой парами, состоящая из 'IterationLimit'
и положительное целое число.
Программное обеспечение возвращает обученную модель независимо от того, успешно ли сходится стандартная программа оптимизации. Mdl.ConvergenceInfo
содержит информацию о сходимости.
Пример: 'IterationLimit',1e8
Типы данных: double
| single
'KernelFunction'
- Функция ядра'linear'
| 'gaussian'
| 'rbf'
| 'polynomial'
| имя функцииФункция ядра, используемая для вычисления элементов матрицы Gram, заданная как разделенная разделенными запятой парами, состоящая из 'KernelFunction'
и имя функции ядра. Предположим G (xj, xk) элемент (j, k) матрицы Грамма, где xj и xk p - размерные векторы, представляющие наблюдения j и k в X
. Эта таблица описывает поддерживаемые имена функции ядра и их функциональные формы.
Имя функции ядра | Описание | Формула |
---|---|---|
'gaussian' или 'rbf' | Ядро Гауссова или Радиального Базиса (RBF), по умолчанию для одноклассного обучения |
|
'linear' | Линейное ядро, по умолчанию для двухклассного обучения |
|
'polynomial' | Полиномиальное ядро. Используйте 'PolynomialOrder', задать полиномиальное ядро порядка q . |
|
Можно задать собственную функцию ядра, например kernel
, путем установки 'KernelFunction','kernel'
. Значение kernel
должна иметь эту форму.
function G = kernel(U,V)
U
является m -by - p матрицей. Столбцы соответствуют переменным предиктора, а строки соответствуют наблюдениям.
V
является n -by - p матрицей. Столбцы соответствуют переменным предиктора, а строки соответствуют наблюдениям.
G
является m -by
n матрицей Грамма строк U и
V
.
kernel.m
должен находиться в пути MATLAB.
Рекомендуется избегать использования родовых имен для функций ядра. Например, вызовите функцию сигмоидного ядра 'mysigmoid'
а не 'sigmoid'
.
Пример: 'KernelFunction','gaussian'
Типы данных: char
| string
'KernelOffset'
- Параметр смещения ядраПараметр смещения ядра, заданный как разделенная разделенными запятой парами, состоящая из 'KernelOffset'
и неотрицательный скаляр.
Программное обеспечение добавляет KernelOffset
каждому элементу матрицы Грамма.
Значения по умолчанию:
0
если решатель является SMO (то есть вы задаете 'Solver','SMO'
)
0.1
если решатель ISDA (то есть вы задаете 'Solver','ISDA'
)
Пример: 'KernelOffset',0
Типы данных: double
| single
'KernelScale'
- параметр шкалы ядра1
(по умолчанию) | 'auto'
| положительная скалярная величинаПараметр шкалы ядра, заданный как разделенная разделенными запятой парами, состоящая из 'KernelScale'
и 'auto'
или положительная скалярная величина. Программа разделяет все элементы матрицы предиктора X
по значению KernelScale
. Затем программное обеспечение применяет соответствующую норму ядра для вычисления матрицы Gram.
Если вы задаете 'auto'
затем программа выбирает соответствующий масштабный коэффициент с помощью эвристической процедуры. Эта эвристическая процедура использует субдискретизацию, поэтому оценки могут варьироваться от одного вызова к другому. Поэтому, чтобы воспроизвести результаты, установите начальное число случайных чисел используя rng
перед тренировкой.
Если вы задаете KernelScale
и ваша собственная функция ядра, например 'KernelFunction','kernel'
затем программа выдает ошибку. Вы должны применить масштабирование в kernel
.
Пример: 'KernelScale','auto'
Типы данных: double
| single
| char
| string
'KKTTolerance'
- допускается нарушение условий комплементарности Каруша-Куна-ТакераДопуск на нарушение условий комплементарности Каруша-Куна-Такера (KKT), заданный как разделенная разделенными запятой парами, состоящая из 'KKTTolerance'
и неотрицательный скаляр.
Если KKTTolerance
является 0
тогда программное обеспечение не использует допуск нарушения условий комплементарности KKT для проверки на сходимость оптимизации.
Значениями по умолчанию являются:
0
если решателем является SMO (для примера вы задаете 'Solver','SMO'
)
1e-3
если решателем является ISDA (для примера вы задаете 'Solver','ISDA'
)
Пример: 'KKTTolerance',1e-2
Типы данных: double
| single
'NumPrint'
- Количество итераций между выводом диагностического сообщения оптимизации1000
(по умолчанию) | неотрицательное целое числоКоличество итераций между выходом диагностического сообщения оптимизации, заданное как разделенная разделенными запятой парами, состоящая из 'NumPrint'
и неотрицательное целое число.
Если вы задаете 'Verbose',1
и 'NumPrint',numprint
, затем программное обеспечение отображает все диагностические сообщения оптимизации от SMO и ISDA каждый numprint
итерации в Командном окне.
Пример: 'NumPrint',500
Типы данных: double
| single
'OutlierFraction'
- Ожидаемая доля выбросов в обучающих данных0
(по умолчанию) | числовой скаляр в интервале [0,1)Ожидаемая доля выбросов в обучающих данных, заданная как разделенная разделенными запятой парами, состоящая из 'OutlierFraction'
и числовой скаляр в интервале [0,1).
Предположим, что вы 'OutlierFraction',outlierfraction
, где outlierfraction
- значение, больше 0.
Для двухклассного обучения программное обеспечение реализует robust learning. Другими словами, программное обеспечение пытается удалить 100 * outlierfraction
% наблюдений, когда алгоритм оптимизации сходится. Удаленные наблюдения соответствуют градиентам, которые являются большими по величине.
Для одноклассного обучения программное обеспечение находит подходящий термин смещения, такой что outlierfraction
наблюдения в наборе обучающих данных имеют отрицательные счета.
Пример: 'OutlierFraction',0.01
Типы данных: double
| single
'PolynomialOrder'
- Порядок функции полиномиального ядра3
(по умолчанию) | положительное целое числоПорядок функции многочлена ядра, заданный как разделенная разделенными запятой парами, состоящая из 'PolynomialOrder'
и положительное целое число.
Если вы задаете 'PolynomialOrder'
и KernelFunction
не 'polynomial'
затем программа выдает ошибку.
Пример: 'PolynomialOrder',2
Типы данных: double
| single
'SaveSupportVectors'
- Сохраните поддерживающие векторы, их метки и предполагаемые коэффициенты αtrue
| false
Сохраните векторы поддержки, их метки и предполагаемые коэффициенты α как свойства полученной модели, заданные как разделенная разделенными запятой парами, состоящая из 'SaveSupportVectors'
и true
или false
.
Если SaveSupportVectors
является true
, полученная модель хранит векторы поддержки в SupportVectors
свойство, их метки в SupportVectorLabels
свойство и предполагаемые коэффициенты α в Alpha
свойство компактных, SVM учащихся.
Если SaveSupportVectors
является false
и KernelFunction
является 'linear'
полученная модель не хранит векторы поддержки и связанные оценки.
Чтобы уменьшить потребление памяти компактными моделями SVM, задайте SaveSupportVectors
.
Для линейных двоичных учащихся SVM в модели ECOC значение по умолчанию false
. В противном случае значение по умолчанию является true
.
Пример: 'SaveSupportVectors',true
Типы данных: logical
'ShrinkagePeriod'
- Количество итераций между сокращениями активного набора0
(по умолчанию) | неотрицательное целое числоКоличество итераций между сокращениями активного набора, заданное как разделенная разделенными запятой парами, состоящая из 'ShrinkagePeriod'
и неотрицательное целое число.
Если вы задаете 'ShrinkagePeriod',0
тогда программа не сжимает активный набор.
Пример: 'ShrinkagePeriod',1000
Типы данных: double
| single
'Solver'
- стандартная программа оптимизации'ISDA'
| 'L1QP'
| 'SMO'
Стандартная программа оптимизации, заданная как разделенная разделенными запятой парами, состоящая из 'Solver'
и значение в этой таблице.
Значение | Описание |
---|---|
'ISDA' | Итерационный алгоритм одиночных данных (см. [30]) |
'L1QP' | Использование quadprog (Optimization Toolbox) для реализации L 1 минимизации мягкого запаса путем квадратичного программирования. Для этой опции требуется лицензия Optimization Toolbox™. Для получения дополнительной информации смотрите Определение квадратичного программирования (Optimization Toolbox). |
'SMO' | Последовательная минимальная оптимизация (см. [17]) |
Значение по умолчанию 'ISDA'
если вы задаете 'OutlierFraction'
к положительному значению для двухклассного обучения и 'SMO'
в противном случае.
Пример: 'Solver','ISDA'
'Standardize'
- Флаг для стандартизации данных предиктораfalse
(по умолчанию) | true
Флаг для стандартизации данных предиктора, заданный как разделенная разделенными запятой парами, состоящая из 'Standardize'
и true
(1
) или false
(0)
.
Если вы задаете 'Standardize',true
:
Программное обеспечение центрирует и масштабирует каждый столбец данных предиктора (X
) средним взвешенным столбцом и стандартным отклонением, соответственно (для получения дополнительной информации о взвешенной стандартизации см. Алгоритмы). MATLAB не стандартизирует данные, содержащиеся в столбцах фиктивных переменных, сгенерированных для категориальных предикторов.
Программа обучает классификатор с помощью стандартизированной матрицы предиктора, но сохраняет нестандартные данные в свойстве классификатора X
.
Пример: 'Standardize',true
Типы данных: logical
'Verbose'
- Уровень подробностей0
(по умолчанию) | 1
| 2
Уровень подробностей, заданный как разделенная разделенными запятой парами, состоящая из 'Verbose'
и 0
, 1
, или 2
. Значение Verbose
управляет объемом информации об оптимизации, отображаемой программным обеспечением в Командном окне, и сохраняет информацию как структуру, в которой Mdl.ConvergenceInfo.History
.
В этой таблице представлены доступные опции уровня подробностей.
Значение | Описание |
---|---|
0 | Программа не отображает и не сохраняет информацию о сходимости. |
1 | Программа отображает диагностические сообщения и сохраняет критерии сходимости каждый numprint итерации, где numprint - значение аргумента пары "имя-значение" 'NumPrint' . |
2 | Программа отображает диагностические сообщения и сохраняет критерии сходимости при каждой итерации. |
Пример: 'Verbose',1
Типы данных: double
| single
t
- шаблон классификации SVMШаблон классификации SVM, подходящий для настройки многоклассовых моделей выходного кода с исправлением ошибок (ECOC), возвращаемый как объект шаблона. Передайте t
кому fitcecoc
для определения способа создания классификатора SVM для модели ECOC.
Если вы отображаете t
в Командное окно, затем все, не заданные опции появляются пустыми ([]
). Однако во время обучения программа заменяет пустые опции соответствующими значениями по умолчанию.
По умолчанию и для эффективности, 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] Christianini, N., and J. C. Shawe-Taylor. Введение в машины опорных векторов и других основанных на ядре методов обучения. Кембридж, Великобритания: Cambridge University Press, 2000.
[2] Вентилятор, R.-E., P.-H. Чен и К.-Ж. Lin. «Работа набора с использованием информации второго порядка для обучения машин опорных векторов». Journal of Машинного обучения Research, Vol 6, 2005, pp. 1889-1918.
[3] Хасти, Т., Р. Тибширани и Дж. Фридман. Элементы статистического обучения, второе издание. Нью-Йорк: Спрингер, 2008.
[4] Кечман В., Т. -М. Хуан и М. Фогт. Итерационный алгоритм единичных данных для обучения машин ядра из огромных наборов данных: теория и эффективность. В машинах опорных векторов: теория и приложения. Под редакцией Липо Ван, 255-274. Берлин: Springer-Verlag, 2005.
[5] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. Оценка поддержки высокомерного распределения. Нейронный компут., Vol. 13, Number 7, 2001, pp. 1443-1471.
[6] Scholkopf, B., and A. Smola. Обучение с ядерными ядрами: Машины опорных векторов, регуляризация, оптимизация и далее, адаптивные расчеты и машинное обучение. Cambridge, MA: The MIT Press, 2002.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.