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



我正在使用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"给了我什么,我就会得到我想要的。Δpairwise(X)返回正确的值。我做错了什么?

提前谢谢。

解决方案是

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

不需要调用Distancemetric.get_metric。M

相关内容

  • 没有找到相关文章