私はKNN
、K Nearest Neighbors
のために使用する必要があるカスタムの距離メトリックを持っています。Sklearnを許可する方法K最近の隣人はカスタム距離メトリックを取ることができますか?
私はthis次試してみましたが、私はそれが何らかの理由で動作させることはできません。
import sklearn
from sklearn.neighbors import NearestNeighbors
import numpy as np
import pandas as pd
def d(a,b,L):
# Inputs: a and b are rows from a data matrix
return a+b+2+L
knn=NearestNeighbors(n_neighbors=1,
algorithm='auto',
metric='pyfunc',
func=lambda a,b: d(a,b,L)
)
X=pd.DataFrame({'b':[0,3,2],'c':[1.0,4.3,2.2]})
knn.fit(X)
を、しかし、私が呼ぶとき:
私は以下の書かれているように私は、距離メトリックは、同じ長さの2つのベクトル/配列を取ることになっていることを前提としていますknn.kneighbors()
、それはいないようですカスタム関数が好きです。エラースタックの一番下には、次のようなものがあります。
ValueError: Unknown metric pyfunc. Valid metrics are ['euclidean', 'l2', 'l1', 'manhattan', 'cityblock', 'braycurtis', 'canberra', 'chebyshev', 'correlation', 'cosine', 'dice', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis', 'matching', 'minkowski', 'rogerstanimoto', 'russellrao', 'seuclidean', 'sokalmichener', 'sokalsneath', 'sqeuclidean', 'yule', 'wminkowski'], or 'precomputed', or a callable
しかし、私が引用した質問では全く同じです。この作業をどのように行うかについてのアイデアはsklearn version 0.14
ですか?私はバージョンの違いを認識していません。
ありがとうございました。
またあなたの距離関数は良いではありません、それは – maxymoo