fitcsvm
1 クラスおよびバイナリ分類用のサポート ベクター マシン (SVM) 分類器の学習
構文
説明
fitcsvm は、低~中次元の予測子データ セットにおける 1 クラスおよび 2 クラス (バイナリ) 分類について、サポート ベクター マシン (SVM) モデルに学習をさせるか、その交差検証を行います。fitcsvm は、カーネル関数を使用する予測子データのマッピングをサポートし、逐次最小最適化 (SMO)、反復単一データ アルゴリズム (ISDA)、または二次計画法による L1 ソフト マージン最小化を目的関数最小化についてサポートします。
高次元データ セット、つまり多数の予測子変数が含まれているデータ セットに対するバイナリ分類の場合に線形 SVM モデルに学習をさせるには、代わりに fitclinear を使用します。
バイナリ SVM モデルが結合されたマルチクラス学習の場合は、誤り訂正出力符号 (ECOC) を使用します。詳細は、fitcecocを参照してください。
SVM 回帰モデルに学習をさせる方法については、低~中次元の予測子データ セットの場合は fitrsvm、高次元データ セットの場合は fitrlinear を参照してください。
は、table Mdl = fitcsvm(Tbl,ResponseVarName)Tbl に格納されている標本データを使用して学習させたサポート ベクター マシン (SVM) 分類器 Mdl を返します。ResponseVarName は、1 クラスまたは 2 クラス分類用のクラス ラベルが含まれている Tbl 内の変数の名前です。
クラス ラベル変数に 1 つしかクラスが含まれていない (たとえば、1 クラスのベクトル) 場合、fitcsvm は 1 クラス分類用にモデルを学習させます。そうでない場合、関数は 2 クラス分類用にモデルを学習させます。
では、前の構文の入力引数に加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、交差検証の種類、誤分類のコスト、スコア変換関数の種類を指定できます。Mdl = fitcsvm(___,Name,Value)
[ は、名前と値の引数 Mdl,AggregateOptimizationResults] = fitcsvm(___)OptimizeHyperparameters と HyperparameterOptimizationOptions が指定されている場合に、ハイパーパラメーターの最適化の結果が格納された AggregateOptimizationResults も返します。HyperparameterOptimizationOptions の ConstraintType オプションと ConstraintBounds オプションも指定する必要があります。この構文を使用すると、交差検証損失ではなくコンパクトなモデル サイズに基づいて最適化したり、オプションは同じでも制約範囲は異なる複数の一連の最適化問題を実行したりできます。
例
入力引数
名前と値の引数
出力引数
制限
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プロパティには、はじめに入力されたときの状態で学習データが格納され、ダミー変数は含まれません。入力が table の場合、Xには予測子として使用した列のみが格納されます。
table で予測子を指定した場合、いずれかの変数に順序付きのカテゴリが含まれていると、これらの変数について順序付きエンコードが使用されます。
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 よりもはるかに小さくなります。
参照
拡張機能
バージョン履歴
R2014a で導入参考
ClassificationSVM | CompactClassificationSVM | ClassificationPartitionedModel | predict | fitSVMPosterior | rng | quadprog (Optimization Toolbox) | fitcecoc | fitclinear | ocsvm





