Я пытаюсь использовать агломеративную кластеризацию с пользовательской метрикой расстояния (т.е. сродством), так как я хотел бы сгруппировать последовательность целых чисел по сходству последовательностей, а не по евклидову расстоянию, которое не имеет смысла.
Мои данные выглядят примерно так
>> 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'
Я не уверен, почему я получаю эту ошибку; Я думал, что функция будет группировать пары строк, поэтому будет передан каждый требуемый аргумент.
Любая помощь в этом будет принята с благодарностью