discardSupportVectors

Отбросьте векторы поддержки

Синтаксис

mdlOut = discardSupportVectors(mdl)

Описание

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

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

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

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

развернуть все

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

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

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

развернуть все

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

После отбрасывания векторов поддержки свойства Alpha и SupportVectors пусты ([]). Программное обеспечение перечисляет свойство Beta в своем отображении и не перечисляет свойство Alpha. 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. Свойства 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 использует 3 601 байт памяти, в то время как полная модель mdl использует 13 727 байтов памяти. Модель mdlOut, которая также отбрасывает векторы поддержки, использует 2 305 байтов памяти.

Советы

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

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

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

Алгоритмы

predict и resubPredict оценивают значения ответа с помощью формулы

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

где:

  • β Коэффициент бета, сохраненный как mdl.Beta.

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

  • X является данными тренировки.

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

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

Введенный в R2015b