目录
- 算法概述
- 算法原理
- 算法推导
- 算法流程
- K值的确定
算法概述
K-means算法也称为K_均值算法,用于聚类算法。聚类是一种无监督学习,他将相似的对象归于一个簇中,簇中心通过簇中所有点的均值来计算。聚类算法与分类算法的主要区别就是分类的目标类别已知,而聚类的目标类别未知。
簇:所有数据点的点集合,簇中的对象是相似的
质心:簇中所有点的中心(由簇中所有点的均值求得)
SSE:Sum of Sqared Error 平方误差和,SSE越小表示越接近质心
算法原理
误差平方和SSE用来衡量K-means算法的好坏 S S E = ∑ i = 1 k ∑ X ∈ C i ( C i − X ) 2 SSE=\begin{matrix} \sum_{i=1}^k \end{matrix}\begin{matrix} \sum_{X \in C_i}(C_i-X)^2\end{matrix} SSE=∑i=1k∑X∈Ci(Ci−X)2C为聚类中心,X为簇中数据点 ∂ S S E ∂ C k = ∂ ∂ C k ∑ i = 1 k ∑ X ∈ C i ( C i − X ) 2 \frac{\partial SSE}{\partial C_k}=\frac{\partial }{\partial C_k}\begin{matrix} \sum_{i=1}^k \end{matrix}\begin{matrix} \sum_{X \in C_i}(C_i-X)^2\end{matrix} ∂Ck∂SSE=∂Ck∂∑i=1k∑X∈Ci(Ci−X)2 = ∑ i = 1 k ∑ X ∈ C i ∂ ∂ C k ( C i − X ) 2 =\begin{matrix} \sum_{i=1}^k \end{matrix}\begin{matrix} \sum_{X \in C_i}\end{matrix}\frac{\partial }{\partial C_k}(C_i-X)^2 =∑i=1k∑X∈Ci∂Ck∂(Ci−X)2 = ∑ X ∈ C i 2 ( C i − X ) =\begin{matrix} \sum_{X \in C_i}\end{matrix}2(C_i-X) =∑X∈Ci2(Ci−X)令 ∑ X ∈ C i 2 ( C i − X ) = 0 \begin{matrix} \sum_{X \in C_i}\end{matrix}2(C_i-X)=0 ∑X∈Ci2(Ci−X)=0,得: m i C i = ∑ X ∈ C i X m_iC_i=\begin{matrix} \sum_{X \in C_i}\end{matrix}X miCi=∑X∈CiX C i = 1 m i ∑ X ∈ C i X C_i=\frac{1}{m_i}\begin{matrix} \sum_{X \in C_i}\end{matrix}X Ci=mi1∑X∈CiX
由推导可以看出,当质心为簇中数据均值时,SSE最小
算法推导
算法流程
1、随机给出k个初始聚类中心
2、repeat:
把每一个数据对象重新分配到k个聚类中心处,形成k个簇 重新计算每一个簇的聚类中心
3、until 聚类中心不在发生变化(簇内样本点不改变)
K值的确定
1.手肘法
随着聚类数k的增大,样本划分的更加精细,那么平方误差和SSE会逐渐变小 S S E = ∑ i = 1 k ∑ X ∈ C i ( C i − X ) 2 SSE=\begin{matrix} \sum_{i=1}^k \end{matrix}\begin{matrix} \sum_{X \in C_i}(C_i-X)^2\end{matrix} SSE=∑i=1k∑X∈Ci(Ci−X)2
但K值太大聚类的效果不怎好,SSE的下降也逐渐变小特点当K值小于真实聚类数时,K值的增大对聚类效果产生的影响很大,SSE的下降幅度也很大;
当K值大于真实聚类数时,K值的增大对聚类效果产生的影响很小,SSE的下降幅度也很小;
呈现出来的图像是先下降的很快,后平缓,在其邻接的地方图像上呈现为手肘状,因此形象的称其为手肘法。
初始化质心
随机初始化质心可能导致算法的迭代次数增加,K-means++是对K-means随机选取质心的一个优化具体步骤如下:
1.随机选取一个点作为第一个聚类的中心
2.计算所有样本与第一个聚类中心的距离
3.选择上一步中距离最大的点作为第二个聚类中心
4.迭代:计算所有点到与之最近的聚类中心的距离,选取最大距离的点作为新的聚类中心
5.直到选出来这K个点,结束迭代
k-means算法不会陷入一直改变质心的循环之中,最终的质心一定是确定的