3

Node.js で機械学習プログラムを作成していますが、LibLinear や SvmPerf など、Node.js では使用できないライブラリを使用したいと考えています。したがって、トレーニングのために、トレーニング サンプルを含むファイルを作成し、そのファイルで SvmPerf バイナリを実行するだけです。分類についても同じことができますが、分類はトレーニングよりもはるかに多く発生するため、これは遅すぎる可能性があります。

そこで、別のアプローチを考えました。SVM (線形カーネルを使用) での分類は、モデルの重みと入力の特徴値の内積に過ぎないため、SvmPerf モデル ファイルを読み込んで解析し、重みを保持するだけです。 Node.js で自分で分類を行います。

このアプローチは正しいですか?SvmPerf/LibLinear によって作成されたモデルと入力サンプルの間の内積を計算することによって、実際に分類を行うことはできますか?

4

2 に答える 2

3

lejlot の優れた回答にいくつか追加させてください。

  • LIBSVMまたは線形カーネルを備えたその他のSVMライブラリを使用している場合、lejlotの言うことは正確です.SVMモデル(ベクトルとラグランジアン乗数をサポート)をwに変換する必要があります.
  • OPが関心を持っている場合、彼はLIBLINEAR(SVMライブラリではありません)を使用しています。LIBLINEAR は自動的に w を生成します。モデルからそれを抽出し、Javascript プログラムに追加するだけで済みます。
  • b に関する部分は、LIBLINEAR で分類器をトレーニングする際に -b 1 を使用した場合にのみ必要です。彼は w で 1 つの余分な次元を取得し、分類の前にデータに 1 を追加する必要があります。
于 2013-09-08T17:22:41.753 に答える
3

短い答えはイエスです。バイナリの線形の場合は、w超平面とパラメータの座標を取得し、新しい点をb計算して、結果の符号を返すだけです。マルチ ラベル分類の場合、使用するライブラリ メソッド (1 対すべてまたは 1 対 1) に従って、ある種の投票スキームを実装する必要があります。<w,x>-bx

wほとんどのライブラリはパラメーターを保存しません。代わりに、サポート ベクターのリストsv_iを対応する「重み」と共に保存しますslpha_i y_i(多くの場合、ベクターごとに 1 つの数値として)。wパラメータを取得するには、 を計算する必要がありますw = sum_i alpha_i y_i sv_i。そして、b変数は時々呼び出されますintercept

于 2013-09-08T07:12:52.803 に答える