ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

svmtrain

サポート ベクトル マシンの分類器の学習

構文

SVMStruct = svmtrain(Training,Group)
SVMStruct = svmtrain(Training,Group,Name,Value)

説明

SVMStruct = svmtrain(Training,Group) は、学習されたサポート ベクトル マシン (SVM) の分類器に関する情報を含む構造体 SVMStruct を返します。

SVMStruct = svmtrain(Training,Group,Name,Value) は、1 つまたは複数の Name,Value のペア引数で指定された追加オプションを使用して、構造体を返します。

入力引数

Training

各行が観測または複製に対応し、各列が機能または変数に対応する学習データの行列。svmtrainTraining 内の NaN または空の文字列を欠損値として扱い、Group の対応する行を無視します。

Group

グループ化変数。カテゴリカル ベクトル、数値ベクトル、論理ベクトル、文字列のセル ベクトル、各行がクラス ラベルを表す文字行列のいずれかです。Group の各要素は Training の対応する行のグループを指定します。GroupTraining を 2 つのグループに分割する必要があります。Group には Training 内の行と同じ数の要素が含まれています。svmtrainGroup 内にあるそれぞれの NaN、空の文字列または 'undefined' を欠損値として扱い、Training の対応する行を無視します。

名前/値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペア引数を任意の順番で指定できます。

'autoscale'

論理値。svmtrain でデータ点がその平均に自動的にセンタリングされ、学習の前にそれらのデータ点が単位標準偏差をもつようにスケーリングされるかどうかを指定します。

既定値: true

'boxconstraint'

ソフト マージンのボックス制約 C の値。C は、スカラーまたは学習データと同じ長さのベクトルです。

C がスカラーの場合、グループ 1 のデータ点については N/(2*N1)、グループ 2 のデータ点については N/(2*N2) で自動的に再スケーリングされます。ここで、N1 はグループ 1 の要素の数、N2 はグループ 2 の要素の数で、N = N1 + N2 となります。この再スケーリングは、不平衡なグループ、つまり N1N2 の値が非常に大きな値になる場合を考慮して実行されます。

C が配列の場合、各配列要素は同じインデックスをもつデータ点のボックス制約として取られます。

既定値: 1

'kernelcachelimit'

SMO 学習方法のカーネル行列キャッシュのサイズを指定する値。アルゴリズムは、メモリ内に最大 kernelcachelimit × kernelcachelimit の倍精度浮動小数点数をもつ行列を維持します。

既定値: 5000

'kernel_function'

svmtrain で学習データをカーネル空間にマップするために使用するカーネル関数。既定のカーネル関数は、内積です。カーネル関数は、次のいずれかの文字列または関数ハンドルになります。

  • 'linear' — 線形カーネル。内積を意味します。

  • 'quadratic' — 二次カーネル。

  • 'polynomial' — 多項式カーネル (既定の順序 3)。polyorder 名前と値のペアで別の順序を指定します。

  • 'rbf' — 既定のスケーリング ファクター (sigma) 1 をもつガウス放射基底関数カーネル。rbf_sigma 名前と値のペアで sigma に別の値を指定します。

  • 'mlp' — 既定のスケール [1 –1] をもつ多層パーセプトロン カーネル。mlp_params 名前と値のペアで別のスケールを指定します。

  • @kfun — カーネル関数への関数ハンドル。カーネル関数は次の形式でなければなりません。

    function K = kfun(U, V)

    戻り値 K は、サイズが MN 列の行列です。ここで、UV にはそれぞれ M 行と N 行があります。

    kfun に追加のパラメーターがある場合は、無名関数を使って追加のパラメーターを含めます。たとえば、カーネル関数が以下のようであるとします。

    function k = kfun(u,v,p1,p2)
    k = tanh(p1*(u*v')+p2);

    p1 および p2 の値を設定し、無名関数を使用します。

    @(u,v) kfun(u,v,p1,p2)

既定値: 'linear'

'kktviolationlevel'

SMO 学習方法のカルーシュ・キューン・タッカー (KKT) 条件に違反することを許可される変数の小数部を指定する値。[0,1) で任意の値を設定します。たとえば、kktviolationlevel0.05 に設定すると、変数の 5% が KKT 条件への違反を許可されます。

    ヒント:   このオプションを正の値に設定すると、アルゴリズムの収束が適切なソリューション付近で変動している場合に役に立ちます。

KKT 条件の詳細は、Cristianini および Shawe-Taylor [4] を参照してください。

既定値: 0

'method'

分離超平面を見つけるために使用される方法。オプションは、以下のとおりです。

  • 'QP' — 二次計画法 (Optimization Toolbox™ のライセンスが必要)。分類器は、2 ノルムのソフト マージン サポート ベクトル マシンです。options 名前と値のペアで二次計画法オプションを指定し、optimset を使用して options を作成します。

  • 'SMO' — 逐次最小最適化。options 名前と値のペアで SMO オプションを指定し、statset を使用して options を作成します。

  • 'LS' — 最小二乗。

既定値: SMO

'mlp_params'

多層パーセプトロン (mlp) カーネルのパラメーター。mlp カーネルには、2 つのパラメーター [P1 P2] が必要です。カーネルは K = tanh(P1*U*V' + P2) で、ここでは P1  > 0 および P2 < 0 となります。

既定値: [1 –1]

'options'

学習用の options 構造体。

  • 'method''SMO' (既定値) に設定した場合、statset を使用して options 構造体を作成します。オプションは、以下のとおりです。

    Display

    アルゴリズムの実行として表示される最適化反復に関する情報のレベルを指定する文字列。選択肢は、以下のとおりです。

    • off (既定の設定) — 何もレポートしません。

    • iter — 500 回の反復ごとにレポートします。

    • final — アルゴリズムが終了したときにのみレポートします。

    MaxIter

    メイン ループの最大反復数を指定する整数。アルゴリズム収束前にこの制限を超えると、アルゴリズムは停止して、エラーを返します。既定値は 15000 です。

    'SMO' メソッドに特別に関連する他の名前と値のペアは kernelcachelimitkktviolationlevel および tolkkt です。

  • method'QP' に設定した場合、optimset を使用して options 構造体を作成します。適用可能なオプションの選択肢の詳細は、quadprog オプションを参照してください。SVM は凸二次計画を使用するため、'interior-point-convex' quadprog アルゴリズムを選択できます。制限された検定では、'interior-point-convex' アルゴリズムは、速度とメモリ使用率の両方において、svmtrain に最適な quadprog オプションでした。

'polyorder'

多項式カーネルの順序。

既定値: 3

'rbf_sigma'

放射基底関数カーネルのスケーリング ファクター (sigma)。

既定値: 1

'showplot'

グループ化されたデータと分割するラインをプロットするかどうかを示す論理値。データが 2 列 (機能) で構成されている場合にのみプロットを作成します。

既定値: false

'tolkkt'

カルーシュ・キューン・タッカー (KKT) 条件が SMO 学習方法に対してチェックされるときの許容誤差を指定する値。KKT 条件の定義については、「カルーシュ・キューン・タッカー (KKT) 条件」を参照してください。

既定値: 1e-3

出力引数

SVMStruct

次のフィールドのように、学習された SVM 分類器に関する情報が含まれる構造体。

  • SupportVectors — 各行が正規化されたデータ空間の 1 つのサポート ベクトルに対応するデータ点の行列。この行列は、正規化が 'AutoScale' 引数に従って適用された後の Training 入力データ行列のサブセットです。

  • Alpha — サポート ベクトルの重みのベクトル。重みの符号は、最初のグループに属するサポート ベクトルの場合は正であり、2 つ目のグループの場合は負です。

  • Bias —('AutoScale' 引数に従って) 正規化されたデータ空間の 2 つのグループを分離する超平面の切片。

  • KernelFunction — 学習データをカーネル空間にマップする関数へのハンドル。

  • KernelFunctionArgs — カーネル関数に必要な追加の引数のセル配列。

  • GroupNames — カテゴリカル ベクトル、数値ベクトル、論理ベクトル、文字列のセル ベクトル、各行がクラス ラベルを表す文字行列のいずれか。サポート ベクトルのグループ識別子を指定します。SupportVectors 内の行数と同じ数の要素があります。各要素によって、SupportVectors の対応する行が属するグループが指定されます。

  • SupportVectorIndicesAutoScale 引数に従って、データが正規化された後にサポート ベクトルとして選択された、学習データ Training の行を指定するインデックスのベクトル。

  • ScaleData — 正規化係数を含むフィールド。'AutoScale'false に設定される場合、このフィールドは空になります。AutoScaletrue に設定される場合は、次の 2 つのフィールドを含む構造体になります。

    • shift — 値の行ベクトル。各値は、学習データ Training の観測における平均の負の数です。

    • scaleFactor — 値の行ベクトル。それぞれの値は、学習データ Training の観測の標準偏差で 1 を除算した値です。

    svmtrainsvmclassify の両方がスケーリングを ScaleData で適用します。

  • FigureHandles'Showplot' を使用するときに、svmtrain で作成される Figure ハンドルのベクトル。

花弁の長さと花弁の幅の測定値に従って、versicolor 種と virginica 種に関するフィッシャーのアヤメのデータを分割するラインを見つけます。これらの 2 つの種はデータセットの行 51 以上に含まれ、花弁の長さと花弁の幅は 3 列目と 4 列目になります。

load fisheriris
xdata = meas(51:end,3:4);
group = species(51:end);
svmStruct = svmtrain(xdata,group,'showplot',true);

詳細

すべて展開する

カルーシュ・キューン・タッカー (KKT) 条件

カルーシュ・キューン・タッカー (KKT) 条件は、勾配が最小値でゼロになるという条件に類似しており、制約を考慮するために変更されています。2 つの条件の違いは KKT 条件が制約ありの問題に適用できることです。KKT 条件は、次に示す補助的なラグランジュ関数を使用します。

ここで、f(x) は目的関数、g(x) は制約関数 g(x) ≤ 0 のベクトル、h(x) は制約関数 h(x) = 0 のベクトルです。ベクトル λ は λg と λh の連結であり、ラグランジュ乗数ベクトルです。このベクトルの長さは制約の合計数です。

KKT 条件は、次のように表されます。

詳細は、「Karush-Kuhn-Tucker conditions」を参照してください。

ヒント

  • 新しいデータを分類するには、学習の結果 SVMStruct を関数 svmclassify と併用します。

アルゴリズム

関数 svmtrain で使用される最適化手法は、次の式に従ってサポート ベクトル x の分類に使用されるサポート ベクトル si、重み αi およびバイアス b を識別します。

ここで、k はカーネル関数です。線形カーネルの場合、k は内積です。c ≥ 0 の場合、x は最初のグループのメンバーとして分類されます。それ以外の場合、2 番目のグループのメンバーとして分類されます。

メモリ使用量とメモリ不足エラー

'Method''QP' に設定すると、関数 svmtrain は、N 要素を含むデータセットで動作し、(N+1)(N+1) 列の行列を作成して分離超平面を見つけます。この行列には少なくとも 8*(n+1)^2 バイトの連続メモリが必要です。この連続メモリのサイズが使用できない場合、ソフトウェアでは "メモリ不足" エラー メッセージが表示されます。

'Method''SMO' (既定値) に設定した場合、メモリの消費は kernelcachelimit オプションで制御されます。SMO アルゴリズムによって、kernelcachelimit オプションで指定されたサイズで制限された、カーネル行列の部分行列だけが格納されます。ただし、データ点の数が kernelcachelimit オプションで指定されたサイズを超えると、SMO アルゴリズムはカーネル行列要素を再計算する必要があるため低速になります。

svmtrain を大規模なデータセットで使用し、メモリ不足になったり、最適化のステップに非常に時間がかかる場合は、以下のいずれかを試してください。

  • 使用する標本の数を少なくし、交差検定を使用して分類器のパフォーマンスを検定する。

  • 'Method''SMO' に設定し、kernelcachelimit オプションをシステムで許容される大きさに設定する。

参照‏

[1] Kecman, V., Learning and Soft Computing, MIT Press, Cambridge, MA. 2001.

[2] Suykens, J.A.K., Van Gestel, T., De Brabanter, J., De Moor, B., and Vandewalle, J., Least Squares Support Vector Machines, World Scientific, Singapore, 2002.

[3] Scholkopf, B., and Smola, A.J., Learning with Kernels, MIT Press, Cambridge, MA. 2002.

[4] Cristianini, N., and Shawe-Taylor, J. (2000). An Introduction to Support Vector Machines and Other Kernel-based Learning Methods, First Edition (Cambridge: Cambridge University Press). http://www.support-vector.net/

参考

|

この情報は役に立ちましたか?