You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
# 物以类聚人以群分-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 表示类别的中心,数据点的颜色代表不同的类别,总共迭代`12`次,下图为部分迭代的结果):
|
|
|
|
|
|
|
|
|
|
<div align=center><img src="./img/1019.jpg", height="300" width="350"/></div>
|
|
|
|
|
|
|
|
|
|
<div align=center><img src="./img/1020.jpg", height="300" width="350"/></div>
|
|
|
|
|
|
|
|
|
|
<div align=center><img src="./img/1021.jpg", height="300" width="350"/></div>
|
|
|
|
|
|
|
|
|
|
<div align=center><img src="./img/1022.jpg", height="300" width="350"/></div>
|
|
|
|
|
|
|
|
|
|
<div align=center><img src="./img/1023.jpg", height="300" width="350"/></div>
|