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。这个相似度矩阵有问题还是光谱聚类不适合这种情况?您还有其他推荐的聚类方法吗?

4

1 回答 1

2

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

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

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


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

于 2015-10-20T19:50:21.423 回答