如何在scikit-learn(python)中使用KernelDensity中的用户定义度量

时间:2015-04-02 13:27:33

标签: python scikit-learn kernel-density metric

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

提前致谢。

1 个答案:

答案 0 :(得分:3)

解决方案

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

无需调用Distancemetric.get_metric。 中号