在维基百科页面上,描述了用于确定k均值中的聚类数量的肘方法.scipy的内置方法提供了一个实现,但我不确定我是否理解它们所称的失真是如何计算的.
更确切地说,如果您绘制由集群解释的方差百分比与集群数量的关系图,则第一个集群将添加大量信息(解释大量方差),但在某些时候边际增益将下降,从而给出一个角度.图形.
假设我的相关质心有以下几点,那么计算这个量度的好方法是什么?
points = numpy.array([[ 0, 0],
[ 0, 1],
[ 0, -1],
[ 1, 0],
[-1, 0],
[ 9, 9],
[ 9, 10],
[ 9, 8],
[10, 9],
[10, 8]])
kmeans(pp,2)
(array([[9, 8],
[0, 0]]), 0.9414213562373096)
Run Code Online (Sandbox Code Playgroud)
我特别考虑计算0.94 ..测量给出的点和质心.我不确定是否可以使用任何内置的scipy方法,或者我必须编写自己的方法.关于如何有效地为大量积分做这些的任何建议?
简而言之,我的问题(所有相关的)如下:
编辑2:失真
from scipy.spatial.distance import cdist
D = cdist(points, centroids, 'euclidean')
sum(numpy.min(D, axis=1))
Run Code Online (Sandbox Code Playgroud)
第一组点的输出是准确的.但是,当我尝试不同的设置时:
>>> pp = numpy.array([[1,2], [2,1], [2,2], [1,3], [6,7], [6,5], [7,8], [8,8]])
>>> kmeans(pp, 2)
(array([[6, 7],
[1, 2]]), 1.1330618877807475)
>>> …Run Code Online (Sandbox Code Playgroud)