K-means算法

目录

  • 算法概述
  • 算法原理
  • 算法推导
  • 算法流程
  • 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=1kXCi(CiX)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} CkSSE=Cki=1kXCi(CiX)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=1kXCiCk(CiX)2 = ∑ X ∈ C i 2 ( C i − X ) =\begin{matrix} \sum_{X \in C_i}\end{matrix}2(C_i-X) =XCi2(CiX) ∑ X ∈ C i 2 ( C i − X ) = 0 \begin{matrix} \sum_{X \in C_i}\end{matrix}2(C_i-X)=0 XCi2(CiX)=0,得: m i C i = ∑ X ∈ C i X m_iC_i=\begin{matrix} \sum_{X \in C_i}\end{matrix}X miCi=XCiX 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=mi1XCiX
由推导可以看出,当质心为簇中数据均值时,SSE最小

算法推导

K-means算法_第1张图片
K-means算法_第2张图片

算法流程

1、随机给出k个初始聚类中心
2、repeat:
把每一个数据对象重新分配到k个聚类中心处,形成k个簇 重新计算每一个簇的聚类中心
3、until 聚类中心不在发生变化(簇内样本点不改变)
K-means算法_第3张图片

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=1kXCi(CiX)2
但K值太大聚类的效果不怎好,SSE的下降也逐渐变小特点当K值小于真实聚类数时,K值的增大对聚类效果产生的影响很大,SSE的下降幅度也很大;
当K值大于真实聚类数时,K值的增大对聚类效果产生的影响很小,SSE的下降幅度也很小;
呈现出来的图像是先下降的很快,后平缓,在其邻接的地方图像上呈现为手肘状,因此形象的称其为手肘法。
K-means算法_第4张图片

初始化质心
随机初始化质心可能导致算法的迭代次数增加,K-means++是对K-means随机选取质心的一个优化具体步骤如下:
1.随机选取一个点作为第一个聚类的中心
2.计算所有样本与第一个聚类中心的距离
3.选择上一步中距离最大的点作为第二个聚类中心
4.迭代:计算所有点到与之最近的聚类中心的距离,选取最大距离的点作为新的聚类中心
5.直到选出来这K个点,结束迭代

k-means算法不会陷入一直改变质心的循环之中,最终的质心一定是确定的

你可能感兴趣的:(机器学习,kmeans算法)