最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
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 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、交差検証の種類、誤分類のコスト、スコア変換関数の種類を指定できます。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
に等しくならない可能性があります。
fitcsvm
は、重みまたは事前確率がゼロの観測値を削除します。
2 クラス学習でコスト行列 (Cost
を参照) を指定した場合、 で表されているペナルティを組み込むことにより、クラスの事前確率 p (Prior
を参照) が pc に更新されます。
具体的には、fitcsvm
は以下のステップを完了します。
を計算します。
更新された事前確率の合計が 1 になるように pc* を正規化します。
K はクラスの個数です。
コスト行列を既定値にリセットします。
事前確率がゼロのクラスに対応する観測値を学習データから削除します。
2 クラス学習の場合、fitcsvm
は合計が 1 になるようにすべての観測値の重み (Weights
を参照) を正規化します。その後、観測値が属しているクラスの更新後の事前確率に重みの合計が等しくなるように、正規化された重みを再度正規化します。つまり、クラス k の観測値 j について、重みの合計は次のようになります。
ここで、wj は観測値 j の正規化された重み、pc,k はクラス k の更新された事前確率 (前の項目を参照) です。
2 クラス学習の場合、fitcsvm
は学習データの各観測値にボックス制約を割り当てます。観測値 j のボックス制約の式は、次のようになります。
ここで、n は学習標本のサイズ、C0 は初期のボックス制約 (名前と値のペアの引数 'BoxConstraint'
を参照)、 は観測値 j の重みの合計 (前の項目を参照) です。
'Standardize',true
と訛れと値のペアの引数 'Cost'
、'Prior'
または 'Weights'
を設定した場合、fitcsvm
は対応する加重平均および加重標準偏差を使用して予測子を標準化します。つまり、fitcsvm
は以下を使用して予測子 j (xj) を標準化します。
xjk は、予測子 j (列) の観測値 k (行) です。
p
は学習データで予期される外れ値の比率であり、'OutlierFraction',p
を設定したと仮定します。
1 クラス学習では、バイアス項の学習により、学習データの観測値のうち 100p
% が負のスコアをもつようになります。
2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100p
% の削除が試行されます。削除された観測値は、勾配の大きいものに対応します。
予測子データにカテゴリカル変数が含まれている場合、一般にこれらの変数について完全なダミー エンコードが使用されます。各カテゴリカル変数の各レベルについて、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] 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.
ClassificationPartitionedModel
| ClassificationSVM
| CompactClassificationSVM
| fitcecoc
| fitclinear
| fitSVMPosterior
| predict
| rng
| quadprog
(Optimization Toolbox)