zoukankan      html  css  js  c++  java
  • EM算法(1):K-means 算法

    目录

    EM算法(1):K-means 算法

    EM算法(2):GMM训练算法

    EM算法(3):EM算法运用

    EM算法(4):EM算法证明

              

                     EM算法(1) : K-means算法

    1. 简介

      K-means算法是一类无监督的聚类算法,目的是将没有标签的数据分成若干个类,每一个类都是由相似的数据组成。这个类的个数一般是认为给定的。

     

    2. 原理

      假设给定一个数据集$mathbf{X} = {mathbf{x}_1, mathbf{x}_2,...,mathbf{x}_N }$, 和类的个数K。我们的每个类都用一个中心点$mu_k$表示。每个数据集都应该被归为某一个类,那么我们定义$r_{nk}$:如果$mathbf{x}_n$属于类k,则$r_{nk}$=1;如果$mathbf{x}_n$不属于类k,则$r_{nk}$=0。那么我们就可以定义一个误差函数$mathbf{J}$:

              $mathbf{J} = sum_nsum_kr_{nk}||mathbf{x}_n - mu_k||^2$

      误差函数直观理解为每个数据点离自己类的中心点的距离之和。那么我们的目标就是 min $mathbf{J}$。我们发现,$mathbf{J}$中$r_{nk}$和$mu_k$都是未知的,直接求导的话没有闭式解。所以我们需要换一个方法,这就是所谓的k-keans算法。

      k-means算法分为两步。第一步,假设各个类的中心$mu_k$已知,那么所有$r_{nk}$都可以求出,计算方法采取最近邻原则,即

              $r_{nk} = 1$  if  $k = arg min_j||mathbf{x}_n - mu_j||^2$              (1)   

              $r_{nk} = 0$  otherwise                        (2)

      第二步,假设所有$r_{nk}$都已知,将$mathbf{J}$对$mu_k$求导等于零,那么:

              $frac{partialmathbf{J}}{partialmu_k}$ = $2sum_nr_{nk}(mathbf{x}_n-mu_k)$ = 0

      那么很容易得到$mu_k$的闭式解:

              $mu_k = frac{sum_nr_{nk}mathbf{x}_n}{sum_nr_{nk}}$

      k-means有更通俗的解释,第一步其实是给每个数据点都分类,分类方法采取最近邻原则;第二步是根据分类的结果,将中心点重新计算,计算方式为类中所有点的中心点。

    3. 与EM算法的关系

      这就是为什么在EM算法系列中我们要讲k-means算法的原因:k-means是最简单的EM算法。EM算法全称为Expectation-Maximization algorithm。其也是分为两步,第一步叫Expectation,第二步叫Maximization。

      EM算法取名是有其意义的,比如第一步Expectation,顾名思义就是计算期望。那么在k-means算法中,第一步计算$r_{nk}$其实是计算Expectation的一步。$r_{nk}$可以看做是$mathbf{x}_n$属于各个类的概率,只不过它们取值只有0和1,但也符合概率的定义。那么$mathbf{x}_n$ 的误差期望就是:$sum_kr_nk||mathbf{x}_n - mu_k||^2$。那么所有点的误差期望之和为:

              $sum_nsum_kr_{nk}||mathbf{x}_n-mu_k||^2$

      我们可以发现,这其实就是k-means算法中的$mathbf{J}$。

      EM算法第二步就是对求得的期望求最值。那么在k-means算法中,第二步对$mathbf{J}$求导等于零其实就是在求最值,这也正好对应EM算法的第二步。所以我们可以看到,其实k-means就是EM算法的一种。

      我们知道,用平方和来计算误差其实就是隐性假设原数据服从高斯分布,那么后续我们会看到,我们用EM算法和高斯分布,也能推导出k-means算法。

  • 相关阅读:
    Candy leetcode java
    Trapping Rain Water leetcode java
    Best Time to Buy and Sell Stock III leetcode java
    Best Time to Buy and Sell Stock II leetcode java
    Best Time to Buy and Sell Stock leetcode java
    Maximum Subarray leetcode java
    Word Break II leetcode java
    Word Break leetcode java
    Anagrams leetcode java
    Clone Graph leetcode java(DFS and BFS 基础)
  • 原文地址:https://www.cnblogs.com/ccienfall/p/6213072.html
Copyright © 2011-2022 走看看