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