2016-07-18 6 views
3

http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.htmlを使用するときに事前計算されたカーネル行列に適合しようとしていますが、「事前計算済み」というメトリックが存在するため明らかに可能です。私はメソッドに合わせてn_samples * n_samplesカーネル行列を渡すことができます。なぜsk-learnのk-nearest neighborsでmetric = 'precomputed'が機能しないのですか?

それを使用して、ここで私が得るものです:

とValueError:メトリック「事前に計算」アルゴリズム「自動」最も近い隣人を発見するアルゴリズム「自動」を使用しているどのように私は理解していない

には有効ではありません私が事前計算されたカーネル行列を使用しているという事実とは互換性がありません。

EDIT:

残念ながら、私の質問には注意を取得できませんでした。私はソースコードをより深く見てきましたが、metric=precomputedを渡すとコードにはalgorithm=autoを選択できるので、バグがあるようです。その代わりに、実行時に、私が言及したvalueErrorにコードがぶつかり、著者がコードをそのように動作させたいとは思っていません。私はどのように正しく動作するようにソースコードを変更するのか分かりません。

また、より理論的な観点からは、kNNのフィットメソッドを使用するためにカーネル行列(別名グラム行列)を使用できることが完全に正当であるということを追加したいと思います。グラム行列から距離行列を導き出すことができます。次に、新しいデータを予測する場合は、k個の最近傍を見つけて、k個の最近傍にある最新のラベルで新しいデータにラベルを付けるだけです。

私は本当にこの質問に答えが必要だと思います。正しく質問されて、私は本当に正確なものがほしいと思うし、PythonやScikitをもっと深く理解している人がそれに答えることができるはずだということを知っている。たぶん私は何か明白なものを見逃しているかもしれませんが、カーネル行列をあらかじめ計算してkNNを使ってみようとしている人(孤立したケースではない)を助けるべきだとも思っています。

答えて

0

私はこれがあまりにも遅い返事だと思っていますが、あなたがまだ不思議であったならば。 KDTreeはユーザー定義のメトリックまたは事前計算されたメトリックを受け入れないため、「自動」は機能しません。ボールツリーだけが動作します。アルゴリズムを「ボールツリー」に設定すると、うまくいくはずです。お役に立てれば!

関連する問題