templateSVM

Поддержите векторный шаблон машины

Синтаксис

t = templateSVM()
t = templateSVM(Name,Value)

Описание

пример

t = templateSVM() возвращает шаблон ученика машины вектора поддержки (SVM), подходящий для учебных моделей мультикласса выходного кода с коррекцией ошибок (ECOC).

Если вы задаете шаблон по умолчанию, то программное обеспечение использует значения по умолчанию для всех входных параметров во время обучения.

Задайте 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 с помощью одного по сравнению с одного кодирующего проекта.

Отобразите в выборке (перезамена) misclassification ошибка.

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 = 3x1 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.8583

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'BoxConstraint',0.1,'KernelFunction','gaussian','Standardize',1 задает ограничение поля 0.1, чтобы использовать Гауссово ядро (RBF) и стандартизировать предикторы.

Ограничение поля, заданное как пара, разделенная запятой, состоящая из 'BoxConstraint' и положительной скалярной величины.

Для изучения одного класса программное обеспечение всегда устанавливает ограничение поля на 1.

Для получения дополнительной информации на отношениях и алгоритмическом поведении BoxConstraint, Cost, Prior, Standardize и Weights, видят Алгоритмы.

Пример: 'BoxConstraint',100

Типы данных: double | single

Размер кэша, заданный как пара, разделенная запятой, состоящая из 'CacheSize' и 'maximal' или положительной скалярной величины.

Если CacheSize является 'maximal', то программное обеспечение резервирует достаточно памяти, чтобы содержать целый n-by-n матрица Грамма.

Если CacheSize является положительной скалярной величиной, то программное обеспечение резервирует мегабайты CacheSize памяти для обучения модель.

Пример: 'CacheSize','maximal'

Типы данных: double | single | char | string

Отметьте, чтобы отсечь альфа-коэффициенты, заданные как пара, разделенная запятой, состоящая из 'ClipAlphas' и или true или false.

Предположим, что альфа-коэффициентом для наблюдения, j является αj и ограничение поля наблюдения j, является Cj, j = 1..., n, где n является учебным объемом выборки.

ЗначениеОписание
trueВ каждой итерации, если αj близок 0 или около Cj, то MATLAB® устанавливает αj на 0 или на Cj, соответственно.
falseMATLAB не изменяет альфа-коэффициенты во время оптимизации.

MATLAB хранит окончательные значения α в свойстве Alpha обученного объекта модели SVM.

ClipAlphas может влиять на SMO и сходимость ISDA.

Пример: 'ClipAlphas',false

Типы данных: логический

Допуск к различию в градиенте между верхними и более низкими нарушителями, полученными Последовательной минимальной оптимизацией (SMO) или Итеративным одним алгоритмом данных (ISDA), заданным как пара, разделенная запятой, состоящая из 'DeltaGradientTolerance' и неотрицательного скаляра.

Если DeltaGradientTolerance является 0, то программное обеспечение не использует допуск к различию в градиенте, чтобы проверять на сходимость оптимизации.

Значения по умолчанию:

  • 1e-3, если решатель является SMO (например, вы устанавливаете 'Solver','SMO'),

  • 0, если решатель является ISDA (например, вы устанавливаете 'Solver','ISDA'),

Пример: 'DeltaGradientTolerance',1e-2

Типы данных: double | single

Допуск разрыва выполнимости получен SMO или ISDA, заданным как пара, разделенная запятой, состоящая из 'GapTolerance' и неотрицательного скаляра.

Если GapTolerance является 0, то программное обеспечение не использует допуск разрыва выполнимости, чтобы проверять на сходимость оптимизации.

Пример: 'GapTolerance',1e-2

Типы данных: double | single

Максимальное количество числовых итераций оптимизации, заданных как пара, разделенная запятой, состоящая из 'IterationLimit' и положительного целого числа.

Программное обеспечение возвращает обученную модель независимо от того, сходится ли стандартная программа оптимизации успешно. Mdl.ConvergenceInfo содержит информацию о сходимости.

Пример: 'IterationLimit',1e8

Типы данных: double | single

Функция ядра раньше вычисляла элементы матрицы Грамма, заданной как пара, разделенная запятой, состоящая из 'KernelFunction' и имени функции ядра. Предположим, что G (xj, xk) является элементом (j, k) матрицы Грамма, где xj и xk является p - размерные векторы, представляющие наблюдения j и k в X. Эта таблица описывает поддерживаемые имена функций ядра и их функциональные формы.

Имя функции ядраОписаниеФормула
'gaussian' или 'rbf'Ядро гауссовой или Радиальной основной функции (RBF), значение по умолчанию для изучения одного класса

G(xj,xk)=exp(xjxk2)

'linear'Линейное ядро, значение по умолчанию для изучения 2D класса

G(xj,xk)=xjxk

'polynomial'Полиномиальное ядро. Используйте 'PolynomialOrder',q, чтобы задать полиномиальное ядро порядка q.

G(xj,xk)=(1+xjxk)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 в каждый элемент матрицы Грамма.

Значения по умолчанию:

  • 0, если решатель является SMO (то есть, вы устанавливаете 'Solver','SMO'),

  • 0.1, если решатель является ISDA (то есть, вы устанавливаете 'Solver','ISDA'),

Пример: 'KernelOffset',0

Типы данных: double | single

Масштабный коэффициент ядра, заданный как пара, разделенная запятой, состоящая из 'KernelScale' и 'auto' или положительной скалярной величины. Программное обеспечение делит все элементы матрицы предиктора X значением KernelScale. Затем программное обеспечение применяет соответствующую норму ядра, чтобы вычислить матрицу Грамма.

  • Если вы задаете 'auto', то программное обеспечение выбирает соответствующий масштабный коэффициент с помощью эвристической процедуры. Эта эвристическая процедура использует подвыборку, таким образом, оценки могут отличаться от одного вызова до другого. Поэтому, чтобы воспроизвести результаты, установите seed случайных чисел с помощью rng перед обучением.

  • Если вы задаете KernelScale и вашу собственную функцию ядра, например, 'KernelFunction','kernel', то программное обеспечение выдает ошибку. Необходимо применить масштабирование в kernel.

Пример: 'KernelScale','auto'

Типы данных: double | single | char | string

Допуск нарушения условий взаимозависимости Karush-Kuhn-Tucker (KKT), заданный как пара, разделенная запятой, состоящая из 'KKTTolerance' и неотрицательного скаляра.

Если KKTTolerance является 0, то программное обеспечение не использует допуск нарушения условий взаимозависимости KKT, чтобы проверять на сходимость оптимизации.

Значения по умолчанию:

  • 0, если решатель является SMO (например, вы устанавливаете 'Solver','SMO'),

  • 1e-3, если решатель является ISDA (например, вы устанавливаете 'Solver','ISDA'),

Пример: 'KKTTolerance',1e-2

Типы данных: double | single

Количество итераций между сообщением диагностики оптимизации вывод, заданный как пара, разделенная запятой, состоящая из 'NumPrint' и неотрицательным целым числом.

Если вы задаете 'Verbose',1 и 'NumPrint',numprint, то программное обеспечение отображает все сообщения диагностики оптимизации от SMO и ISDA каждый numprint итерации в Командном окне.

Пример: 'NumPrint',500

Типы данных: double | single

Ожидаемая пропорция выбросов в данных тренировки, заданных как пара, разделенная запятой, состоящая из 'OutlierFraction' и числового скаляра в интервале [0,1).

Предположим, что вы устанавливаете 'OutlierFraction',outlierfraction, где outlierfraction является значением, больше, чем 0.

  • Для изучения 2D класса программное обеспечение реализует robust learning. Другими словами, программное обеспечение пытается удалить 100*outlierfraction % наблюдений, когда алгоритм оптимизации сходится. Удаленные наблюдения соответствуют градиентам, которые являются большими в значении.

  • Для изучения одного класса программное обеспечение находит, что соответствующее смещение называет таким образом, что outlierfraction наблюдений в наборе обучающих данных имеет отрицательные очки.

Пример: 'OutlierFraction',0.01

Типы данных: double | single

Полиномиальный порядок функции ядра, заданный как пара, разделенная запятой, состоящая из 'PolynomialOrder' и положительного целого числа.

Если вы устанавливаете 'PolynomialOrder', и KernelFunction не является 'polynomial', то программное обеспечение выдает ошибку.

Пример: 'PolynomialOrder',2

Типы данных: double | single

Сохраните векторы поддержки, их метки и предполагаемые коэффициенты α как свойства получившейся модели, заданной как пара, разделенная запятой, состоящая из 'SaveSupportVectors' и true или false.

Если SaveSupportVectors является true, получившаяся модель хранит векторы поддержки в свойстве SupportVectors, их метки в свойстве SupportVectorLabels и предполагаемые коэффициенты α в свойстве Alpha компактных, учеников SVM.

Если SaveSupportVectors является false, и KernelFunction является 'linear', получившаяся модель не хранит векторы поддержки и связанные оценки.

Чтобы уменьшать потребление памяти компактными моделями SVM, задайте SaveSupportVectors.

Для линейного, двоичных учеников SVM в модели ECOC, значением по умолчанию является false. В противном случае значением по умолчанию является true.

Пример: 'SaveSupportVectors',true

Типы данных: логический

Количество итераций между сокращениями активного набора, заданного как пара, разделенная запятой, состоящая из 'ShrinkagePeriod' и неотрицательного целого числа.

Если вы устанавливаете 'ShrinkagePeriod',0, то программное обеспечение не уменьшает активный набор.

Пример: 'ShrinkagePeriod',1000

Типы данных: double | single

Стандартная программа оптимизации, заданная как пара, разделенная запятой, состоящая из 'Solver' и значения в этой таблице.

ЗначениеОписание
'ISDA'Итеративный один алгоритм данных (см. [30]),
'L1QP'Использование quadprog, чтобы реализовать L 1 мягко-граничная минимизация квадратичным программированием. Эта опция требует лицензии Optimization Toolbox™. Для получения дополнительной информации см. Определение Квадратичного программирования (Optimization Toolbox).
'SMO'Последовательная минимальная оптимизация (см. [17]),

Значением по умолчанию является 'ISDA' для изучения 2D класса или если вы устанавливаете 'OutlierFraction' на положительное значение и 'SMO' в противном случае.

Пример: 'Solver','ISDA'

Отметьте, чтобы стандартизировать данные о предикторе, заданные как пара, разделенная запятой, состоящая из 'Standardize' и true (1) или false (0).

Если вы устанавливаете 'Standardize',true:

  • Центры программного обеспечения и шкалы каждый столбец данных о предикторе (X) взвешенным столбцом среднее и стандартное отклонение, соответственно (для получения дополнительной информации о взвешенной стандартизации, видят Алгоритмы). MATLAB не стандартизирует данные, содержавшиеся в фиктивных переменных столбцах, сгенерированных для категориальных предикторов.

  • Программное обеспечение обучает классификатор с помощью стандартизированной матрицы предиктора, но хранит нестандартизированные данные в свойстве X классификатора.

Пример: 'Standardize',true

Типы данных: логический

Уровень многословия, заданный как пара, разделенная запятой, состоящая из 'Verbose' и 0, 1 или 2. Значение Verbose управляет суммой информации об оптимизации, которую программное обеспечение отображает в Командном окне и сохраняет информацию как структуру к Mdl.ConvergenceInfo.History.

Эта таблица суммирует доступные опции уровня многословия.

ЗначениеОписание
0Программное обеспечение не отображает или сохраняет информацию сходимости.
1Программное обеспечение отображает диагностические сообщения и сохраняет критерии сходимости каждый numprint итерации, где numprint является значением аргумента пары "имя-значение" 'NumPrint'.
2Программное обеспечение отображает диагностические сообщения и сохраняет критерии сходимости в каждой итерации.

Пример: 'Verbose',1

Типы данных: double | single

Выходные аргументы

свернуть все

Шаблон классификации 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. и Дж. К. Шейв-Тейлор. Введение, чтобы поддержать векторные машины и другое основанное на ядре изучение методов. Кембридж, Великобритания: Издательство Кембриджского университета, 2000.

[2] Вентилятор, R.-E., P.-H. Чен и C.-J. Лин. “Выбор рабочего набора с помощью информации о втором порядке для учебных машин вектора поддержки”. Журнал Исследования Машинного обучения, Vol 6, 2005, стр 1889–1918.

[3] Hastie, T., Р. Тибширэни и Дж. Фридман. Элементы статистического изучения, второго выпуска. Нью-Йорк: Спрингер, 2008.

[4] Кекмен V, T.-M. Хуан и М. Вогт. “Итеративный Один Алгоритм Данных для Учебных Машин Ядра от Огромных Наборов данных: Теория и Производительность”. В Машинах Вектора Поддержки: Теория и Приложения. Отредактированный Липо Ваном, 255–274. Берлин: Springer-Verlag, 2005.

[5] Scholkopf, B., Дж. К. Платт, Дж. К. Шейв-Тейлор, А. Дж. Смола и Р. К. Уильямсон. “Оценивая Поддержку Высоко-размерного Распределения”. Нейронный Comput., Издание 13, Номер 7, 2001, стр 1443–1471.

[6] Scholkopf, B. и A. Смола. Изучение с ядрами: поддержите векторные машины, регуляризацию, оптимизацию и вне, адаптивное вычисление и машинное обучение. Кембридж, MA: нажатие MIT, 2002.

Смотрите также

| | |

Введенный в R2014b