目前我正在进行一个项目,可能需要使用kNN算法来查找给定点P的前k个最近邻居,我正在使用Python的sklearn包来完成这项工作,但我们预定义的度量标准不是默认值之一。所以我必须使用用户定义的度量标准。根据sklearn文档,可以在这里和这里找到。
最新版本的sklearn kNN似乎支持用户定义的度量标准,但我找不到如何使用它:
import sklearn
from sklearn.neighbors import NearestNeighbors
import numpy as np
from sklearn.neighbors import DistanceMetric
from sklearn.neighbors.ball_tree import BallTree
BallTree.valid_metrics
假设我定义了一个度量叫做 mydist=max(x-y),然后使用 DistanceMetric.get_metric 将其转换为 DistanceMetric 对象:
dt=DistanceMetric.get_metric('pyfunc',func=mydist)
从文件中看,这一行应该是这样的
nbrs = NearestNeighbors(n_neighbors=4, algorithm='auto',metric='pyfunc').fit(A)
distances, indices = nbrs.kneighbors(A)
但是我应该把dt
放在哪里呢?谢谢。
func=mydist
,原因是参数algorithm=auto
不接受用户定义的度量标准,无论是algorithm=kd_tree
还是algorithm=brute
,都无法使nbrs = NearestNeighbors(n_neighbors=4, algorithm='auto',metric='pyfunc').fit(A)
正常工作。只有algorithm=ball_tree
可以接受。 - user2926523