サポートベクターマシン
[機械学習]


モジュール

 説明

列挙型

enum  f_ml_svm_type { F_ML_SVM_TYPE_C_SVM = 1 }
 サポートベクターマシンのタイプ [詳細]
enum  f_ml_svm_kernel_type {
  F_ML_SVM_KERNEL_LINEAR = 1, F_ML_SVM_KERNEL_POLYNOMIAL,
  F_ML_SVM_KERNEL_RBF
}
 サポートベクターマシンのカーネル関数のタイプ [詳細]

関数

FHANDLE FVALGAPI fnFIE_ml_do_train_svm (FHANDLE hMl_sample, INT svm_type, DOUBLE margin, DOUBLE stop_rate, INT kernel_type, DOUBLE gamma, DOUBLE coeff_0, UINT degree, INT preprocess, INT train_time_sec, INT *error_code)
 サポートベクターマシンによる機械学習
INT FVALGAPI fnFIE_ml_get_svm_param (FHANDLE hMl, INT *svm_type, DOUBLE *margin, DOUBLE *stop_rate, INT *kernel_type, DOUBLE *gamma, DOUBLE *coeff_0, UINT *degree, INT *preprocess)
 サポートベクターマシンのパラメータを取得する

列挙型

サポートベクターマシンのタイプ

サポートベクターマシンの種類を指定する定数です

列挙型の値:
F_ML_SVM_TYPE_C_SVM  データのはずれ値に対するペナルティパラメータを持つ、多クラス識別SVM。最も基本的なアルゴリズム

サポートベクターマシンのカーネル関数のタイプ

サポートベクターマシンの学習において用いる、カーネル関数の種類を指定する関数です

列挙型の値:
F_ML_SVM_KERNEL_LINEAR  線形カーネル 高次元への写像は行わず、もとの特徴空間内で線形分離が行われる
F_ML_SVM_KERNEL_POLYNOMIAL  多項式カーネル 指定した多項式に応じた、高次元空間へ写像を行う
F_ML_SVM_KERNEL_RBF  動径基底関数カーネル ほとんどの場合,適切に動作する


関数

FHANDLE FVALGAPI fnFIE_ml_do_train_svm ( FHANDLE  hMl_sample,
INT  svm_type,
DOUBLE  margin,
DOUBLE  stop_rate,
INT  kernel_type,
DOUBLE  gamma,
DOUBLE  coeff_0,
UINT  degree,
INT  preprocess,
INT  train_time_sec,
INT *  error_code 
)

サポートベクターマシンによる機械学習

hMl_sample で指定された教師データを用いて、サポートベクターマシン(SVM)による 学習を行い、その結果を保持した学習オブジェクトのハンドルを返します。

hMl_sample には、学習で用いる教師データを設定した教師データオブジェクトを 設定します。hMl_sample には2クラス以上の教師データが設定されている必要があります。 hMl_sample に2クラス以上の教師データが設定されていない場合は、返却されるハンドルはNULLとなります。 また、後述の error_code が設定されていた場合は、F_ERR_CALC_IMPOSSIBLE が出力されます。

svm_type には、学習で用いるSVMのタイプ(モデル)を指定します。以下の値にて指定してください。

  • F_ML_SVM_TYPE_C_SVM
    C-SVMを用います。教師データの誤分類に対するペナルティパラメータを持つ多クラス識別SVMであり、最も標準的なSVMモデルです

margin はソフトマージンおける誤分類の許容パラメータです。svm_type で指定したSVMのタイプによって、パラメータの意味や 取りうる値の範囲、ディフォルト値は以下のようになります。

  • F_ML_SVM_TYPE_C_SVMの場合
    0 < margin の値を設定します。値が小さいほどソフトマージン、大きいほどハードマージンとなります。(ディフォルト値 : 1.0)

stop_rate はSVMの学習を終了する収束条件の値を設定します。この値を大きくすると、学習時間は短くなりますが、 識別精度は悪くなります。通常、この値はディフォルト値から変更する必要はありません。(ディフォルト値 : 0.001)

kernel_type はSVMで用いるカーネル関数のタイプを指定します。以下の値にて指定してください。

  • F_ML_SVM_KERNEL_LINEAR
    線形カーネルを用います。次の式で与えられるカーネル関数です。

\[ K( {\bf x_{1}},{\bf x_{2}}) = {\bf x_{1}} \cdot {\bf x_{2}} \]

  • F_ML_SVM_KERNEL_POLYNOMIAL
    多項式カーネルを用います。次の式で与えられるカーネル関数です。

\[ K( {\bf x_{1}},{\bf x_{2}}) = (\gamma ({\bf x_{1}} \cdot {\bf x_{2}}) + c)^d \]

  • F_ML_SVM_KERNEL_RBF
    動径基底関数カーネル(RBFカーネル)を用います。次の式で与えられるカーネル関数です。

\[ K( {\bf x_{1}},{\bf x_{2}}) = \exp(- \gamma \|{\bf x_{1}} - {\bf x_{2}}\|^2 ) \]

gamma , coeff_0 , degree は上記カーネル関数の変数 $ \gamma $, $c$, $d$ の値となります。 式中に現れない変数は、実行時には無視されます。

gamma は 0 < gamma となる実数を設定します。ディフォルト値は、kernel_type の設定に応じて、以下のようになります。

  • F_ML_SVM_KERNEL_POLYNOMIAL : ディフォルト値 : 1.0
  • F_ML_SVM_KERNEL_RBF : ディフォルト値 : 1/k ( k : 学習する特徴ベクトルの次元)

coeff_0 は 0 <= coeff_0 となる実数を設定します。ディフォルト値は1.0です。

degree は 1 <= degree となる整数を設定します。ディフォルト値は3です。

preprocess は学習を開始する前に、与えられた教師データに行う前処理を指定します。 前処理を適切に行うことで、学習時間の短縮や、識別精度の向上が期待できます。
値は以下のdefineをORで指定します。それ以外の値は無視されるので注意してください。 また、前処理が不要な場合は0を指定してください。

SVMでは「 F_ML_PRE_SCALE_VECTOR 」を指定しておくことを推奨します。
なお、教師データに対する前処理を行う際は、内部で教師データオブジェクトのコピーを 作成し、そのデータに対して処理を行います。そのため、入力の hMl_sample は変更されません。

train_time_sec は 学習時間の上限値を秒単位で設定します。この値が設定されていた場合、 内部で学習開始からの経過時間の監視を行います。指定された時間を経過した場合、 学習を打ち切り、処理を終了します。学習の打ち切りが発生した場合、 返却されるハンドルはNULLとなります。また、後述の error_code が設定されていた場合は、 F_ERR_TIMEOUT が設定されます。

3クラス以上の多クラス識別の場合、各クラス同士のペアの学習毎にこの時間が 適応されます。よって、Nクラスでの学習の場合、最大で train_time_sec * ( N(N-1) / 2 ) だけ 学習が行われます。タイムアウトが1回でも発生した場合は、エラー扱いとなります。

学習時間の監視が不要な場合は train_time_sec に0を設定します。このときは、 終了条件が成立するまで、無制限に学習を続けます。

error_code には、学習を行った際のエラーコードを設定されます。学習が正常終了した場合は F_ERR_NONE が 設定されます。なお、エラーコードを受け取る必要が無い場合はNULLを指定してください。

引数:
[in] hMl_sample 学習に用いる教師データ教師データオブジェクトのハンドル
[in] svm_type サポートベクターマシンのタイプ
[in] margin ソフトマージンにおける許容パラメータ
[in] stop_rate 学習を終了する収束条件
[in] kernel_type 使用するカーネル関数の種類
[in] gamma カーネル関数パラメータ $ \gamma $
[in] coeff_0 カーネル関数パラメータ 定数項 $c$
[in] degree カーネル関数パラメータ 次数 $d$
[in] preprocess 学習の前処理指定パラメータ
[in] train_time_sec 学習時間の上限値(単位:秒) 指定しない場合は0
[out] error_code エラー発生時のエラーコード エラーコードを受け取る必要の無い場合は、NULLを指定します。
  • F_ERR_NONE 正常終了
  • F_ERR_INVALID_PARAM 入力されたパラメータが不正
  • F_ERR_INVALID_OBJECT 入力された教師データオブジェクトが不正
  • F_ERR_TIMEOUT 指定された学習時間内で学習が終了しなかった
  • F_ERR_NOMEMORY メモリ不足による領域確保エラー
  • F_ERR_CALC_IMPOSSIBLE 計算不能エラー
  • F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
戻り値:
確保された機械学習オブジェクトのハンドル エラーにより学習に失敗した場合はNULLを返します
参照:
fnFIE_ml_predict()

INT FVALGAPI fnFIE_ml_get_svm_param ( FHANDLE  hMl,
INT *  svm_type,
DOUBLE *  margin,
DOUBLE *  stop_rate,
INT *  kernel_type,
DOUBLE *  gamma,
DOUBLE *  coeff_0,
UINT *  degree,
INT *  preprocess 
)

サポートベクターマシンのパラメータを取得する

hMl で指定したサポートベクターマシンのパラメータを取得します。

取得できるパラメータは、サポートベクターマシンのタイプ、指定マージン、停止条件、 カーネル関数のタイプ、カーネル関数に指定した各パラメータ値、学習の前処理指定パラメータです。

出力先の引数は全てNULLポインタチェックがされるため、必要の無いものについてはNULL指定が可能です。 このとき、 hMl 以外のパラメータがNULLであっても、エラーにはならず正常終了します。

引数:
[in] hMl_sample 情報を取得するサポートベクターマシンオブジェクト
[out] svm_type サポートベクターマシンのタイプ
[out] margin ソフトマージンにおける許容パラメータ
[out] stop_rate 学習を終了する収束条件
[out] kernel_type 使用するカーネル関数の種類
[out] gamma カーネル関数パラメータ $ \gamma $
[out] coeff_0 カーネル関数パラメータ 定数項 $c$
[out] degree カーネル関数パラメータ 次数 $d$
[out] preprocess 学習の前処理指定パラメータ
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT 入力された学習オブジェクトが不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2