Scikit-learn: 関連性ベクトルマシン(RVM)

作成日 2013年01月03日  ·  68コメント  ·  ソース: scikit-learn/scikit-learn

RVMは、回帰および分類タスクのスパースソリューションを取得するためのベイズフレームワークです。 SVM(サポートベクターマシン)と同じ形式のモデルを使用しました。 これにより、SVMの次の欠点が解決されます。
--SVMの基底関数の数は、トレーニングセットのサイズに比例して増加します
RVMでは、0基底から開始し、収束するまで基底関数のセットを段階的に更新(追加/削除)します。

--SVM予測は確率的ではありませんが、RVMは確率的です

--SVMでは、マージントレードオフパラメータ「C」を推定する必要がありますが、RVMには当てはまりません。

--SVMカーネルは正定値である必要があります。 RVMでは、任意のカーネルを使用できます。

これはすでにdlibhttp //dlib.net/dlib/svm/rvm_abstract.h.htmlに実装されており、ここhttp://www.vectoranomaly.com/downloads/downloads.htmにもmatlab実装があり
scikit-learnに追加するのもいい考えだと思います。

参照:
1- Tipping, M. E. and A. C. Faul (2003). Fast marginal likelihood maximisation for sparse Bayesian models. In C. M. Bishop and B. J. Frey (Eds.), Proceedings of the Ninth International Workshop on Artificial Intelligence and Statistics, Key West, FL, Jan 3-6.

2- Tipping, M. E. (2001). Sparse Bayesian learning and the relevance vector machine. Journal of Machine Learning Research 1, 211–244.

New Feature

最も参考になるコメント

こんにちは@amuellerとみんな! このスレッドを見て、sklearn互換バージョンのRVM(https://github.com/Mind-the-Pineapple/sklearn-rvm)を実装することにしました。 JamesRitchieの実装に基づいて多くのことを行いました。 誰かが喜んでそれを見てくれれば素晴らしいと思います。フィードバックや貢献(@themrzmaster)は大歓迎です:)
このリポジトリを維持し、バージョン0.2で高速バージョンを実装する計画があり、いつかこのコードがscikit-learnメインリポジトリに役立つことを願っています😊🍍

全てのコメント68件

もう一度読み直す必要がありますが、一般的にはRVMが良い追加になると思います。
dlibはブーストライセンスされており、互換性があるはずです。 ただし、ブーストが多いコーディングスタイルのため、ラップするのはそれほど簡単ではないかもしれません。
問題はSMOを使用して最適化されていますか? SMOを実装するのは賢明ですか?

お奨めは私の司教をつかみます。

ARDとRVMの関係は何ですか? RVMはARDの単なる「基底関数」バージョンですか?

ところで、セクションGeneralized Linear Models一般化されたモデルが含まれていないという事実に悩まされたことはありませんか?

さて、 sequential sparse learning algorithmビショップpを使用する必要があります。 352フォローしていると思いますか?
自分自身を知ってください;)

ARDにも同様の方法があるのだろうか? 現在のARDの実装は非常に遅いので、それはクールでしょう:-/

いいえ、RVMの実装は間違いなくSMOを使用しません。 SMOはSVMの最適化にのみ使用されると思います。
はい、参考文献1の7ページでsequential sparse learning algorithmを使用する必要があります(ビショップp 352にありますか?どちらですか)。 このアルゴリズムは十分に「単純」であり、dlibを使用せずに記述できます。 私はそれをPythonで書いて、最適化のためにcythonを使用することを考えていました。 この場合、matlabの実装を最大限に活用できます。 どう思いますか?
とにかく、C ++で書くことができるはずです。 ただし、そのためには、C ++で優れた線形代数ライブラリが必要になります。 デフォルトでscikit-learnが付属しているかどうかはわかりません。

ビショップは「機械学習とパターン認識」です。

アルゴリズムを正しく理解するのはおそらく完全に簡単ではありません。 これから始めたいのなら、それは間違いなくより大きなプロジェクトになるでしょう。 興味があり、何らかの方法で実装したい場合は、先に進んでください。

また、それを実装することは、scikit-learnに組み込むこととはかなり異なります。 それには、テスト、ドキュメント、ユーザーガイド、そしてきれいなコードを書くことも含まれます。

最初の試みでは、間違いなくnumpyだけを使用する必要があります。 内部でblasを使用するため、非常に高速です。
Cythonを使用して高速化することは、Pythonのオーバーヘッドが多い場合にのみ意味があります。 すべての時間がBLAS呼び出しに費やされている場合、Cythonを使用してもあまり意味がありません。

CythonとnumpyはOKです。 私はビショップがRVMについて話しているのを知りませんでした。
ARDとRVMの関係について。 ARDについてはよくわかりません。 しかし、参考文献2で、著者はRVMはARDに基づいていると述べています。 (213)8行目。
とにかく、ARDはどのように機能しますか?

ARDは、ビショップの本やユーザーガイドでも説明され

私は言及されたrefを理解します:

http://books.nips.cc/papers/files/nips20/NIPS2007_0976.pdf

私たちが使用する実装ではありません。 @vmichelが実装したと思います
ビショップアプローチ、このペーパーは次のような固定小数点アプローチを目的としています
座標降下法。 このコードには間違いなく愛が必要です...

@agramfortに感謝し

使用された司教の章を引用してコメントを追加していただければ幸いです。代わりに他の論文を実装する必要があると言っているかもしれません。

(現在、テストスイートで最も遅いものの2つは、一般的なテストのボストンデータセットにARDを適合させることです)

@agramfortに感謝し

使用された司教の章を引用してコメントを追加していただければ幸いです。代わりに他の論文を実装する必要があると言っているかもしれません。

参照: https

ところで、セクション一般化線形という事実に悩まされたことはありません
モデルには一般化されたモデルが含まれていませんか?

ロジスティック回帰です。

ARDにも同様の方法があるのだろうか? それはクールだろう
現在のARDの実装は非常に遅いです:-/

ARDの最も有望な迅速なソルバーは、
公開されている戦略:
http://books.nips.cc/papers/files/nips20/NIPS2007_0976.pdf

少し前に書いたコードの要点を述べました。

誰かがARDに取り組みたいのなら、それは役に立つかもしれないと思いました。

https://gist.github.com/4494613

警告:それはあまりテストされておらず、正確さを保証するものではありませんが、
うまくいくようです。

@amueller
http://books.nips.cc/papers/files/nips20/NIPS2007_0976.pdfでARDを分析しましたが、RVMとARDは同じ目的関数を最適化したいと考えています。 違いは、この関数を最適化するために使用される方法に現れます。 RVMでは、著者は重みのほとんどがゼロに近いことに気づき、これを使用して「高速」アルゴリズムを導出しました。

それは奇妙に聞こえます。 目的が同じであれば、最適化に同じ方法を使用できるはずですよね?

はい、確かにそうすべきですが、RVMの作成者は、より高速でよりスパースなアルゴリズムを使用するために、別の最適化戦略を使用したと思います。

@yedtoss他にも違いがあると思います。 前に言ったように、これはRVMが機能空間で、またはカーネルなどで動作する可能性があります。 それ以外の場合は、ARDの実装を置き換えることができますか? しかし、それは回帰であり、分類が必要ですよね?

@agramfort ARDとRVMの違いについて何か知っていますか?

@amueller
当初、RVMは回帰手法です。 しかし、著者はそれを分類に使用する方法を提示しました。 RVMはあらゆる種類のカーネルを使用しました。
つまり、ARD(自動関連性決定の新しいビューの式2)とRVM(スパースベイズモデルの高速周辺尤度最大化の式7)の対数尤度は同じです。

何が起こっているのかを知るために論文を読まなければならないと思います。

申し訳ありませんが、私はベイジアンの人ではありません...よくわかりません
微妙な...

RVMはMicrosoftによって特許を取得しています。

クレイジー。

@larsmans @amueller米国でRVMの特許がありますが、作成者は自分のWebページでGPLv2 Matlabの実装を推奨しているので、実装しても問題ないと思います...
http://www.miketipping.com/sparsebayes.htm

一番、
アンジェロス

@kalxasライセンスと特許は非常に直交しており、特にGPLv2はソフトウェア特許に対応していませんでした。 そのような実装であなたが持っている権利は、GPLによって付与された権利と特許権者によって付与された権利の共通部分です。

そうは言っても、サポートベクターマシンはAT&Tによって特許が取得されていることがわかりましたが、その特許が強制されることはなかったようです。 同様のことがRVMで証明できれば、私はそれらについて考えを変えるかもしれません。

@larsmans私はdlib実装の純粋なnumpy / pythonポートを作成しました(現時点ではひどく遅いので、それをcythonizeしようとします)。 ヘッダーによると、dlibのimplemは2008年から存在しており、問題ないようです。 sklearnにRVMを含めることについて考えを変えることを検討しますか?

これに関する@GaelVaroquauxの意見を聞いてみましょう。 dlib implemは、特許ライセンスなしで広く使用されていることを証明できない限り、何も表示されません。

このトピックに関する更新はありますか? 私は最近RVMを調べていて、その周りにコードがあるかどうか疑問に思っていました...

誰も迅速な実装を試みたとは思わないが、法的地位についてはまだ確信が持てない。

@jlopezpena dlibを見てください。コードはかなり明確で、ヘッダー(テンプレート)のみです。 numpyから使用するC拡張機能を構築するのはかなり簡単なはずです

皆さんこんにちは、

最近、MikeTippingの無料で入手できるSparseBayesMATLABプログラムを翻訳しました。このプログラムは、主にRVMを実装しており、MATLABからPythonに変換しました。 ここで見つけることができます: httpshttp://www.miketipping.com/papers/met-fastsbl.pdfにある高速アルゴリズムを使用しているとのことです。 したがって、彼のプログラムの何らかの形式がscikit-learnに組み込まれていれば問題ありません。 私はPythonに比較的慣れていないので、間違いなく私の翻訳を改善または変更することができます。

貢献したいと思ってくれてありがとう、そしてまた特許のステータスをチェックしてくれてありがとう。
ただし、別の質問があります。それは、このアルゴリズムが広く役立つかどうかです。

少し前のBishopの本を最後に読んで以来、アルゴリズムとその使用法については調べていません。
興味深い例は、それがより良い不確かさを与えてから校正することを示すことだと思います
SVM、またはそれがより高速であること(SVMのキャリブレーションとCの検索には、多くの相互検証が必要です)。

@amueller RVM(主にレベルベクトル回帰(RVR))は、ニューロイメージングデータ分析に非常に役立ちます。 多くの論文では、SVRではなくこの方法を使用して予測しています。 このメソッドをscikitlearnツールボックスに追加できれば完璧です。

@amueller私はEMまたは固定小数点アルゴリズムのいずれかを使用してモデルを適合させることができる低速バージョンのRVMを実装しました(主に学習/学術目的)。いくつかの例から指摘したRVMとSVRの主な違いは、スパース性、つまりサポートの数です。 '予測で使用されるベクトル。 多くの場合、RVMはSVRに匹敵する結果を生成し、サポートベクターの数はSVRが使用するもののほんの一部です。
ここではチップの習慣2001年にも使用されている簡単な一例です)

@amueller (前のコメントに追加)そして明らかに少数のサポートベクターは非常に高速な予測を意味します。
RVMのもう1つの利点は、確率論的治療者です。 テストセット内のすべてのデータポイントにRVMを使用すると、点推定だけでなく予測分布も見つかります

RVRは確率分布も提供しますか?

RVRやRVMのようなサウンドは、含めるのに妥当な候補です。 ただし、最先端のアルゴリズムについてはよくわかりません。 http://www.miketipping.com/papers/met-fastsbl.pdfですか? それはかなり古いようです。 SparseBayesのコーディングスタイルは興味深いものです。sklearnの実装の基礎としてよりも、リファレンスとして役立つと思います。

はいRVRは確率分布を提供しますが、場合によっては、トレーニングセットの例のドメイン外のデータポイントの予測分布の分散が小さくなることがあります。
私の知る限り、あなたが言及したRVMの最後のバージョンは、TippingのWebサイト(バージョン2)のMatlab実装にも対応しています。

また、Kevin Murphyの本で、RVMとSVMの速度の興味深い比較を見つけました。
「RVMのトレーニングも最速です。これは、RVMコードがMatlabにあり、SVMコードがCにあるにもかかわらずです」(第14章、p.490)。 ただし、彼らは小さなデータセットについてのみ比較を行ったようです。

@amueller RVM(主にレベルベクトル回帰(RVR))は、
ニューロイメージングデータ分析。

私は確信していません(そして私はニューロイメージングを行います)。 私は良いものを見ていません
経験的比較。

RVMを別のパッケージに入れて、
scikit-APIを学び、優れた実証研究を奨励して
使いやすさ。 それらが有用な場合は、scikit-learnでそれらをマージします。

一部の神経画像研究では、関連性ベクトル回帰(RVR)と
RVRとSVRを比較しました。
いくつか挙げると:
http://www.sciencedirect.com/science/article/pii/S1053811910000108
http://www.sciencedirect.com/science/article/pii/S1053811910012644
http://www.sciencedirect.com/science/article/pii/S1053811910003459
http://www.nature.com/npp/journal/v39/n3/abs/npp2013251a.html

そして、RVRはパターン認識ツールボックスに実装されています
ニューロイメージングデータ:
http://www.mlnl.cs.ucl.ac.uk/pronto/

RVRがscikit-learnに組み込まれることを願っています。

幸運をお祈りしています

Zaixu

12:57の木、2015年10月15日には、ガエルVaroquaux [email protected]
書きました:

@amueller RVM(主に啓示ベクトル回帰(RVR))はきれいです
で便利
ニューロイメージングデータ分析。

私は確信していません(そして私はニューロイメージングを行います)。 私は良いものを見ていません
経験的比較。

RVMを別のパッケージに入れて、
scikit-APIを学び、優れた実証研究を奨励して
使いやすさ。 それらが有用な場合は、scikit-learnでそれらをマージします。


このメールに直接返信するか、GitHubで表示してください
https://github.com/scikit-learn/scikit-learn/issues/1513#issuecomment -148281784

進むべき道は、scikit-learn APIを備えた別のパッケージにRVMを入れ、それらの有用性を示すための優れた実証研究を奨励することだと思います。 それらが有用な場合は、scikit-learnでそれらをマージします。

+1

比較的互換性があるように見えるhttps://github.com/AmazaspShumik/Bayesian-Regression-Methods/blob/master/Relevance%20Vector%20Machine%20%26%20ARD/rvm.pyがあることを意味しset_paramsget_params必要、またはBaseEstimatorから継承する必要があります。

そして、ラップできるhttps://github.com/jhallock7/SparseBayes-Pythonがあり

@ZaixuCuiすぐに使用できる実装がある

私は@GaelVaroquaux@mblondelに同意する傾向があります。 10年近くアルゴリズムについて誰も発表していなければ、人々はあまり興味を持っていないようです。 [ああ、標準のアルゴリズムは2003年からです。 しかし、再びlibsvmは2005年です]

私はscikitを使用しているため、SVR、elastic-netの実行方法を学びます。
したがって、RVRの実装がある場合は、matlabを使用する必要はありません。
機械学習分析を行います。

どうもありがとう。
皆様のご多幸をお祈り申し上げます

Zaixu

11時13分AMに木、2015年10月15日には、アンドレアス・ミューラー[email protected]
書きました:

つまり、
https://github.com/AmazaspShumik/Bayesian-Regression-Methods/blob/master/Relevance%20Vector%20Machine%20%26%20ARD/rvm.py
比較的互換性があるように見えます。 set_paramsとget_paramsまたは
BaseEstimatorから継承します。

そして、 https://github.com/jhallock7/SparseBayes-Pythonがあり
包まれます。

@ZaixuCui https://github.com/ZaixuCuiなぜそれを入れたいのですか?
scikit-すぐに使える実装があるときに学びますか?

私は@GaelVaroquauxに同意する傾向がありますhttps://github.com/GaelVaroquaux
および@mblondelhttps ://github.com/mblondel 。 誰も公開していない場合
10年近くのアルゴリズムでは、人々はあまり興味を持っていないようです。


このメールに直接返信するか、GitHubで表示してください
https://github.com/scikit-learn/scikit-learn/issues/1513#issuecomment -148440665

私はscikitを使用しているため、SVR、elastic-netの実行方法を学びます。
したがって、RVRの実装がある場合は、matlabを使用する必要はありません。
機械学習分析を行います。

で指摘したRVRを実行するPythonコードを使用できます
討論。

OK、ありがとう

8:29で月、2015年10月19日には、ガエルVaroquaux [email protected]
書きました:

私はscikitを使用しているため、SVR、elastic-netの実行方法を学びます。
したがって、RVRの実装がある場合は、matlabを使用する必要はありません。
いつ
機械学習分析を行います。

で指摘したRVRを実行するPythonコードを使用できます
討論。


このメールに直接返信するか、GitHubで表示してください
https://github.com/scikit-learn/scikit-learn/issues/1513#issuecomment -149213151

新しいガウス過程の実装に基づいて、これを非常に軽量なクラスとして実装できませんでしたか? 私の知る限り、RVRは特別な種類のカーネルを備えたGPに付けられた名前にすぎません。

これには最小限の労力しか必要ありませんが、GPの1つに基づいてRVRを実装することは、最も適切なことではない可能性がありますか? CC: @jmetzen

@amueller @GaelVaroquaux @ZaixuCui @yedtoss @jlopezpena

こんにちは、私はscikit-learnAPIを使用してRelevanceVectorMachineの高速バージョンを実装しました。
ですから、もし誰かがそれを使うつもりなら、それを自由に使ってください。

コード: https

例: https

コードには4つの実装済みクラスがあります。
-RegressionARD
-分類ARD
-RVC
-RVR

したがって、RegressionARDとClassificationARDも役立つ可能性があります

@AmazaspShumikの実装に感謝します。 素晴らしい仕事:+1:

@AmazaspShumik

本当にありがとうございました。
私は間違いなくこのパッケージを試してみます。

あなたの幸せを祈ります。

Zaixu

@AmazaspShumikpredict_probaメソッドの実装に問題があった人はいますか?

ここに誰かがphpでRVMのライブラリを持っていますか? 私はRVmで理解できません私のために説明できますか?

PHP用のライブラリRVMを持っている人はいますか?

RVMはMicrosoftによって特許を取得しています。

特許はまもなく失効します

2019-09-04
予想される有効期限

@AmazaspShumik実装へのディスカッションリンクで指摘された

https://github.com/AmazaspShumik/sklearn_bayes-RVM+その他のalgsの実装
https://github.com/JamesRitchie/scikit-rvm-scipyを使用した単純な実装
https://github.com/siavashserver/neonrvm-Pythonバインディングを使用したC実装

また、関連する論文コレクションは次のとおりです。
http://www.miketipping.com/sparsebayes.htm

そこにはRVMのC ++実装があります(論文の補足資料):
https://pubs.acs.org/doi/abs/10.1021/ci200128w
正確にここに:
https://pubs.acs.org/doi/suppl/10.1021/ci200128w/suppl_file/ci200128w_si_001.zip

Microsoftの特許は失効しています。 sklearnに追加できますか?

標準要件を簡単にクリアできるので、なぜそうなのかわかりません。 たぶん、いくつかの良い/説得力のある例があるのは面白いかもしれません。 scikit-rvmsklearn_bayesは保守されていないように見えますが、それでも役立つ可能性があります。
おそらく、実際に仕事をしたいと思っているチャンピオンがほとんど必要です。

マーフィーの本で彼は、RVMのパフォーマンスはSVMと非常に似ているが、真の確率的手法であるという利点があるため、答えとして較正された確率を与えると主張しています。 ここでhttps://github.com/probml/pmtk3/blob/master/docs/tutorial/html/tutKernelClassif.html彼は小さなデータセットを使用してメソッドを比較しました

レンダリングされたバージョンへのリンクを提供できますか?
また、スケーラビリティの問題が発生する可能性があることを考えると、それが小さなデータセット上にあることは驚くべきことではありません。

実装に取り​​掛かろうと思います。 どんな助けでも大歓迎です。

SVMに対するRVMの利点の1つであるIIRCは、最適化パスを実行せずに最適なCパラメーターを見つけることができることです。
元の作者が彼のリファレンス実装に貢献してくれるのではないかと思います。
まあ、それはMatlabにあり、MikeTippingはgithubにもありません...

こんにちは@amuellerとみんな! このスレッドを見て、sklearn互換バージョンのRVM(https://github.com/Mind-the-Pineapple/sklearn-rvm)を実装することにしました。 JamesRitchieの実装に基づいて多くのことを行いました。 誰かが喜んでそれを見てくれれば素晴らしいと思います。フィードバックや貢献(@themrzmaster)は大歓迎です:)
このリポジトリを維持し、バージョン0.2で高速バージョンを実装する計画があり、いつかこのコードがscikit-learnメインリポジトリに役立つことを願っています😊🍍

こんにちは@amuellerとみんな! このスレッドを見て、sklearn互換バージョンのRVM(https://github.com/Mind-the-Pineapple/sklearn-rvm)を実装することにしました。 JamesRitchieの実装に基づいて多くのことを行いました。 誰かが喜んでそれを見てくれれば素晴らしいと思います。フィードバックや貢献(@themrzmaster)は大歓迎です:)
このリポジトリを維持し、バージョン0.2で高速バージョンを実装する計画があり、いつかこのコードがscikit-learnメインリポジトリに役立つことを願っています😊🍍

こんにちは@PedroFerreiradaCosta
このscikit-learnapiをテストしましたが、まだ非常に遅いようです(まだ応答していないようです)。 その理由は、Windowsに実装されているためだと思いますか? 以下は私が使用したものです:
EMRVC(kernel = 'rbf'、gamma = 'scale'、n_iter_posterior = 10、max_iter = 500、compute_score = True、verbose = True)ご回答ありがとうございます@themrzmaster @PedroFerreiradaCosta

こんにちは@mustuner ! APIをお試しいただきありがとうございます。
RVMは、たとえばSVM(O(M ^ 3))よりも計算の複雑さが高く、基底関数が多数ある場合は遅くなる可能性があります。 いずれにせよ、プロセスをスピードアップするためにできることはたくさんあります。 カーネル行列を事前に計算して、Xの代わりにアルゴリズムにフィードするか(kernel = 'precomputed'に設定)、alpha_thresholdのスケールを小さくすることもできます(デフォルトでは1e5に設定)。 この2番目のオプションは、モデルの精度を低下させる可能性があることに注意してください。
お役に立てれば! そして、私たちがさらに支援するために問題を開いてください。

一番、
ペドロ

こんにちは@mustuner ! APIをお試しいただきありがとうございます。
RVMは、たとえばSVM(O(M ^ 3))よりも計算の複雑さが高く、基底関数が多数ある場合は遅くなる可能性があります。 いずれにせよ、プロセスをスピードアップするためにできることはたくさんあります。 カーネル行列を事前に計算して、Xの代わりにアルゴリズムにフィードするか(kernel = 'precomputed'に設定)、alpha_thresholdのスケールを小さくすることもできます(デフォルトでは1e5に設定)。 この2番目のオプションは、モデルの精度を低下させる可能性があることに注意してください。
お役に立てれば! そして、私たちがさらに支援するために問題を開いてください。

一番、
ペドロ

ありがとう@PedroFerreiradaCostaやってみよう

このページは役に立ちましたか?
0 / 5 - 0 評価