如何在 scikit-learn 中实现可调用距离度量?

sim*_*ple 5 python scipy euclidean-distance keyword-argument scikit-learn

我在 python 的 scikit learn 中使用聚类模块,我想使用归一化欧几里德距离。这个(我知道的)没有内置距离。这是一个列表

因此,我想使用可调用对象实现我自己的归一化欧几里得距离。该函数是我的distance模块的一部分,称为distance.normalized_euclidean_distance. 它采用三个输入: XY,和SD

但是,归一化欧几里得距离需要总体样本的标准差。但是,scipy 中的成对距离只允许两个输入:XY

我如何让它接受额外的论点?

我试着把它作为 a **kwarg,但这似乎不起作用:

cluster = DBSCAN(eps=1.0, min_samples=1,metric = distance.normalized_euclidean, SD = stdv)
Run Code Online (Sandbox Code Playgroud)

这里distance.normalized_euclidean是发生在两个数组,我写的功能,X以及Y并计算它们之间的归一化欧氏距离。

...但这会引发错误:

TypeError: __init__() got an unexpected keyword argument 'SD'
Run Code Online (Sandbox Code Playgroud)

使用附加关键字参数的方法是什么?

这里Any further parameters are passed directly to the distance function.,这让我认为这是可以接受的。

yan*_*jie 4

您可以使用 lambda 函数作为度量,它接受两个输入数组:

cluster = DBSCAN(eps=1.0, min_samples=1,metric=lambda X, Y: distance.normalized_euclidean(X, Y, SD=stdv))
Run Code Online (Sandbox Code Playgroud)