如何在 scikit-learn 中实现可调用距离度量?
How to implement callable distance metric in scikit-learn?
我正在使用 python 的 scikit learn 中的聚类模块,我想使用归一化欧氏距离。这个没有内置距离(据我所知)这是一个 list。
所以,我想使用可调用函数实现我自己的归一化欧氏距离。该函数是我的 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.
,这让我觉得这是可以接受的。
您可以使用 lambda 函数作为采用两个输入数组的指标:
cluster = DBSCAN(eps=1.0, min_samples=1,metric=lambda X, Y: distance.normalized_euclidean(X, Y, SD=stdv))
另一种方法是使用 metric_param arg,稍后将其作为 kwargs 发送到函数:
cluster = DBSCAN(eps=1.0, min_samples=1, metric=normalized_euclidean, metric_params={"SD": stdv})
我正在使用 python 的 scikit learn 中的聚类模块,我想使用归一化欧氏距离。这个没有内置距离(据我所知)这是一个 list。
所以,我想使用可调用函数实现我自己的归一化欧氏距离。该函数是我的 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.
,这让我觉得这是可以接受的。
您可以使用 lambda 函数作为采用两个输入数组的指标:
cluster = DBSCAN(eps=1.0, min_samples=1,metric=lambda X, Y: distance.normalized_euclidean(X, Y, SD=stdv))
另一种方法是使用 metric_param arg,稍后将其作为 kwargs 发送到函数:
cluster = DBSCAN(eps=1.0, min_samples=1, metric=normalized_euclidean, metric_params={"SD": stdv})