2016-01-19 8 views
1

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

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

+1

Я предполагаю, что вы используете 'sklearn.cluster.SpectralClustering'? Вы действительно должны упомянуть об этом в вопросе. Кроме того, пожалуйста, покажите полные следы ошибки и предупреждения, а не только последнюю строку. –

+0

Является ли ваша редкая матрица подобия * положительной определенной *? –

+0

Я отредактировал сообщение с запрошенной информацией. Матрица, вероятно, не является положительно определенной (поскольку об этом говорит ошибка). Вопрос в том, как с этим справиться? – Guido

ответ

1

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