3

我正在使用 scikit-learn (0.14) 并尝试为我的 KernelDensity 估计实现用户定义的指标。

以下代码是我的代码结构的示例:

def myDistance(x,y):
    return np.sqrt(sum((x - y)**2))

dt=DistanceMetric.get_metric("pyfunc",func=myDistance)

kernelModel=KernelDensity(algorithm='ball_tree',metric='pyfunc')
kernelModel.fit(X)

根据文档,BallTree 算法应该接受用户定义的指标。如果我按照此处给出的方式运行此代码,则会收到以下错误:

TypeError: __init__() takes exactly 1 positional argument (0 given) 

错误似乎来自:

sklearn.neighbors.dist_metrics.PyFuncDistance.__init__

我不明白这一点。如果我检查上面代码中的“dt”给了我什么,我会得到我所期望的。dt.pairwise(X) 返回正确的值。我究竟做错了什么?

提前致谢。

4

1 回答 1

5

解决方案是

kernelModel=KernelDensity(...,metric='pyfunc',metric_params={"func":myDistance})

不需要调用 Distancemetric.get_metric。米

于 2015-05-04T04:47:24.643 回答