首页 > 代码库 > EM算法(1):K-means 算法

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

目录

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

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

EM算法(3):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_n\sum_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$       

                            $r_{nk} = 0$  otherwise

  

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