我正在使用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)返回正确的值。
我做错什么了?
提前谢谢。

最佳答案

解决方案是

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

不需要调用Distancemetric.get_metric。

关于python - 如何通过scikit-learn(python)在KernelDensity中使用用户定义的指标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29414179/

10-11 07:37