templateSVM

Машина опорных векторов

Описание

пример

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 использование проекта кодирования один от одного.

Отображение ошибки неправильной классификации в выборке (повторная замена).

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' и положительная скалярная величина.

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

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

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

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

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

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

Если 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

Типы данных: logical

Допуск для различия градиентов между верхними и нижними нарушителями, полученный с помощью последовательной минимальной оптимизации (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

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

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

G(xj,xk)=exp(xjxk2)

'linear'Линейное ядро, по умолчанию для двухклассного обучения

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. Затем программное обеспечение применяет соответствующую норму ядра для вычисления матрицы Gram.

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

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

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

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

Допуск на нарушение условий комплементарности Каруша-Куна-Такера (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.

  • Для двухклассного обучения программное обеспечение реализует 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

Типы данных: logical

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

Если вы задаете 'ShrinkagePeriod',0тогда программа не сжимает активный набор.

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

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

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

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

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

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

Флаг для стандартизации данных предиктора, заданный как разделенная разделенными запятой парами, состоящая из 'Standardize' и true (1) или false (0).

Если вы задаете 'Standardize',true:

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

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

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

Типы данных: logical

Уровень подробностей, заданный как разделенная разделенными запятой парами, состоящая из '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., 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.

Введенный в R2014b