Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

discardSupportVectors

サポート ベクターの破棄

構文

mdlOut = discardSupportVectors(mdl)

説明

mdlOut = discardSupportVectors(mdl) は、学習済みの線形サポート ベクター マシン (SVM) 回帰モデル mdlOut を返します。このモデルは学習済みの線形 SVM 回帰モデル mdl に似ていますが、次の点が異なります。

  • Alpha および SupportVectors プロパティは空 ([]) になります。

  • mdlOut を表示すると、Alpha プロパティではなく Beta プロパティが表示されます。

入力引数

すべて展開する

学習済みの線形 SVM 回帰モデル。RegressionSVM または CompactRegressionSVM モデルとして指定します。

線形ではない (mdl.KernelFunction フィールドが 'linear' 以外の) カーネル関数を使用してモデルに学習をさせた場合、エラーが返されます。サポート ベクターを破棄できるのは、線形モデルの場合だけです。

出力引数

すべて展開する

学習済みの線形 SVM 回帰モデル。RegressionSVM または CompactRegressionSVM モデルとして返されます。mdlOutmdl と同じ型になります。

サポート ベクターを破棄した後で、Alpha および SupportVectors プロパティは空 ([]) になります。表示には Alpha プロパティではなく Beta プロパティが使用されます。predict および resubPredict メソッドでは、Beta プロパティに格納されている係数を使用して予測応答を計算します。

すべて展開する

このモデルでは、サポート ベクターおよび他の関連パラメーターを破棄することにより、学習済みの線形 SVM 回帰モデルで使用するディスク領域を減らす方法を示します。

carsmall データセットを読み込みます。予測子変数 (X) として HorsepowerWeight を、応答変数 (Y) として MPG を指定します。

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 値が含まれていることに注意してください。モデルを学習させるときに、fitrsvmNaN 値が含まれている行を予測子データと応答データの両方から削除します。この結果、標本データに含まれている 100 個の観測値のうち 93 個のみが学習済みモデルで使用されます。

サポート ベクターおよび他の関連パラメーターを破棄します。

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 =

     []

表示には Alpha ではなく Beta が使用されます。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

Weight を予測子変数、MPG を応答変数として使用して、線形 SVM 回帰モデルを学習させます。データを標準化します。

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

MPG にはいくつかの NaN 値が含まれていることに注意してください。モデルを学習させるときに、fitrsvmNaN 値が含まれている行を予測子データと応答データの両方から削除します。この結果、標本データに含まれている 100 個の観測値のうち 94 個のみが学習済みモデルで使用されます。

回帰モデルを圧縮して、学習データと、学習プロセスに関連する一部の情報を破棄します。

compactMdl = compact(mdl);

compactMdl は、パラメーター、サポート ベクターおよび関連推定値が mdl と同じで、学習データが格納されていない CompactRegressionSVM モデルです。

圧縮したモデルのサポート ベクターおよび関連推定値を破棄します。

mdlOut = discardSupportVectors(compactMdl);

mdlOut は、パラメーターが mdl および compactMdl と同じで、サポート ベクターと関連推定値が格納されていない CompactRegressionSVM モデルです。

3 つの SVM 回帰モデル compactMdlmdl および 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 行 p 列の行列になります。nsv はサポート ベクターの数 (最大で学習標本のサイズ)、p は予測子変数の数です。いずれかの予測子がカテゴリカルである場合、すべてのカテゴリカル予測子レベルに対応するために必要なダミー変数の数が p に含まれます。Alpha プロパティは、要素が nsv 個あるベクトルです。

多くの観測値または事例が含まれている複雑なデータセットの場合、SupportVectors および Alpha プロパティが大きくなる可能性があります。しかし、Beta プロパティは要素が p 個のベクトルなので、大幅に小さくなる可能性があります。predict および resubPredict メソッドでは Beta を使用して予測応答を計算するので、サポート ベクターを破棄した場合でも、学習済みの SVM 回帰モデルを使用して応答値を予測できます。

学習済みの線形 SVM 回帰モデルに多数のサポート ベクターが含まれている場合は、discardSupportVectors を使用して、学習済みの SVM 回帰モデルが消費するディスク領域の量を減らしてください。サポート ベクター行列のサイズを表示するには、「size(mdlIn.SupportVectors)」と入力します。

アルゴリズム

predictresubPredict では、次の式を使用して応答値を推定します。

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

ここで、

  • β は、mdl.Beta として格納されるベータの値です。

  • β0 は、mdl.Bias として格納されるバイアスの値です。

  • X は、学習データです。

  • S は、mdl.KernelParameters.Scale として格納されるカーネル スケールの値です。

このようにすると、サポート ベクターを破棄した後でも、mdl.Beta の値を使用して予測を行うことができます。

R2015b で導入