このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
CompactClassificationSVM
1 クラスおよびバイナリ分類用のコンパクトなサポート ベクター マシン (SVM)
説明
CompactClassificationSVM
はコンパクトなバージョンのサポート ベクター マシン (SVM) 分類器です。コンパクトな分類器には、SVM 分類器の学習に使用するデータが含まれません。このため、コンパクトな分類器を使用して交差検証など一部のタスクを実行することはできません。コンパクトな SVM 分類器は、新しいデータに対するラベルの予測などのタスクに使用します。
作成
CompactClassificationSVM
モデルは、compact
を使用して完全な学習済み ClassificationSVM
分類器から作成します。
プロパティ
SVM のプロパティ
Alpha
— 学習済み分類器の係数
数値ベクトル
この プロパティ は読み取り専用です。
学習済み分類器の係数。s 行 1 列の数値ベクトルを指定します。s は学習済み分類器に含まれているサポート ベクターの個数 (sum(Mdl.IsSupportVector)
) です。
Alpha
には、双対問題に対する学習済み分類器の係数、つまり推定したラグランジュ乗数が格納されます。fitcsvm
の名前と値のペアの引数 RemoveDuplicates
を使用して重複を削除した場合、サポート ベクターである重複する観測値の特定の集合に対して、集合全体に対応する 1 つの係数が Alpha
に格納されます。つまり、MATLAB® は、ある非ゼロ係数を重複集合内の 1 つの観測値によるものとし、係数 0
は集合内の他のすべての重複観測値によるものとします。
データ型: single
| double
Beta
— 線形予測子の係数
数値ベクトル
この プロパティ は読み取り専用です。
線形予測子の係数。数値ベクトルを指定します。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
Bias
— バイアス項
スカラー
この プロパティ は読み取り専用です。
バイアス項。スカラーを指定します。
データ型: single
| double
KernelParameters
— カーネル パラメーター
構造体配列
この プロパティ は読み取り専用です。
カーネル パラメーター。構造体配列を指定します。カーネル パラメーター プロパティには、次の表に記載されているフィールドが含まれます。
フィールド | 説明 |
---|---|
関数 | グラム行列の要素を計算するために使用するカーネル関数。詳細については、 |
スケール | モデルに学習させる予測子データのすべての要素をスケーリングするために使用するカーネル スケール パラメーター。詳細については、 |
KernelParameters
の値を表示するには、ドット表記を使用します。たとえば、Mdl.KernelParameters.Scale
はカーネル スケール パラメーターの値を表示します。
KernelParameters
は入力として使用され、値は変更されません。
データ型: struct
SupportVectorLabels
— サポート ベクターのクラス ラベル
s 行 1 列の数値ベクトル
この プロパティ は読み取り専用です。
サポート ベクターのクラス ラベル。s 行 1 列の数値ベクトルを指定します。s は学習済み分類器に含まれているサポート ベクターの個数 (sum(Mdl.IsSupportVector)
) です。
SupportVectorLabels
の +1
という値は、対応するサポート ベクターが陽性クラス (ClassNames{2}
) に含まれることを示します。–1
という値は、対応するサポート ベクターが陰性クラス (ClassNames{1}
) に含まれていることを示します。
fitcsvm
の名前と値のペアの引数 RemoveDuplicates
を使用して重複を削除した場合、サポート ベクターである重複する観測値の特定の集合に対して、SupportVectorLabels
には一意なサポート ベクターのラベルが 1 つ含まれます。
データ型: single
| double
SupportVectors
— サポート ベクター
s 行 p 列の数値行列
この プロパティ は読み取り専用です。
学習済み分類器内のサポート ベクター。s 行 p 列の数値行列を指定します。s は学習済み分類器内のサポート ベクターの個数 (sum(Mdl.IsSupportVector)
)、p は予測子データ内の予測子変数の個数です。
SupportVectors
には、MATLAB でサポート ベクターと見なされる予測子データ X
の行が格納されます。fitcsvm
を使用して SVM 分類器に学習をさせるときに 'Standardize',true
を指定した場合、SupportVectors
には標準化された X
の行が格納されます。
fitcsvm
の名前と値のペアの引数 RemoveDuplicates
を使用して重複を削除した場合、サポート ベクターである重複する観測値の特定の集合に対して、SupportVectors
には一意なサポート ベクターが 1 つ含まれます。
データ型: single
| double
他の分類のプロパティ
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: double
ClassNames
— 一意のクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames
のデータ型はクラス ラベル Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames
はクラスの順序も決定します。
データ型: single
| double
| logical
| char
| cell
| categorical
Cost
— 誤分類のコスト
数値正方行列
この プロパティ は読み取り専用です。
誤分類のコスト。数値正方行列として指定します。
2 クラス学習の場合、
Cost
プロパティには、近似関数の名前と値の引数Cost
で指定された誤分類コスト行列が格納されます。行は真のクラスに、列は予測するクラスに対応します。つまり、Cost(i,j)
は、真のクラスがi
である場合に点をクラスj
に分類するコストです。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。1 クラス学習では、
Cost = 0
です。
データ型: double
ExpandedPredictorNames
— 展開された予測子名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
展開された予測子名。文字ベクトルの cell 配列を指定します。
モデルでカテゴリカル変数用にダミー変数のエンコードを使用している場合、ExpandedPredictorNames
には展開された変数を表す名前が含まれます。それ以外の場合、ExpandedPredictorNames
は PredictorNames
と同じです。
データ型: cell
Mu
— 予測子の平均
数値ベクトル | []
この プロパティ は読み取り専用です。
予測子の平均。数値ベクトルを指定します。fitcsvm
を使用して SVM 分類器に学習させるときに 'Standardize',1
または 'Standardize',true
を指定した場合、Mu
の長さは予測子の数と等しくなります。
MATLAB では、ダミー変数を使用して予測子データ内のカテゴリカル変数が拡張されます。Mu
には、ダミー変数を含む各予測子変数について 1 つずつ値が格納されます。ただし、カテゴリカル変数が含まれている列は MATLAB では標準化されません。
fitcsvm
を使用して SVM 分類器に学習をさせるときに 'Standardize',false
を設定した場合、Mu
は空ベクトル ([]
) です。
データ型: single
| double
PredictorNames
— 予測子変数名
文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames
の要素の順序は、予測子名が学習データに現れる順序に対応します。
データ型: cell
Prior
— 事前確率
数値ベクトル
この プロパティ は読み取り専用です。
各クラスの事前確率。数値ベクトルを指定します。
2 クラス学習の場合、コスト行列を指定すると、そのコスト行列で指定されているペナルティが組み込まれ、事前確率が更新されます。
2 クラス学習では、近似関数の名前と値の引数
Prior
で指定された事前確率が確率の合計が 1 になるように正規化されます。Prior
プロパティには正規化された事前確率が格納されます。Prior
の要素の順序はMdl.ClassNames
の要素に対応します。1 クラス学習では、
Prior = 1
です。
データ型: single
| double
ScoreTransform
— スコア変換
文字ベクトル | 関数ハンドル
スコア変換。文字ベクトルまたは関数ハンドルを指定します。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
Sigma
— 予測子の標準偏差
[]
(既定値) | 数値ベクトル
この プロパティ は読み取り専用です。
予測子の標準偏差。数値ベクトルを指定します。
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 | GPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集 |
incrementalLearner | バイナリ分類サポート ベクター マシン (SVM) モデルのインクリメンタル学習器への変換 |
lime | Local Interpretable Model-agnostic Explanations (LIME) |
loss | サポート ベクター マシン (SVM) 分類器の分類誤差を計算 |
margin | サポート ベクター マシン (SVM) 分類器の分類マージンを計算 |
partialDependence | 部分従属の計算 |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
predict | サポート ベクター マシン (SVM) 分類器を使用して観測値を分類 |
shapley | シャープレイ値 |
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.1342 KernelParameters: [1x1 struct] Mu: [0.8917 0 0.6413 0.0444 0.6011 0.1159 0.5501 ... ] Sigma: [0.3112 0 0.4977 0.4414 0.5199 0.4608 0.4927 ... ] BoxConstraints: [351x1 double] ConvergenceInfo: [1x1 struct] IsSupportVector: [351x1 logical] Solver: 'SMO' Properties, Methods
SVMModel
は ClassificationSVM
分類器です。
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 ... ] Sigma: [0.3112 0 0.4977 0.4414 0.5199 0.4608 0.4927 ... ] SupportVectors: [90x34 double] SupportVectorLabels: [90x1 double] Properties, Methods
CompactSVMModel
は CompactClassificationSVM
分類器です。
各分類器が使用するメモリの量を表示します。
whos('SVMModel','CompactSVMModel')
Name Size Bytes Class Attributes CompactSVMModel 1x1 31058 classreg.learning.classif.CompactClassificationSVM SVMModel 1x1 141148 ClassificationSVM
完全な SVM 分類器 (SVMModel
) はコンパクトな SVM 分類器 (CompactSVMModel
) に対して 4 倍以上大きくなっています。
新しい観測値のラベルを効率的に設定するため、SVMModel
を MATLAB® ワークスペースから削除し、CompactSVMModel
と新しい予測子の値を predict
に渡すことができます。
コンパクトな SVM 分類器のサイズをさらに小さくするには、関数discardSupportVectors
を使用してサポート ベクターを破棄します。
SVM 分類器の学習と交差検証
ionosphere
データセットを読み込みます。
load ionosphere
SVM 分類器の学習と交差検証を行います。予測子データを標準化し、クラスの順序を指定します。
rng(1); % For reproducibility CVSVMModel = fitcsvm(X,Y,'Standardize',true,... 'ClassNames',{'b','g'},'CrossVal','on')
CVSVMModel = ClassificationPartitionedModel CrossValidatedModel: 'SVM' PredictorNames: {1x34 cell} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 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: [78x1 double] Bias: -0.2209 KernelParameters: [1x1 struct] Mu: [0.8888 0 0.6320 0.0406 0.5931 0.1205 0.5361 ... ] Sigma: [0.3149 0 0.5033 0.4441 0.5255 0.4663 0.4987 ... ] 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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
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 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
次のオブジェクト関数は GPU 配列を完全にサポートしています。
次のオブジェクト関数は GPU 配列のサポートに制限があります。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014a で導入R2022a: Cost
プロパティにユーザー指定のコスト行列を格納
R2022a 以降では、指定したコストの値を使用して観測誤分類コストを計算できるように、Cost
プロパティにユーザー指定のコスト行列が格納されます。ソフトウェアで格納される正規化された事前確率 (Prior
) には、コスト行列で指定されているペナルティは反映されていません。観測誤分類コストを計算するには、関数 loss
を呼び出すときに名前と値の引数 LossFun
を "classifcost"
として指定します。
モデルの学習は変更されていないため、クラス間の判定境界には変更がないことに注意してください。
学習用に、指定した事前確率が近似関数によって更新され、指定したコスト行列で指定されているペナルティが組み込まれます。さらに、事前確率と観測値の重みが正規化されます。この動作は変更されていません。以前のリリースでは、Cost
プロパティには既定のコスト行列が格納され、Prior
プロパティには学習に使用される事前確率が格納されていました。R2022a 以降では、ユーザー指定のコスト行列が変更なしで格納され、コストのペナルティが反映されていない正規化された事前確率が格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
Cost
プロパティと Prior
プロパティを使用するオブジェクト関数の一部を次に示します。
関数
loss
は、名前と値の引数LossFun
を"classifcost"
または"mincost"
として指定した場合、Cost
プロパティに格納されたコスト行列を使用します。関数
loss
およびedge
は、入力データの観測値の重みを正規化するために、Prior
プロパティに格納された事前確率を使用します。
分類モデルに学習させるときに既定以外のコスト行列を指定すると、オブジェクト関数で以前のリリースとは異なる値が返されます。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior
と Weights
を使用して指定し、既定のコスト行列を使用します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)