Агломеративная кластеризация на предварительно вычисленной разреженной матрице - PullRequest
0 голосов
/ 27 июня 2019

В моем текущем подходе у меня есть

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 не связывал бы их, и все остальное было бы таким же.

...