discardSupportVectors

Сбросьте поддерживающие векторы

Синтаксис

mdlOut = discardSupportVectors(mdl)

Описание

mdlOut = discardSupportVectors(mdl) возвращает обученную, линейную модель регрессии машины опорных векторов (SVM) mdlOut, что похоже на обученную линейную регрессионую модель SVM mdl, за исключением:

  • The Alpha и SupportVectors свойства пусты ([]).

  • Если вы отображаете mdlOut, программное обеспечение перечисляет Beta свойство вместо Alpha свойство.

Входные параметры

расширить все

Обученная, линейная регрессионая модель SVM, заданная как RegressionSVM или CompactRegressionSVM модель.

Если вы обучаете модель с помощью функции ядра, которая не является линейной (то есть, если поле mdl.KernelFunction является чем-то иным, кроме 'linear'), программное обеспечение возвращает ошибку. Можно сбросить только векторы поддержки для линейных моделей.

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

расширить все

Обученная, линейная регрессионая модель SVM, возвращенная как RegressionSVM или CompactRegressionSVM модель. mdlOut является тем же типом, что и mdl.

После отброса поддерживающих векторов свойства Alpha и SupportVectors пусты ([]). Программное обеспечение перечисляет свойство Beta в его отображении и не перечисляет свойство Alpha. The predict и resubPredict методы вычисляют предсказанные отклики, используя коэффициенты, сохраненные в Beta свойство.

Примеры

расширить все

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

Загрузите carsmall набор данных. Задайте Horsepower и Weight как переменные предиктора (X), и MPG как переменная отклика (Y).

load carsmall
X = [Horsepower,Weight];
Y = MPG;

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

mdl = fitrsvm(X,Y,'Standardize',true)
numSV = size(mdl.SupportVectors,1)
mdl = 

  RegressionSVM
           PredictorNames: {'x1'  'x2'}
             ResponseName: 'Y'
    CategoricalPredictors: []
        ResponseTransform: 'none'
                    Alpha: [77x1 double]
                     Bias: 22.9131
         KernelParameters: [1x1 struct]
                       Mu: [109.3441 2.9625e+03]
                    Sigma: [45.3545 805.9668]
          NumObservations: 93
           BoxConstraints: [93x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [93x1 logical]
                   Solver: 'SMO'


  Properties, Methods


numSV =

    77

По умолчанию, fitrsvm обучает линейную регрессионую модель SVM. Программное обеспечение перечисляет Alpha на отображении. Модель имеет 77 поддерживающих векторов.

Обратите внимание, что переменные предиктора и отклика содержат несколько NaN значения. При обучении модели fitrsvm удаляет строки, содержащие NaN значения как от предиктора, так и от данных отклика. В результате обученная модель использует только 93 из 100 общих наблюдений, содержащихся в выборочных данных.

Отменить векторы поддержки и другие связанные параметры.

mdlOut = discardSupportVectors(mdl)
mdlOut.Alpha
mdlOut.SupportVectors
mdlOut = 

  RegressionSVM
           PredictorNames: {'x1'  'x2'}
             ResponseName: 'Y'
    CategoricalPredictors: []
        ResponseTransform: 'none'
                     Beta: [2x1 double]
                     Bias: 22.9131
         KernelParameters: [1x1 struct]
                       Mu: [109.3441 2.9625e+03]
                    Sigma: [45.3545 805.9668]
          NumObservations: 93
           BoxConstraints: [93x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [93x1 logical]
                   Solver: 'SMO'


  Properties, Methods


ans =

     []


ans =

     []

Программное обеспечение перечисляет Beta в отображении вместо Alpha. The Alpha и SupportVectors свойства пусты.

Сравните размеры моделей.

vars = whos('mdl','mdlOut');
[vars(1).bytes,vars(2).bytes]
ans =

       15004       13156

mdlOut потребляет меньше памяти, чем mdl потому что он не хранит векторы поддержки.

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

Загрузите carsmall выборочные данные.

load carsmall
rng default  % for reproducibility

Обучите линейную регрессионую модель SVM с помощью Weight как переменная предиктора и MPG как переменная отклика. Стандартизируйте данные.

mdl = fitrsvm(Weight,MPG,'Standardize',true);

Обратите внимание, что MPG содержит несколько NaN значения. При обучении модели fitrsvm удаляет строки, содержащие NaN значения как от предиктора, так и от данных отклика. В результате обученная модель использует только 94 из 100 общих наблюдений, содержащихся в выборочных данных.

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

compactMdl = compact(mdl);

compactMdl является CompactRegressionSVM модель, которая имеет те же параметры, поддержку векторы и связанные с ними оценки, как mdl, но больше не сохраняет обучающие данные.

Отбросьте векторы поддержки и связанные оценки для уплотненной модели.

mdlOut = discardSupportVectors(compactMdl);

mdlOut является CompactRegressionSVM модель, которая имеет те же параметры, что и mdl и compactMdl, но больше не хранит векторы поддержки и связанные оценки.

Сравните размеры трех регрессионых моделей SVM, compactMdl, mdl, и mdlOut.

vars = whos('compactMdl','mdl','mdlOut');
[vars(1).bytes,vars(2).bytes,vars(3).bytes]
ans =

        3601       13727        2305

Уплотненная модель compactMdl потребляет 3601 байт памяти, в то время как полная модель mdl потребляет 13727 байт памяти. Модель mdlOut, который также отбрасывает векторы поддержки, потребляет 2305 байт памяти.

Совет

Для обученной, линейной регрессионой модели SVM, SupportVectors свойство является nsv -by- p матрицей. nsv - количество векторов поддержки (самое большее - размер обучающей выборки), а p - количество переменных предиктора. Если любой из предикторов является категориальным, то p включает в себя количество фиктивных переменных, необходимых для учета всех категориальных уровней предиктора. The Alpha свойство является вектором с nsv элементами.

The SupportVectors и Alpha свойства могут быть большими для комплексных данных наборов, которые содержат много наблюдений или примеров. Однако Beta свойство является вектором с p элементами, которые могут быть значительно меньше. Можно использовать обученную регрессионую модель SVM, чтобы предсказать значения отклика, даже если вы отбрасываете векторы поддержки, потому что predict и resubPredict методы используют Beta для вычисления предсказанных откликов.

Если обученная, линейная регрессионая модель SVM имеет много векторов поддержки, используйте discardSupportVectors чтобы уменьшить количество дискового пространства, которое занимает обученная, линейная регрессионая модель SVM. Размер матрицы векторов поддержки можно отобразить путем ввода size(mdlIn.SupportVectors).

Алгоритмы

The predict и resubPredict оцените значения отклика по формуле

f(x)=(XS)β+β0,

где:

  • β - значение Бета, сохраненное как mdl.Beta.

  • .r0 - значение смещения, сохраненное как mdl.Bias.

  • X - обучающие данные.

  • S - значение шкалы ядра, сохраненное как mdl.KernelParameters.Scale.

Таким образом, программное обеспечение может использовать значение mdl.Beta сделать предсказания даже после отброса векторов поддержки.

Введенный в R2015b