我试图将聚集聚类与自定义距离度量(即亲和力)一起使用,因为我想通过序列相似性而不是无意义的欧几里德距离对整数序列进行聚类。
我的数据看起来像这样
>> dat.values
array([[860, 261, 240, ..., 300, 241, 1],
[860, 840, 860, ..., 860, 240, 1],
[260, 860, 260, ..., 260, 220, 1],
...,
[260, 260, 260, ..., 260, 260, 1],
[260, 860, 260, ..., 840, 860, 1],
[280, 240, 241, ..., 240, 260, 1]])
Run Code Online (Sandbox Code Playgroud)
我创建了以下相似性函数
def sim(x, y):
return np.sum(np.equal(np.array(x), np.array(y)))/len(x)
Run Code Online (Sandbox Code Playgroud)
所以我只用numpy返回两个序列中的%匹配值,然后进行以下调用
cluster = AgglomerativeClustering(n_clusters=5, affinity=sim, linkage='average')
cluster.fit(dat.values)
Run Code Online (Sandbox Code Playgroud)
但我说错了
TypeError: sim() missing 1 required positional argument: 'y'
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会收到此错误;我以为该函数将群集成对的行,因此将传递每个必需的参数。
任何帮助,将不胜感激