ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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 は入力として使用され、値は変更されません。

データ型: 構造体

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

サポート ベクターのクラス ラベル。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 には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値を格納します。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: single | double

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

モデルの学習に使用した一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

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

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

誤分類コスト。数値正方行列を指定します。Cost(i,j) は、真のクラスが i である場合に点をクラス j に分類するコストです。

学習時に、コスト行列で表されているペナルティが組み込まれて、事前確率が更新されます。

  • 2 クラス学習の Cost は、i ~= j の場合は Cost(i,j) = 1i = j の場合は Cost(i,j) = 0 という形式に必ずなります。行は真のクラスに、列は予測するクラスに対応します。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

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

詳細は、アルゴリズムを参照してください。

データ型: double

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

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

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

データ型: cell

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

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

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

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

データ型: single | double

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

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

データ型: cell

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

各クラスの事前確率。数値ベクトルを指定します。Prior の要素の順序は Mdl.ClassNames の要素に対応します。

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

詳細は、アルゴリズムを参照してください。

データ型: 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 | 関数ハンドル

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

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

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

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

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

データ型: single | double

オブジェクト関数

compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
discardSupportVectors線形サポート ベクター マシン (SVM) 分類器のサポート ベクターを破棄
edgeサポート ベクター マシン (SVM) 分類器の分類エッジを計算
fitPosteriorコンパクトなサポート ベクター マシン (SVM) 分類器の事後確率のあてはめ
lossサポート ベクター マシン (SVM) 分類器の分類誤差を計算
marginサポート ベクター マシン (SVM) 分類器の分類マージンを計算
predictサポート ベクター マシン (SVM) 分類器を使用したラベルの予測
updateコード生成用のサポート ベクター マシン (SVM) 分類モデルのパラメーターの更新

すべて折りたたむ

学習データを削除することにより、完全な 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.1343
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


  Properties, Methods

SVMModelClassificationSVM 分類器です。

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

CompactSVMModel = compact(SVMModel)
CompactSVMModel = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [90x1 double]
                     Bias: -0.1343
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           SupportVectors: [90x34 double]
      SupportVectorLabels: [90x1 double]


  Properties, Methods

CompactSVMModelCompactClassificationSVM 分類器です。

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

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

  CompactSVMModel      1x1              30512  classreg.learning.classif.CompactClassificationSVM              
  SVMModel             1x1             140834  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 = 
  classreg.learning.partition.ClassificationPartitionedModel
    CrossValidatedModel: 'SVM'
         PredictorNames: {1x34 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

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

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

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

CVSVMModel.Trained{1}
ans = 
  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [78x1 double]
                     Bias: -0.2209
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           SupportVectors: [78x34 double]
      SupportVectorLabels: [78x1 double]


  Properties, Methods

各分割は、データの 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 で導入