OpenCV-Python教程:54.K-Means集群

2017-06-30  本文已影响102人  xxxss

理论

我们用一个常用的例子来处理这个

T恤尺寸问题

假设有个公司,要发布一个新款的T恤到市场。显然他们得生产不同尺寸的来满足不同的人。所以公司会做一个人的身高体重的数据,把他们画到图上,如下:

公司不可能生产所有尺寸的T恤,他们会把人分成小,中,大。然后只生产这三种模型,来适应所有的人群。把人分成三组这个可以用k-means集群来实现,算法可以给我们最好的3种尺寸,可以满足所有的人,如果不能,公司可以把人分成更多的组,可能是5组,等等。如下图:

如何实现的?

这个算法是一个迭代过程,我们会一步步解释。

假设一个数据集如下(你可以认为是T恤问题)。我们需要把这些数据集群成两组。

步骤1,算法随机选择两个质心,C1和C2(有时,任意两个数据作为质心)。

步骤2,计算从每个点到两个质心的距离。如果测试数据离C1更近,那么数据被标记为'0',如果离C2近,就标记为'1'(如果有更多质心,标记为'2', '3'等)。

在我们这个例子里,我们会把所有'0'标签的染红,'1'标签的染蓝,所以我们做完上面的操作后会得到下面的图像:

步骤3,然后我们计算所有蓝色点平均值和红色点的平均值,这会是新的质心。C1和C2会移动到新的质心(记住,这些图像不是真实值和真实尺度,只是演示)

再一次,用新的质心执行步骤2并标记数据为‘0’和'1'。

所以我们得到下面的结果:

现在不断迭代步骤2和步骤3直到两个质心收敛到固定点。(或者它可能停在我们提供的标准,比如最大迭代次数。或者到达指定准确率等)这些点使得测试数据和他们对应的质心的距离总和最小。或者简单说,C1 <-> 红点 和C2 <-> 蓝点的距离综合最小。

最后的结果差不多看上去如下:

所以这是一个直观的对K-means集群的理解。

上一篇下一篇

猜你喜欢

热点阅读