# 物以类聚人以群分-k Means **k Means**是属于机器学习里面的非监督学习,通常是大家接触到的第一个聚类算法,其原理非常简单,是一种典型的基于**距离**的聚类算法。**距离**指的是每个样本到质心的距离。那么,这里所说的质心是什么呢? 其实,质心指的是样本每个特征的均值所构成的一个坐标。举个例子:假如有两个数据 $$(1,1)$$ 和$$(2,2)$$ 则这两个样本的质心为 $$(1.5,1.5)$$。 同样的,如果一份数据有 $$m$$ 个样本,每个样本有 $$n$$ 个特征,用 $$x_i^j$$ 来表示第 $$j$$ 个样本的第 $$i$$ 个特征,则它们的质心为:$$Cmass=(\frac{\sum_{j=1}^mx_1^j}{m},\frac{\sum_{j=1}^mx_2^j}{m},...,\frac{\sum_{j=1}^mx_n^j}{m})$$。 知道什么是质心后,就可以看看**k Means算法**的流程了。 ## k Means算法流程 使用**k Means**来聚类时需要首先定义参数**k**,**k**的意思是我想将数据聚成几个类别。假设**k=3**,就是将数据划分成**3**个类别。接下来就可以开始**k Means**算法的流程了,流程如下: `1.`随机初始**k**个样本,作为类别中心。 `2.`对每个样本将其标记为距离类别中心最近的类别。 `3.`将每个类别的质心更新为新的类别中心。 `4.`重复步骤`2`、`3`,直到类别中心的变化小于阈值。 过程示意图如下(其中 X 表示类别的中心,数据点的颜色代表不同的类别): ![](./img/29.gif)