Main Content

discardSupportVectors

線形サポート ベクター マシン (SVM) 分類器のサポート ベクターを破棄

説明

Mdl = discardSupportVectors(MdlSV) は、学習済みの線形サポート ベクター マシン (SVM) モデル Mdl を返します。Mdl と学習済みの線形 SVM モデル MdlSV はどちらも、同じタイプのオブジェクトです。つまり、これらはどちらも ClassificationSVM オブジェクトまたは CompactClassificationSVM オブジェクトのいずれかです。ただし、MdlMdlSV は以下の点が異なります。

  • Mdl では、AlphaSupportVectors および SupportVectorLabels プロパティが空 ([]) になります。

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

すべて折りたたむ

サポート ベクターおよび他の関連パラメーターを破棄することにより、メモリ効率を高くした線形 SVM モデルを作成します。

ionosphere データ セットを読み込みます。

load ionosphere

データ セット全体を使用して線形 SVM モデルを学習させます。

MdlSV = fitcsvm(X,Y)
MdlSV = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 351
                    Alpha: [103x1 double]
                     Bias: -3.8827
         KernelParameters: [1x1 struct]
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


MdlSV 内のサポート ベクターの個数を表示します。

numSV = size(MdlSV.SupportVectors,1)
numSV = 103

X 内の予測子変数の個数を表示します。

p = size(X,2)
p = 34

既定では、fitcsvm は 2 クラス学習用に線形 SVM モデルを学習させます。表示には Alpha が使用されます。このモデルには 103 個のサポート ベクターと 34 個の予測子が含まれています。サポート ベクターを破棄すると、結果のモデルではメモリ消費量が少なくなります。

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

Mdl = discardSupportVectors(MdlSV)
Mdl = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 351
                     Beta: [34x1 double]
                     Bias: -3.8827
         KernelParameters: [1x1 struct]
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


Mdl 内の係数を表示します。

Mdl.Alpha
ans =

     []

Mdl 内のサポート ベクターを表示します。

Mdl.SupportVectors
ans =

     []

Mdl 内のサポート ベクターのクラス ラベルを表示します。

Mdl.SupportVectorLabels
ans =

     []

表示には Alpha ではなく Beta が使用されます。AlphaSupportVectors および SupportVectorLabels プロパティは空になります。

モデルのサイズを比較します。

vars = whos('MdlSV','Mdl');
100*(1 - vars(1).bytes/vars(2).bytes)
ans = 20.5263

MdlMdlSV より約 20% 小さくなっています。

MdlSV をワークスペースから削除します。

clear MdlSV

格納されているサポート ベクターおよび他の関連推定値を破棄することにより、SVM モデルを圧縮します。圧縮した SVM モデルを使用して、学習データの行についてラベルを予測します。

ionosphere データ セットを読み込みます。

load ionosphere
rng(1); % For reproducibility

既定のオプションを使用して SVM モデルに学習をさせます。

MdlSV = fitcsvm(X,Y);

MdlSV は、AlphaSupportVectors および SupportVectorLabels プロパティ値が空でない ClassificationSVM モデルです。

学習データ、サポート ベクターおよび関連推定値を破棄することにより、SVM モデルのサイズを小さくします。

CMdlSV = compact(MdlSV);               % Discard training data
CMdl = discardSupportVectors(CMdlSV);  % Discard support vectors

CMdlCompactClassificationSVM モデルです。

SVM モデル MdlSV および CMdl のサイズを比較します。

vars = whos('MdlSV','CMdl');
100*(1 - vars(1).bytes/vars(2).bytes)
ans = 96.7042

圧縮したモデル CMdl では、完全なモデルよりメモリ消費量が大幅に少なくなっています。

CMdl を使用して、学習データのランダムな行についてラベルを予測します。関数 predict は、圧縮された SVM モデルを受け入れます。また、線形 SVM モデルの場合は、新しい観測値に対するラベルの予測に AlphaSupportVectors および SupportVectorLabels プロパティを必要としません。

idx = randsample(size(X,1),1)
idx = 147
predictedLabel = predict(CMdl,X(idx,:))
predictedLabel = 1x1 cell array
    {'b'}

trueLabel = Y(idx)
trueLabel = 1x1 cell array
    {'b'}

入力引数

すべて折りたたむ

学習済みの線形 SVM モデル。ClassificationSVM または CompactClassificationSVM モデルとして指定されます。

MdlSV.KernelParameters.Function フィールドが 'linear' ではない場合 (つまり、MdlSV が線形 SVM モデルではない場合)、エラーが返されます。

ヒント

  • 学習済みの線形 SVM モデルの場合、SupportVectors プロパティは nsv 行 p 列の行列です。nsv はサポート ベクターの個数 (最大で学習標本のサイズ)、p は予測子または特徴量の個数です。Alpha および SupportVectorLabels プロパティは、nsv 個の要素があるベクトルです。多くの観測値または事例が含まれている複雑なデータ セットの場合、これらのプロパティが大きくなる可能性があります。Beta プロパティは、p 個の要素が含まれているベクトルです。

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

アルゴリズム

predictresubPredict は、次の式を使用して、SVM スコア f(x) の推定と、以後のラベル付けおよび事後確率の推定を行います。

f(x)=xβ+b.

β は Mdl.Beta、b は Mdl.Bias です。つまり、それぞれ MdlBeta および Bias プロパティです。詳細は、バイナリ分類のサポート ベクター マシンを参照してください。

拡張機能

バージョン履歴

R2015a で導入