Matlab的k均值余弦分配一切一个簇(Matlab k-means cosine assigns

2019-10-16 16:26发布

我使用Matlab的常规k均值算法上的L2标准化特征矩阵“距离”,“余弦”,“EmptyAction”,“降”,我有一个问题。 该Matlab的生成输出被简单地分配数据点EVERY集群1.00000 ,即使K = 20,并且在C中的所有质心NaN 。 有没有人有任何建议,什么可能导致此?

矩阵的布局([0,1,...,1,0,1],[...],[0,1,...,1,0,1])。 使用Python的我已经做了L2正常化numpy.linalg.norm之前,我通过了文件Matlab的。 这是我运行k均值的确切方式:

m=importdata('matrix.txt');
data=m'; % transpose, because kmeans treats columns as features instead of rows
[L, C]=kmeans(data, 20, 'Distance', 'cosine', 'EmptyAction', 'drop')

这里是我的归一化数据集的样本:

10.3440804328
12.6885775404
15.5884572681
15.9059737206
17.4355957742
17.0
17.3493515729
17.3205080757
18.6279360102
19.7230829233
21.400934559
22.0
22.5831795813
23.0
24.0416305603
25.2388589282
26.8141753556
22.5388553392
9.2736184955
13.5277492585
15.2970585408

任何帮助或建议将不胜感激。 如果您需要更多的信息,让我知道!

Answer 1:

这是使它失败的余弦距离,它与sqEuclidean。 我认为,余弦距离需要更多的信息,否则不会使您的数据集的意义。

编辑:我同意你的看法,该文件是一个有点含糊这里...但在Matlab的pdist功能余弦距离的定义是:“一减点之间的夹角(如向量处理)的余弦”

我把它从的是,该角度必须包含(我在下一列假设)。 但是那种好像它违背了目的。 余弦相似度再次编辑:我想这是更可能的是包括的意思是“2个矢量之间的夹角”。 在这种情况下,我觉得余弦预计2列或多列上工作。

另外,如果你已经进入蟒蛇有一些不错的机器学习工具有作为。 这是一个我用过 。 还有牛奶 ,但我从来没有用它自己。



文章来源: Matlab k-means cosine assigns everything to one cluster