私はlibsvmを使用していますが、svmtrain()を呼び出すたびに新しいモデルを作成し、既存のモデルにデータを配置するオプションがないようです。しかし、これは可能ですか?libsvmにこの側面が表示されないだけですか?
私はlibsvmを使用していますが、svmtrain()を呼び出すたびに新しいモデルを作成し、既存のモデルにデータを配置するオプションがないようです。しかし、これは可能ですか?libsvmにこの側面が表示されないだけですか?
回答:
「増分」または「オンライン」の学習アルゴリズムを探しているようです。これらのアルゴリズムにより、全体を最初から再トレーニングすることなく、新しいサンプルで分類器を更新できます。
libSVMは現在サポートしていないと思いますが、サポートベクターマシンでは間違いなく可能です。それを提供するいくつかの他のパッケージを見てみる価値があるかもしれません
PS:@Bogdanovist:これについてはかなり広範な文献があります。kNNは明らかに、そして些細な増分です。確率ではなくカウントを保存することにより、ベイジアン分類器をインクリメンタル分類器に変えることができます。STAGGER、AQ *、および決定ツリーアルゴリズムのID *ファミリの一部(すべてではありません)もインクリメンタルであり、頭から離れています。
オンライン/インクリメンタルSVMユーティリティのほとんどは線形カーネル用であり、非線形カーネルほど難しくはないと思います。
現在利用可能な注目すべきオンライン/インクリメンタルSVMツールの一部:
+ Leon BottousのLaSVM:線形カーネルと非線形カーネルの両方をサポートします。C ++コード
+ BordesのLaRank:線形カーネルと非線形カーネルの両方をサポートします。C ++コード。リンクが今壊れているようだ:-(
+ ゲルトCauwenberghs'コードの増分と減分:線形および非線形カーネルの両方をサポートするMATLABコード。。
+ クリス・ディールのインクリメンタルSVM学習:線形および非線形カーネルの両方をサポートするMATLABコード。。
+ アリステアシルトンのSVMHeavy:バイナリ分類と回帰のみC ++コード
+ Francesco ParrellaのOnlineSVR:回帰のみ。MatlabおよびC ++。
+ Pegasos:線形と非線形の両方。Cコード:線形と非線形の両方。CおよびMatlabコード。Javaインターフェース。
+ LangfordのVowpal Wabbit:わからない:-(
+ Koby CrammerのMCSVM
更新されたリストは、Quoraの回答にあります。
別の可能性はアルファシーディングです。libSVMがサポートしているかどうかは知りません。アイデアは、膨大な量のトレーニングデータをチャンクに分割することです。次に、最初のチャンクでSVMをトレーニングします。結果のサポートベクトルはデータのサンプルの一部にすぎないため、それらを使用して、次のチャンクでSVMをトレーニングするために使用します。また、そのSVMを使用して、次の反復(シード)のアルファ値の初期推定値を計算します。したがって、利点は2つあります。各問題は小さく、スマートな初期化によりさらに速く収束します。このようにして、大きな問題を単純化して、一連のより単純なステップを順番に解決します。