我在python的scikit中使用了聚类模块,我想使用Normalized Euclidean Distance。没有内置距离(我知道)这是一个list。
所以,我想用可调用的方法实现我自己的Normalized Euclidean Distance。该函数是我的distance
模块的一部分,名为distance.normalized_euclidean_distance
。它需要三个输入:X
,Y
和SD
。
然而,归一化欧几里德距离需要人口样本的标准偏差。但是,scipy中的成对距离只允许两个输入:X
和Y
。
我如何允许它进行额外的论证?
我尝试将其放入**kwarg
,但这似乎不起作用:
cluster = DBSCAN(eps=1.0, min_samples=1,metric = distance.normalized_euclidean, SD = stdv)
其中distance.normalized_euclidean
是我编写的函数,它接收两个数组X
和Y
,并计算它们之间的标准化欧氏距离。
...但是这会引发错误:
TypeError: __init__() got an unexpected keyword argument 'SD'
使用其他关键字参数的方法是什么?
Here它说Any further parameters are passed directly to the distance function.
,这让我觉得这是可以接受的。
答案 0 :(得分:3)
您可以使用lambda函数作为度量,它采用两个输入数组:
cluster = DBSCAN(eps=1.0, min_samples=1,metric=lambda X, Y: distance.normalized_euclidean(X, Y, SD=stdv))
答案 1 :(得分:0)
另一种方法是使用metric_param arg,稍后将其作为kwargs发送到函数:
cluster = DBSCAN(eps=1.0, min_samples=1, metric=normalized_euclidean, metric_params={"SD": stdv})