机器学习初学者的K-Means聚类算法概述

秋田小鼠 2018-10-19

任何在google上搜索“数据科学”的人都可能看到过机器学习中的k-means聚类算法。K-means是一种简单但功能强大的分类工具,它根据相似的特征将数据分配到组中。例如,它可以用于根据电影标题和上映日期预测电影类型,或者根据客户的购买模式分类客户。现在让我们逐步介绍k-means算法的工作原理。

视觉上的K-Means聚类算法

让我们假设我们在照顾奶牛,我们决定通过将具有相似特征的奶牛组合在一起来为我们的奶牛建立”朋友圈“。我们有关于每头奶牛的体重和年产奶量的数据。让我们绘制它。

机器学习初学者的K-Means聚类算法概述

为了演示,我制作了这个奶牛数据,以便我们可以清楚地看到三个不同的聚类

在我们正式进入k-means之前,我们需要采取非常重要的一步:缩放我们的数据。K-means通过计算点之间的距离来工作,如果我们的轴的比例不同,那么k-means可能会产生一些奇怪的,不准确的结果。您可以通过从每行中减去平均值并将结果除以标准差来缩放特征。

那么k-means算法是如何开始的呢?我们首先猜测数据中有多少个聚类。由于我已经绘制了我的数据,我怀疑3是一个很好的聚类数量。

一旦我们做了猜测,我们就会随机地在这片区域上加一些点,我们估计需要的每一个集群都有一个点。这些是质心,它们将把我们的点聚集起来。

机器学习初学者的K-Means聚类算法概述

在这里,我在区域中间的一条线上放了三颗星来代表我们的质心。这些初始位置背后没有任何意义。这些只是我们对每个cluster的质心位置的初步猜测。

我们的下一步是将每个数据点分配给一个质心。这是通过计算每个点到每个质心之间的距离来完成的。每个点都被分配到最近的质心。

根据您拥有的数据类型,您可以使用一些不同的距离度量。由于我们的数据是简单的定量数据,我们将使用欧几里德距离。您可能会记住几何中的这个等式:

机器学习初学者的K-Means聚类算法概述

让我们现在迈出第一步,为质心分配点,形成我们的第一个cluster:

机器学习初学者的K-Means聚类算法概述

到目前为止看起来还不错。红星附近有一个黑点也应该是红色,但是我们会看到在下一次迭代中是否正确排序。

下一步是重新定位质心,使它们位于新cluster的几何中心。我们通过查找聚类中所有点的平均位置来做到这一点(n是每个聚类中的点数):

机器学习初学者的K-Means聚类算法概述

一旦我们找到了每个聚类中心,我们就可以移动我们的质心。这是我们使用正确居中的质心更新的图形:

机器学习初学者的K-Means聚类算法概述

如果你研究一下这个图形,你会注意到黑色质心已经向上移动了很远,以至于它不再是离红星附近的那个黑点最近的质心。红色质心现在是最接近的,可能更适合那一点。这就是为什么k-means是一个迭代过程:当质心在图上漂移并且质心和它们的点之间的距离发生变化时,点可能需要被shuffled 到其他clusters中。这种迭代使k-means如此有效。

让我们继续,再次完成整个过程,看看我们是否可以让黑点变成红色:

机器学习初学者的K-Means聚类算法概述

这一次 - 因为红色质心更接近那个分散的黑点,这一点被重新归类为红色。您还可以看到红色和黑色质心移动以反映其聚类的更新平均位置。

现在我们有了我们的牛的”朋友圈“!让我们希望体重和每日产奶平均值是奶牛友谊的重要决定因素。如果我们要对这些数据进行更多的k-means迭代,我们会发现它不会改变任何东西 - 模型在两次迭代后收敛。大多数数据不会像我们在这里看到的那样有明确定义的聚类,并且可能需要多次迭代才能收敛到一个答案,但关于k-means的一个美妙的事情是,它总是能够最终解决问题。

k-means聚类算法的步骤是逐步的。我们可以像这样总结这个过程:

  1. 选择k,您希望形成的聚类数
  2. 随机定位k质心
  3. 计算每个数据点与每个质心之间的距离
  4. 将每个数据点分配给最接近它的质心
  5. 将每个质心移动到其cluster的几何中心
  6. 重复步骤3到5,直到clusters停止更改

有很多库可以为您执行此过程,因此您无需自己编写。(对于Python用户,scikit-learn库具有执行k-means聚类所需的一切。)

最后一点:不要忘记缩放你的数据!

相关推荐