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.

30 lines
1.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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>