В моем текущем подходе у меня есть
from scipy.sparse import csr_matrix
from sklearn.cluster import AgglomerativeClustering
import pandas as pd
s = pd.DataFrame([[0.8, 0. , 3. ],
[1. , 1. , 2. ],
[0.3, 3. , 4. ]], columns=['dist', 'v1', 'v2'])
sparseD = csr_matrix((1-s['dist'], (s['v1'].values, s['v2'].values)), shape=(N, N))
agg = AgglomerativeClustering(n_clusters=None, affinity='precomputed', linkage='complete', distance_threshold=.25)
agg.fit_predict(sparseD)
Последняя строка поднимает
TypeError: cannot take a sparse matrix.
Если я приведу данные toarray
, код сработает и выдаст ожидаемый результат,но использует много памяти и работает медленно: при реальном размере данных: 61K x 61K.
Мне интересно, есть ли другая библиотека (или Scikit API), которая может выполнять такую же кластеризацию связей для предварительно вычисленных,матрица разреженного расстояния - если бы не было записи для данной пары (element1, element2), API не связывал бы их, и все остальное было бы таким же.