机器学习:Python实现K-MEANS聚集

k-means聚类是一种矢量量化方法,最初来源于信号处理,在数据挖掘中被广泛应用于聚类分析。k-means聚类的目的是将n个观测值划分为k个观测值,每个观测值都属于最接近均值的聚类,作为聚类的原型。这导致将数据空间划分为Voronoi单元。

这个问题在计算上很难(NP-hard);然而,有有效的启发式算法,通常使用和收敛到局部最优。这通常类似于混合高斯分布的期望最大化算法,通过k-means和高斯混合建模的迭代细化方法。此外,它们都使用clustercenters来建模数据;然而,k-means聚类倾向于找到空间范围相似的聚类,而期望最大化机制允许聚类具有不同的形状。

k均值算法的作用是从识别最佳拟合类别的过程中去除复杂性,并选择最佳clusters数。首先我们需要定义k:

然后我们选择2个随机点,我们称之为质心,并将每个数据点分配给最后的质心:

所以这是我们的散点图,我们可以看到我们无法清楚地看到我们的2个聚类,因此我们选择k个随机点,并将每个质心分配给最近的数据点并通过一条线连接它们:

从几何学我们知道蓝线的任何点都是等距的,因此我们可以开始聚类我们的数据点。接下来,我们将2个新质心指定为新的重心:

因此,我们必须将每个数据点重新分配给新的质心,并创建一个新的聚类,我们调整质心,将质心放置到这些位置并绘制一条新线:

....我们迭代过程直到我们不需要重新分配新点,我们可以继续完成我们的算法。这是我们的最终结果:

然而,在某些情况下,事情并非如此简单,我们可能会陷入所谓的随机初始化陷阱。为了解释inizializationtrapp,让我们再次考虑我们的散点图:

在这种情况下,我们将选择3个集群。但是会发生什么呢?我们有一个糟糕的随机原因?在这种情况下,我们将选择我们的质心,并且我们的数据点仍然与每条线等距,因此基于此方法,我们应该有3个类别。现在我们移动质心,所以我们将质心调整到新位置:

正如我们从图表中看到的那样,没有任何变化,算法会收敛。现在这与我们在开始时看到的情况不同!

发生这种情况是因为质心的选择可以决定算法的结果,但是对算法的修改有额外的选择,允许我们选择最佳的cetroids,这确实是K均值算法。这是一种复杂的方法,所有这些都发生在后台,所以你不需要实现它。只是我们知道有一个最好的质心,并且K-means方法在这个初始化中实现,它找到了最佳的簇数。

现在考虑:如果我们只选择了一个类别而不是3个custers,我们将得到更大的值!

如果我们将clusters数增加到2,那么距离的总和肯定会更少。现在我们再次增加到3个,距离将比前2个更接近质心,因此总和正在减少。它会减少多远?我们可以拥有与数据点数量一样多的cluester,因此在这种情况下,WCSS将如何表现?它肯定等于0,因为每个点都对应于质心。WCSS是一个很好的指标,但同时它不断下降,那么我们如何找到最佳呢?让我们看一下图表:

在这里WCSS从一个非常大的数字开始,你可以看到从8跳到1K,然后它稳定下来。前两个改进在WCSS中产生了一些巨大的下降,这是我们的暗示,这一点将是最佳的!为了在Python上实现k-means算法,我们需要使用我们想要执行聚类的变量进行分段。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181002A0NUR700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券