J'applique un clustering spectral (sklearn.cluster.SpectralClustering
) sur un jeu de données avec certaines fonctionnalités relativement peu nombreuses. Lorsque vous effectuez la classification spectrale en Python, je reçois l'avertissement suivant:Clustering spectral sur un jeu de données fragmenté
UserWarning: Graph is not fully connected, spectral embedding may not work as expected. warnings.warn("Graph is not fully connected, spectral embedding"
Ceci est souvent suivi d'une erreur comme celle-ci:
`
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.`
Toutefois, cet avertissement/erreur ne se produit pas toujours lors de l'utilisation des mêmes paramètres (c'est-à-dire que son comportement n'est pas très cohérent, ce qui le rend difficile à tester). Cela se produit pour différentes valeurs de n_clusters, mais cela arrive plus souvent pour les valeurs n = 2 et n> 7 (c'est ma courte expérience au moins, comme je l'ai mentionné, son comportement n'est pas très cohérent).
Comment devrais-je faire face à cet avertissement et à une erreur connexe? Cela dépend-il de la quantité de fonctionnalités? Que faire si j'ajoute plus?
Je suppose que vous utilisez 'sklearn.cluster.SpectralClustering'? Vous devez vraiment le mentionner dans la question. Aussi, s'il vous plaît montrer les retraçages complets pour l'erreur et l'avertissement, pas seulement la dernière ligne. –
Votre matrice de similarité clairsemée * est-elle définie positive *? –
J'ai modifié le message avec les informations demandées. La matrice n'est probablement pas définie positive (puisque c'est ce que l'erreur dit). La question est de savoir comment y faire face? – Guido