基于亲和力矩阵的谱聚类

问题描述 投票:0回答:1
    import csv
    import numpy as np
    from sklearn.cluster import SpectralClustering
    reader = csv.reader(open("/Users/Desktop/user2.csv","rU"),
                        dialect=csv.excel_tab)
    x = list(reader)
    result = np.array(x).astype('float')
    lena = result.reshape(182, 182)
    type(lena)
    # Apply spectral clustering (this step goes much faster if you have pyamg
    # installed)
    label = SpectralClustering(n_clusters=5, 
                               affinity='precomputed').fit_predict(lena) 

我有一个包含 182 个用户的亲和力矩阵。我想根据相似度矩阵对用户进行聚类。但结果似乎将几乎所有用户聚集到一个集群。谁能解释一下这个吗?

对于相似度矩阵。有 182*182 个条目。 6510 个条目 > 0.001 ,最大值 > 0.97。对话矩阵为0。这个相似度矩阵是否有问题,或者谱聚类不适合这种情况?您还有其他推荐的聚类方法吗?

python cluster-analysis spectral-clustering
1个回答
2
投票

您提供的统计数据不够完整,无法给出明确的意见,但我可以从结果中做出一些猜测。我怀疑问题出在您的空间中串有一系列紧密相连的条目。

可视化一条由 182 个项目组成的简单直线,间隔为 1 个单位,亲和力是直线距离立方的倒数。你最近的邻居的亲和度为 1/1;接下来是 1/8,然后是 1/27,1/64,...

这使得每个实体只有 20 个亲和力 >= 0.001 的邻居(每边 10 个),总共 3640 个(如果允许环绕)加上主对角线。这比您的实际示例要少。然而,由于直接邻居的亲和力为 1,几乎任何聚类算法的自然串联最终都会将所有这些合并为一个类。这个集合是高度连接的,但不是特别紧凑。


因此,问题就变成了“哪种聚类适合您的数据形状?”您能以某种方式描述各个条目的连通性、它们的紧凑性以及它们的连通性吗? 看到任何自然的结块和切割点吗?

© www.soinside.com 2019 - 2024. All rights reserved.