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.此相似度矩阵是否存在问题,或者光谱聚类不适合这种情况?你会推荐其他任何聚类方法吗?
答案 0 :(得分:1)
您提供的统计数据不够完整,无法给出明确的意见,但我可以从结果中做出一些猜测。我怀疑问题来自于你的空间中有一系列连接良好的条目。
以1个单位的间隔可视化182个项目的简单行,其中亲和力是线性距离的立方体的倒数。你最近的邻居有亲和力1/1;接下来是1/8,然后是1 / 27,1 / 64,......
这给每个实体只有20个邻居(每边10个),亲和力> = 0.001,总共3640(如果允许环绕)加上主对角线。这比你的实际例子要少。但是,由于直接邻居具有1的亲和性,因此几乎任何聚类算法的自然连接最终将所有这些合并为单个类。这套装置高度连接,但不是特别紧凑。
因此,问题变成了“什么样的聚类适合于数据的形状?”您能否以某种方式描述各个条目的连通性,紧凑性和连接性? 你看到任何自然的丛生和切割点?