我在一个大型数据集上运行kmeans,但总是得到以下错误:
Error using kmeans (line 145)
Some points have small relative magnitudes, making them effectively zero.
Either remove those points, or choose a distance other than 'cosine'.
Error in runkmeans (line 7)
[L, C]=kmeans(data, 10, 'Distance', 'cosine', 'EmptyAction', 'drop')
我的问题是,即使我给所有的向量加1,我仍然会得到这个错误。我本以为它会过去,但很明显,还有太多的零(这就是导致它的原因,对吧?)。在
我的问题是:什么条件使得Matlab判定一个点具有“小的相对大小”和“实际上是零”?在
在把数据交给Matlab之前,我想用python从数据集中删除所有这些点,因为我需要将我的结果与python中处理的黄金标准进行比较。在
提前谢谢!在
编辑答案
下面给出了正确的答案,但是如果有人通过Google找到这个问题,下面是如何在python中从矩阵中删除“有效的零向量”。每行(!)是一个数据点,因此如果运行kmeans,则需要在python或Matlab中进行转置:
^{pr2}$我相信有一种更科学的方法来做这件事,但它会做的:-)
如果使用的是this kmeans,则引发错误的相关代码是:
所以这是你的测试。 正如你所看到的,重要的是相对大小,所以给所有东西加一个只会让事情变得更糟(
max(Xnorm)
也越来越大)。一个好的解决方法可能是按常量缩放所有数据。在在你的other question中,你的数据看起来是标量的。如果输入向量只有一个特征/维度,则它们之间的余弦距离将始终未定义(或为零),因为根据定义,它们指向同一方向(沿单个轴)。余弦度量给出两个向量之间的角度,只有当两个向量可以指向不同的方向时,这个角度才可以是非零的(即尺寸>1)。在
相关问题 更多 >
编程相关推荐