Спектральная кластеризация на разреженном наборе данных

Я применяю спектральную кластеризацию (sklearn.cluster.SpectralClustering) к набору данных с довольно редкими функциями. При выполнении спектральной кластеризации в Python я получаю следующее предупреждение:

UserWarning: Graph is not fully connected, spectral embedding may not work as expected. warnings.warn("Graph is not fully connected, spectral embedding"

За этим часто следует такая ошибка:

`
File "****.py", line 120, in perform_clustering_spectral_clustering
  predicted_clusters = cluster.SpectralClustering(n_clusters=n).fit_predict(features)
File "****\sklearn\base.py", line 349, in fit_predict
  self.fit(X)
File "****\sklearn\cluster\spectral.py", line 450, in fit
  assign_labels=self.assign_labels)
File "****\sklearn\cluster\spectral.py", line 256, in spectral_clustering
  eigen_tol=eigen_tol, drop_first=False)
File "****\sklearn\manifold\spectral_embedding_.py", line 297, in spectral_embedding
  largest=False, maxiter=2000)
File "****\scipy\sparse\linalg\eigen\lobpcg\lobpcg.py", line 462, in lobpcg
  activeBlockVectorBP, retInvR=True)
File "****\scipy\sparse\linalg\eigen\lobpcg\lobpcg.py", line 112, in _b_orthonormalize
  gramVBV = cholesky(gramVBV)
File "****\scipy\linalg\decomp_cholesky.py", line 81, in cholesky
  check_finite=check_finite)
File "****\scipy\linalg\decomp_cholesky.py", line 30, in _cholesky
  raise LinAlgError("%d-th leading minor not positive definite" % info)
numpy.linalg.linalg.LinAlgError: 9-th leading minor not positive definite
numpy.linalg.linalg.LinAlgError: 9-th leading minor not positive definite
numpy.linalg.linalg.LinAlgError: the leading minor of order 12 of 'b' is not positive definite. The factorization of 'b' could not be completed and no eigenvalues or eigenvectors were computed.`

Однако это предупреждение/ошибка не всегда возникает при использовании одних и тех же настроек (т. е. его поведение не очень последовательно, что затрудняет его тестирование). Это происходит для разных значений n_clusters, но чаще для значений n=2 и n > 7 (по крайней мере, это мой краткий опыт; как я уже упоминал, его поведение не очень последовательно).

Как мне справиться с этим предупреждением и связанной с ним ошибкой? Зависит ли это от количества функций? Что, если я добавлю больше?


person Guido    schedule 19.01.2016    source источник
comment
Я предполагаю, что вы используете sklearn.cluster.SpectralClustering? Вам действительно нужно упомянуть об этом в вопросе. Кроме того, покажите полную трассировку ошибки и предупреждения, а не только последнюю строку.   -  person ali_m    schedule 20.01.2016
comment
Является ли ваша разреженная матрица сходства положительно определенной?   -  person Has QUIT--Anony-Mousse    schedule 20.01.2016
comment
Я отредактировал пост с запрошенной информацией. Матрица, вероятно, не является положительно определенной (поскольку об этом говорит ошибка). Вопрос в том, как с этим справиться?   -  person Guido    schedule 22.01.2016


Ответы (1)


Я также столкнулся с этой проблемой с n_clusters. Поскольку это машинное обучение без присмотра, единственного правильного значения для n_clusters не существует. В вашем случае кажется, что n_cluster находится между 3 и 7. Предполагая, что у вас есть некоторая истина для кластеризации, лучшим способом обработки было бы попробовать несколько значений n_cluster, чтобы увидеть, появляется ли какой-либо шаблон для данного набора данных, стараясь избежать каких-либо чрезмерных -примерка. Вы также можете использовать коэффициент силуэта (sklearn.metrics.silhouette_score)

person moron    schedule 21.12.2016