【发布时间】:2021-02-08 21:29:05
【问题描述】:
要为 sklearn 创建一个距离函数,我需要一个函数,它以两个一维数组作为输入并返回一个距离作为输出。我想尝试Similarity Measures for Categorical Data: A Comparative Evaluation 论文中的不同距离函数。有些需要额外的数据信息。
我们以汉明距离为例,假设x是标签编码数据:
from sklearn.neighbors import DistanceMetric
def hamming(a,b):
return sum(a!=b)/len(a)
x = np.array([[1, 1, 1],[1, 1, 1],[2, 2, 3],[2, 2, 4]])
dist = DistanceMetric.get_metric(metric='pyfunc', func=hamming)
dist.pairwise(x)
这很好用,但对于某些距离函数,我需要将原始数据作为参数传递(例如计算属性值的相对频率)。
在汉明距离的例子中,这看起来像这样:
def hamming(a,b, x):
return sum(a!=b)/x.shape[1]
我不知道如何将这样一个函数(带有更多参数)传递给 sklearn。 尽管汉明距离不是必需的,但从这个例子中我可以推导出如何在更多例子中实现这一点。
【问题讨论】:
-
这个问题有复杂的解决方案,但简单的解决方案就是简单地使用全局变量。你能提供一个全局变量不够用的例子吗?
标签: python function scikit-learn arguments distance