目录
13 聚类算法
13-1 无监督学习

 无监督学习的数据集是一堆不带标签的数据,他们没有
    
     
      
       
        y
       
      
      
       y
      
     
    y的值,只有
    
     
      
       
        x
       
      
      
       x
      
     
    x的值
13-2 K均值(K-means)算法

 K均值算法的第一步(簇分配):确定两个聚类中心(图中蓝色叉和红色叉),遍历每一个样本(图中绿点),判断离哪个聚类中心更近,将样本分为两个簇,分完之后如下图
 
 K均值算法的第二步(移动聚类中心):计算每一簇中所有点的均值,并将聚类中心移动到该均值处,移动后如下图
 
 然后再重复第一步判断每一个样本离哪个聚类中心近,并改变他的颜色(分类),改变后再重复第二步。
 这样不断重复,得到最终结果
 
 这样就可以说K均值已经聚合了
 
 输入一个
    
     
      
       
        K
       
      
      
       K
      
     
    K表示想要将数据分为几类,输入不带标签的训练集
 设训练集是一个n维向量(按照惯例不考虑
    
     
      
       
        
         x
        
        
         0
        
       
       
        =
       
       
        1
       
      
      
       x_0=1
      
     
    x0=1这一项)
 
 如上图
 用
    
     
      
       
        K
       
      
      
       K
      
     
    K表示想要将数据分为
    
     
      
       
        K
       
      
      
       K
      
     
    K类
 用
    
     
      
       
        
         μ
        
        
         k
        
       
      
      
       \mu_k
      
     
    μk表示第
    
     
      
       
        k
       
      
      
       k
      
     
    k个聚类中心的位置(他是一个向量/矩阵),随机初始化获得
 用
    
     
      
       
        
         c
        
        
         
          (
         
         
          i
         
         
          )
         
        
       
      
      
       c^{(i)}
      
     
    c(i)表示样本中第
    
     
      
       
        i
       
      
      
       i
      
     
    i个点距离最近的那个聚类中心的下标,即第
    
     
      
       
        i
       
      
      
       i
      
     
    i个样本距离第
    
     
      
       
        
         c
        
        
         
          (
         
         
          i
         
         
          )
         
        
       
      
      
       c^{(i)}
      
     
    c(i)个聚类中心最近,即第
    
     
      
       
        i
       
      
      
       i
      
     
    i个样本属于第
    
     
      
       
        
         c
        
        
         
          (
         
         
          i
         
         
          )
         
        
       
      
      
       c^{(i)}
      
     
    c(i)个聚类中心,求法如上图中蓝色笔迹
 求完上述值后,计算每一个聚类中心包含的点的均值,赋值给对应的
    
     
      
       
        
         μ
        
        
         k
        
       
      
      
       \mu_k
      
     
    μk,此时已经得到新的聚类中心的位置
 如果有一个没有点的聚类中心,一般直接移除,这样最后会得到K-1类;但如果确实是需要分为K类,那么就将那个没有点的聚类中心重新随机初始化
 
 如上图,有时K均值算法也运用于不能很明显的分类的数据集,如收集了很多人的身高、体重作为数据集,可以看出这些数据基本是连续的,要将其分为S、M、L三类,用聚类算法,也能分为三类。聚类算法也可用于市场的分割
13-3 优化目标
    
     
      
       
        
         μ
        
        
         
          c
         
         
          
           (
          
          
           i
          
          
           )
          
         
        
       
      
      
       \mu_{c^{(i)}}
      
     
    μc(i)表示第
    
     
      
       
        i
       
      
      
       i
      
     
    i个样本所属聚类中心的位置
 
 K均值聚类算法的代价函数(优化目标函数)为
 
     
      
       
        
         J
        
        
         (
        
        
         
          c
         
         
          
           (
          
          
           1
          
          
           )
          
         
        
        
         ,
        
        
         .
        
        
         .
        
        
         .
        
        
         ,
        
        
         
          c
         
         
          
           (
          
          
           m
          
          
           )
          
         
        
        
         ,
        
        
         
          μ
         
         
          1
         
        
        
         ,
        
        
         .
        
        
         .
        
        
         .
        
        
         ,
        
        
         
          μ
         
         
          K
         
        
        
         )
        
        
         =
        
        
         
          1
         
         
          m
         
        
        
         
          ∑
         
         
          
           i
          
          
           =
          
          
           1
          
         
         
          m
         
        
        
         ∥
        
        
         
          x
         
         
          
           (
          
          
           i
          
          
           )
          
         
        
        
         −
        
        
         
          μ
         
         
          
           c
          
          
           
            (
           
           
            i
           
           
            )
           
          
         
        
        
         
          ∥
         
         
          2
         
        
       
       
        J(c^{(1)},...,c^{(m)},\mu_1,...,\mu_K)=\frac{1}{m}\sum_{i=1}^m\Vert x^{(i)}-\mu_{c^{(i)}}\Vert^2
       
      
     J(c(1),...,c(m),μ1,...,μK)=m1i=1∑m∥x(i)−μc(i)∥2
 表示的是每一个样本的位置与它所属的聚类中心位置作差,取范数,再平方,所有共m个样本加起来再求平均数
 这个代价函数有时也称为失真代价函数(the distortion cost function)或K均值算法的失真
13-4 随机初始化(K均值聚类算法)

- 从训练集中随机挑选
     
      
       
        
         K
        
       
       
        K
       
      
     K个样本,让第一到第K的聚类中心等于刚刚随机出来的
     
      
       
        
         K
        
       
       
        K
       
      
     K个样本

如上图,由于是随机挑选的聚类中心,所以结果可能是全局最优(如上图上面的坐标系),也可能落在局部最优上(如上图下面两个坐标系)
所以,采用多次随机初始化的方法寻找全局最优

如上图,多次随机初始化的方法为:
运行50-1000次K均值聚类算法,可以得到许多不同的代价函数的值,取最小的那个就是最优的聚类
如果K=2到10,那么多次随机初始化可以明显改进聚类算法效果,如果大于10,多次运行可能不会有特别明显的改善 
13-5 如何选择聚类数量K
一般是手动选择
 
- 如上图,运用肘部法则,坐标系x轴为聚类数量K,坐标系y轴为代价函数的值,绘制曲线后,如左侧的坐标系,能看到曲线在K=3处由很高的斜率转为了很低的斜率,这一点认为是“肘部”,选择K=3是合适的,但也有可能曲线是如右边坐标系的图像,不能明确地找出合适的聚类数量
 
或者另外一种方法,根据下游目的来手动选择聚类数量










