Main Content

CompactClassificationSVM

1 クラスおよびバイナリ分類用のコンパクトなサポート ベクター マシン (SVM)

説明

CompactClassificationSVM はコンパクトなバージョンのサポート ベクター マシン (SVM) 分類器です。コンパクトな分類器には、SVM 分類器の学習に使用するデータが含まれません。このため、コンパクトな分類器を使用して交差検証など一部のタスクを実行することはできません。コンパクトな SVM 分類器は、新しいデータに対するラベルの予測などのタスクに使用します。

作成

CompactClassificationSVM モデルは、compact を使用して完全な学習済み ClassificationSVM 分類器から作成します。

プロパティ

すべて展開する

SVM のプロパティ

この プロパティ は読み取り専用です。

学習済み分類器の係数。s 行 1 列の数値ベクトルを指定します。s は学習済み分類器に含まれているサポート ベクターの個数 (sum(Mdl.IsSupportVector)) です。

Alpha には、双対問題に対する学習済み分類器の係数、つまり推定したラグランジュ乗数が格納されます。fitcsvm の名前と値のペアの引数 RemoveDuplicates を使用して重複を削除した場合、サポート ベクターである重複する観測値の特定の集合に対して、集合全体に対応する 1 つの係数が Alpha に格納されます。つまり、MATLAB® は、ある非ゼロ係数を重複集合内の 1 つの観測値によるものとし、係数 0 は集合内の他のすべての重複観測値によるものとします。

データ型: single | double

この プロパティ は読み取り専用です。

線形予測子の係数。数値ベクトルを指定します。Beta の長さは、モデルの学習に使用する予測子の個数と同じです。

MATLAB では、完全なダミー エンコードを使用して予測子データ内のカテゴリカル変数が拡張されます。つまり、MATLAB では各カテゴリカル変数の各レベルについて 1 つずつダミー変数が作成されます。Beta には、ダミー変数を含む各予測子変数について 1 つずつ値が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数である場合、Beta は 5 つの値が含まれている数値ベクトルになります。

KernelParameters.Function'linear' である場合、観測値 x の分類スコアは次のようになります。

f(x)=(x/s)β+b.

Mdl では、β、b および s がそれぞれ BetaBias および KernelParameters.Scale プロパティに格納されます。

分類スコアを手動で推定するには、はじめに、学習時に適用したすべての変換を予測子データに適用しなければなりません。具体的には、fitcsvm を使用するときに 'Standardize',true を指定した場合は、平均 Mdl.Mu と標準偏差 Mdl.Sigma を使用して予測子データを手動で標準化してから、結果を Mdl.KernelParameters.Scale 内のカーネル スケールで除算しなければなりません。

resubPredictpredict など、すべての SVM 関数で、必要な変換の適用は推定の前に行われます。

KernelParameters.Function'linear' ではない場合、Beta は空 ([]) になります。

データ型: single | double

この プロパティ は読み取り専用です。

バイアス項。スカラーを指定します。

データ型: single | double

この プロパティ は読み取り専用です。

カーネル パラメーター。構造体配列を指定します。カーネル パラメーター プロパティには、次の表に記載されているフィールドが含まれます。

フィールド説明
関数

グラム行列の要素を計算するために使用するカーネル関数。詳細については、'KernelFunction' を参照してください。

スケール

モデルに学習させる予測子データのすべての要素をスケーリングするために使用するカーネル スケール パラメーター。詳細については、'KernelScale' を参照してください。

KernelParameters の値を表示するには、ドット表記を使用します。たとえば、Mdl.KernelParameters.Scale はカーネル スケール パラメーターの値を表示します。

KernelParameters は入力として使用され、値は変更されません。

データ型: struct

この プロパティ は読み取り専用です。

サポート ベクターのクラス ラベル。s 行 1 列の数値ベクトルを指定します。s は学習済み分類器に含まれているサポート ベクターの個数 (sum(Mdl.IsSupportVector)) です。

SupportVectorLabels+1 という値は、対応するサポート ベクターが陽性クラス (ClassNames{2}) に含まれることを示します。–1 という値は、対応するサポート ベクターが陰性クラス (ClassNames{1}) に含まれていることを示します。

fitcsvm の名前と値のペアの引数 RemoveDuplicates を使用して重複を削除した場合、サポート ベクターである重複する観測値の特定の集合に対して、SupportVectorLabels には一意なサポート ベクターのラベルが 1 つ含まれます。

データ型: single | double

この プロパティ は読み取り専用です。

学習済み分類器内のサポート ベクター。s 行 p 列の数値行列を指定します。s は学習済み分類器内のサポート ベクターの個数 (sum(Mdl.IsSupportVector))、p は予測子データ内の予測子変数の個数です。

SupportVectors には、MATLAB でサポート ベクターと見なされる予測子データ X の行が格納されます。fitcsvm を使用して SVM 分類器に学習をさせるときに 'Standardize',true を指定した場合、SupportVectors には標準化された X の行が格納されます。

fitcsvm の名前と値のペアの引数 RemoveDuplicates を使用して重複を削除した場合、サポート ベクターである重複する観測値の特定の集合に対して、SupportVectors には一意なサポート ベクターが 1 つ含まれます。

データ型: single | double

他の分類のプロパティ

この プロパティ は読み取り専用です。

カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: double

この プロパティ は読み取り専用です。

学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames のデータ型はクラス ラベル Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames はクラスの順序も決定します。

データ型: single | double | logical | char | cell | categorical

この プロパティ は読み取り専用です。

誤分類のコスト。数値正方行列として指定します。

  • 2 クラス学習の場合、Cost プロパティには、近似関数の名前と値の引数 Cost で指定された誤分類コスト行列が格納されます。行は真のクラスに、列は予測するクラスに対応します。つまり、Cost(i,j) は、真のクラスが i である場合に点をクラス j に分類するコストです。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

  • 1 クラス学習では、Cost = 0 です。

データ型: double

この プロパティ は読み取り専用です。

展開された予測子名。文字ベクトルの cell 配列を指定します。

モデルでカテゴリカル変数用にダミー変数のエンコードを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が含まれます。それ以外の場合、ExpandedPredictorNamesPredictorNames と同じです。

データ型: cell

この プロパティ は読み取り専用です。

予測子の平均。数値ベクトルを指定します。fitcsvm を使用して SVM 分類器に学習させるときに 'Standardize',1 または 'Standardize',true を指定した場合、Mu の長さは予測子の数と等しくなります。

MATLAB では、ダミー変数を使用して予測子データ内のカテゴリカル変数が拡張されます。Mu には、ダミー変数を含む各予測子変数について 1 つずつ値が格納されます。ただし、カテゴリカル変数が含まれている列は MATLAB では標準化されません。

fitcsvm を使用して SVM 分類器に学習をさせるときに 'Standardize',false を設定した場合、Mu は空ベクトル ([]) です。

データ型: single | double

この プロパティ は読み取り専用です。

予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。

データ型: cell

この プロパティ は読み取り専用です。

各クラスの事前確率。数値ベクトルを指定します。

2 クラス学習の場合、コスト行列を指定すると、そのコスト行列で指定されているペナルティが組み込まれ、事前確率が更新されます。

  • 2 クラス学習では、近似関数の名前と値の引数 Prior で指定された事前確率が確率の合計が 1 になるように正規化されます。Prior プロパティには正規化された事前確率が格納されます。Prior の要素の順序は Mdl.ClassNames の要素に対応します。

  • 1 クラス学習では、Prior = 1 です。

データ型: single | double

スコア変換。文字ベクトルまたは関数ハンドルを指定します。ScoreTransform は、組み込みの変換関数または予測した分類スコアを変換する関数のハンドルを表します。

スコア変換関数を function などに変更するには、ドット表記を使用します。

  • 組み込み関数の場合は、文字ベクトルを入力します。

    Mdl.ScoreTransform = 'function';

    次の表は、使用可能な組み込み関数の一覧です。

    説明
    'doublelogit'1/(1 + e–2x)
    'invlogit'log(x / (1 – x))
    'ismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する
    'logit'1/(1 + e–x)
    'none' または 'identity'x (変換なし)
    'sign'x < 0 のとき –1
    x = 0 のとき 0
    x > 0 のとき 1
    'symmetric'2x – 1
    'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する
    'symmetriclogit'2/(1 + e–x) – 1

  • MATLAB 関数やユーザー定義関数の場合は、関数ハンドルを入力します。

    Mdl.ScoreTransform = @function;

    function は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。

データ型: char | function_handle

この プロパティ は読み取り専用です。

予測子の標準偏差。数値ベクトルを指定します。

fitcsvm を使用して SVM 分類器に学習させるときに 'Standardize',true を指定した場合、Sigma の長さは予測子変数の数と等しくなります。

MATLAB では、ダミー変数を使用して予測子データ内のカテゴリカル変数が拡張されます。Sigma には、ダミー変数を含む各予測子変数について 1 つずつ値が格納されます。ただし、カテゴリカル変数が含まれている列は MATLAB では標準化されません。

fitcsvm を使用して SVM 分類器に学習をさせるときに 'Standardize',false を設定した場合、Sigma は空ベクトル ([]) です。

データ型: single | double

オブジェクト関数

compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
discardSupportVectors線形サポート ベクター マシン (SVM) 分類器のサポート ベクターを破棄
edgeサポート ベクター マシン (SVM) 分類器の分類エッジを計算
fitPosteriorコンパクトなサポート ベクター マシン (SVM) 分類器の事後確率の当てはめ
gatherGPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集
incrementalLearnerバイナリ分類サポート ベクター マシン (SVM) モデルのインクリメンタル学習器への変換
limeLocal Interpretable Model-agnostic Explanations (LIME)
lossサポート ベクター マシン (SVM) 分類器の分類誤差を計算
marginサポート ベクター マシン (SVM) 分類器の分類マージンを計算
partialDependence部分依存の計算
plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predictサポート ベクター マシン (SVM) 分類器を使用して観測値を分類
shapleyシャープレイ値
updateコード生成用にモデル パラメーターを更新

すべて折りたたむ

学習データを削除することにより、完全なサポート ベクター マシン (SVM) 分類器のサイズを縮小します。完全な SVM 分類器 (つまり、ClassificationSVM 分類器) には学習データが格納されます。効率を向上させるため、より小さい分類器を使用します。

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

load ionosphere

SVM 分類器を学習させます。予測子データを標準化し、クラスの順序を指定します。

SVMModel = fitcsvm(X,Y,'Standardize',true,...
    'ClassNames',{'b','g'})
SVMModel = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
          NumObservations: 351
                    Alpha: [90x1 double]
                     Bias: -0.1342
         KernelParameters: [1x1 struct]
                       Mu: [0.8917 0 0.6413 0.0444 0.6011 0.1159 0.5501 0.1194 0.5118 0.1813 0.4762 0.1550 0.4008 0.0934 0.3442 0.0711 0.3819 -0.0036 0.3594 -0.0240 0.3367 0.0083 0.3625 -0.0574 0.3961 -0.0712 0.5416 -0.0695 0.3784 ... ] (1x34 double)
                    Sigma: [0.3112 0 0.4977 0.4414 0.5199 0.4608 0.4927 0.5207 0.5071 0.4839 0.5635 0.4948 0.6222 0.4949 0.6528 0.4584 0.6180 0.4968 0.6263 0.5191 0.6098 0.5182 0.6038 0.5275 0.5785 0.5085 0.5162 0.5500 0.5759 0.5080 ... ] (1x34 double)
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


SVMModelClassificationSVM 分類器です。

SVM 分類器のサイズを縮小します。

CompactSVMModel = compact(SVMModel)
CompactSVMModel = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [90x1 double]
                     Bias: -0.1342
         KernelParameters: [1x1 struct]
                       Mu: [0.8917 0 0.6413 0.0444 0.6011 0.1159 0.5501 0.1194 0.5118 0.1813 0.4762 0.1550 0.4008 0.0934 0.3442 0.0711 0.3819 -0.0036 0.3594 -0.0240 0.3367 0.0083 0.3625 -0.0574 0.3961 -0.0712 0.5416 -0.0695 0.3784 ... ] (1x34 double)
                    Sigma: [0.3112 0 0.4977 0.4414 0.5199 0.4608 0.4927 0.5207 0.5071 0.4839 0.5635 0.4948 0.6222 0.4949 0.6528 0.4584 0.6180 0.4968 0.6263 0.5191 0.6098 0.5182 0.6038 0.5275 0.5785 0.5085 0.5162 0.5500 0.5759 0.5080 ... ] (1x34 double)
           SupportVectors: [90x34 double]
      SupportVectorLabels: [90x1 double]


CompactSVMModelCompactClassificationSVM 分類器です。

各分類器が使用するメモリの量を表示します。

whos('SVMModel','CompactSVMModel')
  Name                 Size             Bytes  Class                                                 Attributes

  CompactSVMModel      1x1              31227  classreg.learning.classif.CompactClassificationSVM              
  SVMModel             1x1             141317  ClassificationSVM                                               

完全な SVM 分類器 (SVMModel) はコンパクトな SVM 分類器 (CompactSVMModel) に対して 4 倍以上大きくなっています。

新しい観測値のラベルを効率的に設定するため、SVMModel を MATLAB® ワークスペースから削除し、CompactSVMModel と新しい予測子の値を predict に渡すことができます。

コンパクトな SVM 分類器のサイズをさらに小さくするには、関数discardSupportVectorsを使用してサポート ベクターを破棄します。

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

load ionosphere

SVM 分類器の学習と交差検証を行います。予測子データを標準化し、クラスの順序を指定します。

rng(1);  % For reproducibility
CVSVMModel = fitcsvm(X,Y,'Standardize',true,...
    'ClassNames',{'b','g'},'CrossVal','on')
CVSVMModel = 
  ClassificationPartitionedModel
    CrossValidatedModel: 'SVM'
         PredictorNames: {'x1'  'x2'  'x3'  'x4'  'x5'  'x6'  'x7'  'x8'  'x9'  'x10'  'x11'  'x12'  'x13'  'x14'  'x15'  'x16'  'x17'  'x18'  'x19'  'x20'  'x21'  'x22'  'x23'  'x24'  'x25'  'x26'  'x27'  'x28'  'x29'  'x30'  'x31'  'x32'  'x33'  'x34'}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


CVSVMModelClassificationPartitionedModel 交差検証 SVM 分類器です。既定では、10 分割交差検証が実行されます。

あるいは、学習済みの ClassificationSVM 分類器を crossval に渡すことにより、この分類器を交差検証できます。

ドット表記を使用して、学習させた分割のいずれかを検査します。

CVSVMModel.Trained{1}
ans = 
  CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [78x1 double]
                     Bias: -0.2210
         KernelParameters: [1x1 struct]
                       Mu: [0.8888 0 0.6320 0.0406 0.5931 0.1205 0.5361 0.1286 0.5083 0.1879 0.4779 0.1567 0.3924 0.0875 0.3360 0.0789 0.3839 9.6066e-05 0.3562 -0.0308 0.3398 -0.0073 0.3590 -0.0628 0.4064 -0.0664 0.5535 -0.0749 0.3835 ... ] (1x34 double)
                    Sigma: [0.3149 0 0.5033 0.4441 0.5255 0.4663 0.4987 0.5205 0.5040 0.4780 0.5649 0.4896 0.6293 0.4924 0.6606 0.4535 0.6133 0.4878 0.6250 0.5140 0.6075 0.5150 0.6068 0.5222 0.5729 0.5103 0.5061 0.5478 0.5712 0.5032 ... ] (1x34 double)
           SupportVectors: [78x34 double]
      SupportVectorLabels: [78x1 double]


各分割は、データの 90% で学習済みの CompactClassificationSVM 分類器です。

汎化誤差を推定します。

genError = kfoldLoss(CVSVMModel)
genError = 0.1168

平均すると汎化誤差は約 12% です。

参照

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

[2] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. “Estimating the Support of a High-Dimensional Distribution.” Neural Computation. Vol. 13, Number 7, 2001, pp. 1443–1471.

[3] Christianini, N., and J. C. Shawe-Taylor. An Introduction to Support Vector Machines and Other Kernel-Based Learning Methods. Cambridge, UK: Cambridge University Press, 2000.

[4] Scholkopf, B., and A. Smola. Learning with Kernels: Support Vector Machines, Regularization, Optimization and Beyond, Adaptive Computation and Machine Learning. Cambridge, MA: The MIT Press, 2002.

拡張機能

バージョン履歴

R2014a で導入

すべて展開する