Mam niestandardową metrykę odległości, która musi być używana dla KNN
, K Nearest Neighbors
.Jak zezwolić sklearn K Nearest Neighbours na przyjęcie niestandardowych metryk odległości?
Próbowałem podążać za this, ale nie mogę go uruchomić z jakiegoś powodu.
Przypuszczam, że metryka odległość ma trwać dwa wektory/macierze o tej samej długości, co napisałem poniżej:
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)
Jednak, kiedy zadzwonić: knn.kneighbors()
, nie wydaje lubić niestandardową funkcję. Poniżej znajduje się dół stosu błędów:
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
Jednak widzę dokładnie to samo w pytaniu, które przytoczyłem. Wszelkie pomysły na to, jak sprawić, by działało to na sklearn version 0.14
? Nie znam różnic w wersjach.
Dzięki.
również czynność odległość nie jest dobre, zwróci wektor, ubezpieczeniowy musi zwrócić pojedynczą wartość – maxymoo