使用scikit学习具有预先计算的亲和矩阵的光谱聚类



得到一个预先计算的相似性矩阵Sim,其中s_ij等于向量i和向量j之间的相似性。

正在尝试计算群集。进行

  clustering = SpectralClustering(cluster_count, affinity='precomputed', eigen_solver='arpack')
  clustering.fit(sparse_dok_sim_matrix)
  clusters = clustering.fit_predict(sparse_dok_sim_matrix)
  print clusters

我得到的东西看起来像集群标签,但完全是假的。同一聚类中样本之间的边的权重是图上边的权重的99%。聚类结果看起来完全是随机的,毫无意义。

有什么建议吗,也许我做错了?

例如,我尝试使用dbscan进行此操作,但一无所获:

results = block_diag(np.ones((3,3)), np.ones((3,3)), np.ones((4,4)))
results = 1000 * (np.ones((len(results), len(results))) - results)
print results
print dbscan(X=results.astype(float), metric='precomputed')

这就是结果,它说一切都是噪音,尽管很明显前三点和下三点都在同一个位置。。。最后四个也是。

[[    0.     0.     0.  1000.  1000.  1000.  1000.  1000.  1000.  1000.]
 [    0.     0.     0.  1000.  1000.  1000.  1000.  1000.  1000.  1000.]
 [    0.     0.     0.  1000.  1000.  1000.  1000.  1000.  1000.  1000.]
 [ 1000.  1000.  1000.     0.     0.     0.  1000.  1000.  1000.  1000.]
 [ 1000.  1000.  1000.     0.     0.     0.  1000.  1000.  1000.  1000.]
 [ 1000.  1000.  1000.     0.     0.     0.  1000.  1000.  1000.  1000.]
 [ 1000.  1000.  1000.  1000.  1000.  1000.     0.     0.     0.     0.]
 [ 1000.  1000.  1000.  1000.  1000.  1000.     0.     0.     0.     0.]
 [ 1000.  1000.  1000.  1000.  1000.  1000.     0.     0.     0.     0.]
 [ 1000.  1000.  1000.  1000.  1000.  1000.     0.     0.     0.     0.]]
(array([], dtype=int64), array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]))

对于DBSCAN:根据文档,默认情况下为min_samples=5。没有一个"集群"有5个样本,所以所有的东西都被标记为噪声。对于SpectralClustering,如果没有更多细节,我无法帮助你。

相关内容

  • 没有找到相关文章