我一直在使用 scipy's k-means现在已经有一段时间了,我对它在可用性和效率方面的工作方式感到非常满意。但是,现在我想探索不同的 k-means 变体,更具体地说,我想申请 spherical k-means在我的一些问题中。
您知道球形 k 均值的任何良好 Python 实现(即类似于 scipy 的 k 均值)吗?如果不是,修改 scipy 的源代码以使其 k-means 算法适应球形有多难?
谢谢。
最佳答案
在球形 k-means 中,您的目标是保证中心位于球体上,因此您可以调整算法以使用余弦距离,并且还应该对最终结果的质心进行归一化。
当使用欧几里得距离时,我更愿意将算法视为在每次迭代中将聚类中心投影到单位球体上,即,在每个最大化步骤之后应该对中心进行归一化。
确实,当中心和数据点都归一化时,余弦距离和欧氏距离之间存在一对一的关系
|a - b|_2 = 2 * (1 - cos(a,b))
包裹jasonlaska/spherecluster将 scikit-learns 的 k-means
修改为 spherical k-means
并提供另一种球体聚类算法。
关于python - Python 中的球形 k-means 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226925/