このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fitcsvm
1 クラスおよびバイナリ分類用のサポート ベクター マシン (SVM) 分類器の学習
構文
説明
fitcsvm
は、低~中次元の予測子データセットにおける 1 クラスおよび 2 クラス (バイナリ) 分類について、サポート ベクター マシン (SVM) モデルに学習をさせるか、その交差検証を行います。fitcsvm
は、カーネル関数を使用する予測子データのマッピングをサポートし、逐次最小最適化 (SMO)、反復単一データ アルゴリズム (ISDA)、または二次計画法による L1 ソフト マージン最小化を目的関数最小化についてサポートします。
高次元データセット、つまり多数の予測子変数が含まれているデータセットに対するバイナリ分類の場合に線形 SVM モデルに学習をさせるには、代わりに fitclinear
を使用します。
バイナリ SVM モデルが結合されたマルチクラス学習の場合は、誤り訂正出力符号 (ECOC) を使用します。詳細は、fitcecoc
を参照してください。
SVM 回帰モデルに学習をさせる方法については、低~中次元の予測子データセットの場合は fitrsvm
、高次元データセットの場合は fitrlinear
を参照してください。
は、テーブル Mdl
= fitcsvm(Tbl
,ResponseVarName
)Tbl
に格納されている標本データを使用して学習させたサポート ベクター マシン (SVM) 分類器 Mdl
を返します。ResponseVarName
は、1 クラスまたは 2 クラス分類用のクラス ラベルが含まれている Tbl
内の変数の名前です。
クラス ラベル変数に 1 つしかクラスが含まれていない (たとえば、1 クラスのベクトル) 場合、fitcsvm
は 1 クラス分類用にモデルを学習させます。そうでない場合、関数は 2 クラス分類用にモデルを学習させます。
では、前の構文の入力引数に加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、交差検証の種類、誤分類のコスト、スコア変換関数の種類を指定できます。Mdl
= fitcsvm(___,Name,Value
)
例
入力引数
出力引数
制限
fitcsvm
は、1 クラスまたは 2 クラスの学習アプリケーションの場合に SVM 分類器に学習をさせます。クラスが 3 つ以上あるデータを使用して SVM 分類器を学習させるには、fitcecoc
を使用します。fitcsvm
は、低~中次元のデータセットをサポートします。高次元データセットの場合は、代わりにfitclinear
を使用してください。
詳細
ヒント
データセットが大規模でない限り、常に予測子を標準化してください (
Standardize
を参照してください)。標準化を行うと、予測子を測定するスケールの影響を受けなくなります。名前と値のペアの引数
KFold
を使用して交差検証を行うことをお勧めします。この交差検証の結果により、SVM 分類器の一般化の精度がわかります。1 クラス学習では、以下のようになります。
サポート ベクターのスパース性は SVM 分類器の望ましい特性です。サポート ベクターの数を少なくするには、
BoxConstraint
を大きい値に設定します。この場合、学習時間が長くなります。学習時間を最適にするには、使用しているコンピューターで許容されるメモリの制限値まで
CacheSize
を大きくします。サポート ベクターの個数が学習セット内の観測値数よりはるかに少ないと考えられる場合、名前と値のペアの引数
'ShrinkagePeriod'
を使用してアクティブ セットを縮小すると、収束を大幅に高速化することができます。'ShrinkagePeriod',1000
を指定することをお勧めします。判定境界から離れている重複する観測値は、収束に影響を与えません。しかし、重複する観測値が判定境界の近くに少しでもあると、収束が大幅に遅くなる可能性があります。収束を高速化するには、次の場合に
'RemoveDuplicates',true
を指定します。多数の重複する観測値がデータセットに含まれている。
少数の重複する観測値が判定境界の近くにあると考えられる。
学習時に元のデータセットを維持するため、
fitcsvm
は別々のデータセット、つまり元のデータセットおよび重複する観測値を除外したデータセットを一時的に格納しなければなりません。このため、重複がほとんど含まれていないデータセットの場合にtrue
を指定すると、fitcsvm
は元のデータの場合の 2 倍に近いメモリを消費します。モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。
アルゴリズム
SVM バイナリ分類アルゴリズムの数学的定式化については、バイナリ分類のサポート ベクター マシンとサポート ベクター マシンについてを参照してください。
NaN
、<undefined>
、空の文字ベクトル (''
)、空の string (""
)、および<missing>
値は、欠損値を示します。fitcsvm
は、欠損応答に対応するデータ行全体を削除します。fitcsvm
は、重みの合計を計算するときに (以下の項目を参照)、欠損している予測子が 1 つ以上ある観測値に対応する重みを無視します。これにより、平衡なクラスの問題で不平衡な事前確率が発生する可能性があります。したがって、観測値のボックス制約がBoxConstraint
に等しくならない可能性があります。名前と値の引数
Cost
、Prior
、およびWeights
を指定すると、出力モデル オブジェクトにCost
、Prior
、およびW
の各プロパティの指定値がそれぞれ格納されます。Cost
プロパティには、ユーザー指定のコスト行列 (C) が変更なしで格納されます。Prior
プロパティとW
プロパティには、正規化後の事前確率と観測値の重みがそれぞれ格納されます。モデルの学習用に、事前確率と観測値の重みが更新されて、コスト行列で指定されているペナルティが組み込まれます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。名前と値の引数
Cost
およびPrior
は 2 クラス学習用であることに注意してください。1 クラス学習の場合、Cost
プロパティには0
、Prior
プロパティには1
が格納されます。2 クラス学習の場合、
fitcsvm
は学習データの各観測値にボックス制約を割り当てます。観測値 j のボックス制約の式は、次のようになります。ここで、C0 は初期のボックス制約 (名前と値の引数
BoxConstraint
を参照)、wj* は観測値 j のCost
とPrior
で調整された観測値の重みです。観測値の重みの詳細については、誤分類コスト行列に応じた事前確率と観測値の重みの調整を参照してください。Standardize
をtrue
として指定し、名前と値の引数Cost
、Prior
、またはWeights
を設定した場合、fitcsvm
は対応する加重平均および加重標準偏差を使用して予測子を標準化します。つまり、fitcsvm
は、以下を使用して予測子 j (xj) を標準化します。ここで、xjk は予測子 j (列) の観測値 k (行) であり、次のようになります。
p
は学習データで予期される外れ値の比率であり、'OutlierFraction',p
を設定したと仮定します。1 クラス学習では、バイアス項の学習により、学習データの観測値のうち 100
p
% が負のスコアをもつようになります。2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100
p
% の削除が試行されます。削除された観測値は、勾配の大きいものに対応します。
予測子データにカテゴリカル変数が含まれている場合、一般にこれらの変数について完全なダミー エンコードが使用されます。各カテゴリカル変数の各レベルについて、1 つずつダミー変数が作成されます。
PredictorNames
プロパティには、元の予測子変数名のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、PredictorNames
は元の予測子変数名が含まれている 1 行 3 列の文字ベクトルの cell 配列になります。ExpandedPredictorNames
プロパティには、ダミー変数を含む予測子変数のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、ExpandedPredictorNames
は予測子変数および新しいダミー変数の名前が含まれている 1 行 5 列の文字ベクトルの cell 配列になります。同様に、
Beta
プロパティには、ダミー変数を含む各予測子について 1 つずつベータ係数が格納されます。SupportVectors
プロパティには、ダミー変数を含むサポート ベクターの予測子の値が格納されます。たとえば、m 個のサポート ベクターと 3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、SupportVectors
は n 行 5 列の行列になります。X
プロパティには、はじめに入力されたときの状態で学習データが格納され、ダミー変数は含まれません。入力がテーブルの場合、X
には予測子として使用した列のみが格納されます。
テーブルで予測子を指定した場合、いずれかの変数に順序付きのカテゴリが含まれていると、これらの変数について順序付きエンコードが使用されます。
k 個の順序付きレベルが変数に含まれている場合、k – 1 個のダミー変数が作成されます。j 番目のダミー変数は、j までのレベルについては –1、j + 1 から k までのレベルについては +1 になります。
ExpandedPredictorNames
プロパティに格納されるダミー変数の名前は 1 番目のレベルを示し、値は +1 になります。レベル 2, 3, ..., k の名前を含む k – 1 個の追加予測子名がダミー変数について格納されます。
どのソルバーも L1 ソフト マージン最小化を実装します。
1 クラス学習の場合、次の条件を満たすラグランジュ乗数 α1,...,αn が推定されます。
代替機能
異常検出用の 1 クラス SVM モデルの学習には、関数 ocsvm
も使用できます。
関数
ocsvm
は、関数fitcsvm
よりも簡単で推奨される異常検出用のワークフローを提供します。関数
ocsvm
は、OneClassSVM
オブジェクト、異常インジケーター、および異常スコアを返します。その出力を使用して学習データの異常を特定できます。新規のデータの異常を見つけるには、OneClassSVM
のオブジェクト関数isanomaly
を使用できます。関数isanomaly
は、新規データの異常インジケーターおよびスコアを返します。関数
fitcsvm
は、1 クラスとバイナリの両方の分類をサポートします。クラス ラベル変数に 1 つしかクラスが含まれていない場合 (1 のベクトルの場合など)、fitcsvm
は 1 クラス分類用にモデルを学習させ、ClassificationSVM
オブジェクトを返します。異常を特定するには、最初にClassificationSVM
のオブジェクト関数resubPredict
またはpredict
を使用して異常スコアを計算してから、負のスコアをもつ観測値を探して異常を特定する必要があります。ocsvm
では大きい正の異常スコアが異常を示すのに対し、ClassificationSVM
のpredict
では負のスコアが異常を示すことに注意してください。
関数
ocsvm
は SVM の主問題形式に基づいて判定境界を求めるのに対し、関数fitcsvm
は SVM の双対問題形式に基づいて判定境界を求めます。大規模な (n が大きい) データ セットについては、
ocsvm
のソルバーの方がfitcsvm
のソルバーよりも計算量が少なくなります。fitcsvm
のソルバーでは n 行 n 列のグラム行列の計算が必要ですが、ocsvm
のソルバーで必要なのは n 行 m 列の行列の形成だけです。ここで、m は拡張空間の次元数であり、ビッグ データにおいては一般に n よりもはるかに小さくなります。
参照
[1] 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.
[2] Fan, R.-E., P.-H. Chen, and C.-J. Lin. “Working set selection using second order information for training support vector machines.” Journal of Machine Learning Research, Vol. 6, 2005, pp. 1889–1918.
[3] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.
[4] Kecman V., T. -M. Huang, and M. Vogt. “Iterative Single Data Algorithm for Training Kernel Machines from Huge Data Sets: Theory and Performance.” Support Vector Machines: Theory and Applications. Edited by Lipo Wang, 255–274. Berlin: Springer-Verlag, 2005.
[5] 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 Comput., Vol. 13, Number 7, 2001, pp. 1443–1471.
[6] 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 で導入参考
ClassificationSVM
| CompactClassificationSVM
| ClassificationPartitionedModel
| predict
| fitSVMPosterior
| rng
| quadprog
(Optimization Toolbox) | fitcecoc
| fitclinear
| ocsvm