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 の分類スコアは次のようになります。
Mdl では、β、b および s がそれぞれ Beta、Bias および KernelParameters.Scale プロパティに格納されます。
分類スコアを手動で推定するには、はじめに、学習時に適用したすべての変換を予測子データに適用しなければなりません。具体的には、fitcsvm を使用するときに 'Standardize',true を指定した場合は、平均 Mdl.Mu と標準偏差 Mdl.Sigma を使用して予測子データを手動で標準化してから、結果を Mdl.KernelParameters.Scale 内のカーネル スケールで除算しなければなりません。
resubPredict や predict など、すべての SVM 関数で、必要な変換の適用は推定の前に行われます。
KernelParameters.Function が 'linear' ではない場合、Beta は空 ([]) になります。
データ型: single | double
この プロパティ は読み取り専用です。
バイアス項。スカラーを指定します。
データ型: single | double
この プロパティ は読み取り専用です。
カーネル パラメーター。構造体配列を指定します。カーネル パラメーター プロパティには、次の表に記載されているフィールドが含まれます。
| フィールド | 説明 |
|---|---|
| 関数 | グラム行列の要素を計算するために使用するカーネル関数。詳細については、 |
| スケール | モデルに学習させる予測子データのすべての要素をスケーリングするために使用するカーネル スケール パラメーター。詳細については、 |
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 には展開された変数を表す名前が含まれます。それ以外の場合、ExpandedPredictorNames は PredictorNames と同じです。
データ型: 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) 分類器の事後確率の当てはめ |
gather | Gather properties of Statistics and Machine Learning Toolbox object from GPU |
incrementalLearner | バイナリ分類サポート ベクター マシン (SVM) モデルのインクリメンタル学習器への変換 |
lime | Local Interpretable Model-agnostic Explanations (LIME) |
loss | サポート ベクター マシン (SVM) 分類器の分類誤差を計算 |
margin | サポート ベクター マシン (SVM) 分類器の分類マージンを計算 |
partialDependence | 部分依存の計算 |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
predict | サポート ベクター マシン (SVM) 分類器を使用して観測値を分類 |
shapley | シャープレイ値 |
update | コード生成用にモデル パラメーターを更新 |
例
学習データを削除することにより、完全なサポート ベクター マシン (SVM) 分類器のサイズを縮小します。完全な SVM 分類器 (つまり、ClassificationSVM 分類器) には学習データが格納されます。効率を向上させるため、より小さい分類器を使用します。
ionosphere データ セットを読み込みます。
load ionosphereSVM 分類器を学習させます。予測子データを標準化し、クラスの順序を指定します。
SVMModel = fitcsvm(X,Y,'Standardize',true,... 'ClassNames',{'b','g'})
SVMModel =
ClassificationSVM
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
NumObservations: 351
Alpha: [90×1 double]
Bias: -0.1342
KernelParameters: [1×1 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 … ] (1×34 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 … ] (1×34 double)
BoxConstraints: [351×1 double]
ConvergenceInfo: [1×1 struct]
IsSupportVector: [351×1 logical]
Solver: 'SMO'
Properties, Methods
SVMModel は ClassificationSVM 分類器です。
SVM 分類器のサイズを縮小します。
CompactSVMModel = compact(SVMModel)
CompactSVMModel =
CompactClassificationSVM
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
Alpha: [90×1 double]
Bias: -0.1342
KernelParameters: [1×1 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 … ] (1×34 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 … ] (1×34 double)
SupportVectors: [90×34 double]
SupportVectorLabels: [90×1 double]
Properties, Methods
CompactSVMModel は CompactClassificationSVM 分類器です。
各分類器が使用するメモリの量を表示します。
whos('SVMModel','CompactSVMModel')
Name Size Bytes Class Attributes CompactSVMModel 1x1 30749 classreg.learning.classif.CompactClassificationSVM SVMModel 1x1 140279 ClassificationSVM
完全な SVM 分類器 (SVMModel) はコンパクトな SVM 分類器 (CompactSVMModel) に対して 4 倍以上大きくなっています。
新しい観測値のラベルを効率的に設定するため、SVMModel を MATLAB® ワークスペースから削除し、CompactSVMModel と新しい予測子の値を predict に渡すことができます。
コンパクトな SVM 分類器のサイズをさらに小さくするには、関数discardSupportVectorsを使用してサポート ベクターを破棄します。
ionosphere データ セットを読み込みます。
load ionosphereSVM 分類器の学習と交差検証を行います。予測子データを標準化し、クラスの順序を指定します。
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: [1×1 cvpartition]
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
Properties, Methods
CVSVMModel は ClassificationPartitionedModel 交差検証 SVM 分類器です。既定では、10 分割交差検証が実行されます。
あるいは、学習済みの ClassificationSVM 分類器を crossval に渡すことにより、この分類器を交差検証できます。
ドット表記を使用して、学習させた分割のいずれかを検査します。
CVSVMModel.Trained{1}ans =
CompactClassificationSVM
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
Alpha: [78×1 double]
Bias: -0.2210
KernelParameters: [1×1 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 … ] (1×34 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 … ] (1×34 double)
SupportVectors: [78×34 double]
SupportVectorLabels: [78×1 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.
拡張機能
使用上の注意事項および制限事項:
Simulink® に SVM 分類モデルの予測を統合するには、Statistics and Machine Learning Toolbox™ ライブラリにある ClassificationSVM Predict ブロックを使用するか、MATLAB Function ブロックを関数
predictと共に使用します。fitcsvmを使用して SVM モデルに学習をさせる場合、以下の制限が適用されます。名前と値のペアの引数
'ScoreTransform'の値を無名関数にすることはできません。新しい観測値が与えられた場合に事後確率を予測するコードを生成する場合、学習済みの SVM モデルをfitPosteriorまたはfitSVMPosteriorに渡します。返されるモデルのScoreTransformプロパティには、コード生成用に設定された、スコアを事後確率に変換する関数を表す無名関数が含まれています。固定小数点コードの生成では、名前と値のペアの引数
'ScoreTransform'の値を'invlogit'にすることはできません。また、名前と値のペアの引数'KernelFunction'の値は、'gaussian'、'linear'、または'polynomial'でなければなりません。固定小数点コードの生成およびコーダー コンフィギュアラーを使用するコード生成では、以下の追加制限が適用されます。
カテゴリカル予測子 (
logical、categorical、char、string、またはcell) はサポートされません。名前と値の引数CategoricalPredictorsは使用できません。カテゴリカル予測子をモデルに含めるには、モデルを当てはめる前にdummyvarを使用してカテゴリカル予測子を前処理します。categoricalデータ型のクラス ラベルはサポートされません。学習データ内のクラス ラベル値 (TblまたはY) および名前と値の引数ClassNamesの値はどちらもcategoricalデータ型の配列にはできません。
詳細は、コード生成の紹介を参照してください。
使用上の注意および制限:
次のオブジェクト関数は GPU 配列を完全にサポートしています。
次のオブジェクト関数は GPU 配列のサポートに制限があります。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014a で導入R2022a 以降では、指定したコストの値を使用して観測誤分類コストを計算できるように、Cost プロパティにユーザー指定のコスト行列が格納されます。ソフトウェアで格納される正規化された事前確率 (Prior) には、コスト行列で指定されているペナルティは反映されていません。観測誤分類コストを計算するには、関数 loss を呼び出すときに名前と値の引数 LossFun を "classifcost" として指定します。
モデルの学習は変更されていないため、クラス間の判定境界には変更がないことに注意してください。
学習用に、指定した事前確率が近似関数によって更新され、指定したコスト行列で指定されているペナルティが組み込まれます。さらに、事前確率と観測値の重みが正規化されます。この動作は変更されていません。以前のリリースでは、Cost プロパティには既定のコスト行列が格納され、Prior プロパティには学習に使用される事前確率が格納されていました。R2022a 以降では、ユーザー指定のコスト行列が変更なしで格納され、コストのペナルティが反映されていない正規化された事前確率が格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
Cost プロパティと Prior プロパティを使用するオブジェクト関数の一部を次に示します。
関数
lossは、名前と値の引数LossFunを"classifcost"または"mincost"として指定した場合、Costプロパティに格納されたコスト行列を使用します。関数
lossおよびedgeは、入力データの観測値の重みを正規化するために、Priorプロパティに格納された事前確率を使用します。
分類モデルに学習させるときに既定以外のコスト行列を指定すると、オブジェクト関数で以前のリリースとは異なる値が返されます。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior と Weights を使用して指定し、既定のコスト行列を使用します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)