Я пытаюсь использовать агломерационную кластеризацию с пользовательской метрикой расстояния (то есть сродством), поскольку я хотел бы кластеризовать последовательность целых чисел по сходству последовательностей, а не что-то вроде евклидова расстояния, которое не имеет смысла.
Мои данные выглядят примерно так
>> 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]])
Я создал следующую функцию подобия
def sim(x, y):
return np.sum(np.equal(np.array(x), np.array(y)))/len(x)
Так что я просто возвращаю значения% соответствия в двух последовательностяхс numpy и сделайте следующий вызов
cluster = AgglomerativeClustering(n_clusters=5, affinity=sim, linkage='average')
cluster.fit(dat.values)
Но я получаю сообщение об ошибке, говорящее
TypeError: sim() missing 1 required positional argument: 'y'
Я не уверен, почему я получаю эту ошибку;Я думал, что функция будет кластеризовать пары строк, поэтому каждый требуемый аргумент будет передан.
Любая помощь с этим будет принята с благодарностью