K-Means算法

非监督式学习对一组无标签的数据试图发现其内在的结构,主要用途包括:

  • 市场划分(Market Segmentation)
  • 社交网络分析(Social Network Analysis)
  • 管理计算机集群(Organize Computer Clusters)
  • 天文学数据分析(Astronomical Data Analysis)

K-Means算法属于非监督式学习的一种,算法的输入是:训练数据集$\{x^{(1)},x^{(2)},\ldots, x^{(m)}\}$(其中$x^{(i)}\in R^{n}$)和聚类数量$K$(将数据划分为$K$类);算法输出是$K$个聚类中心$\mu_1, \mu_2, \ldots, \mu_K$和每个数据点$x^{(i)}$所在的分类。

K-Means算法步骤

  1. 随机初始化$K$个聚类中心(cluster centroid) $\mu_1, \mu_2, \ldots, \mu_K$
  2. Cluster Assignment: 对于每个数据点$x^{(i)}$,寻找离它最近的聚类中心,将其归入该类;即$c^{(i)}=\min\limits_k||x^{(i)}-\mu_k||^2$,其中$c^{(i)}$表示$x^{(i)}$所在的类
  3. Move Centroid: 更新聚类中心$u_k$的值为所有属于类$k$的数据点的平均值
  4. 重复2、3步直到收敛或者达到最大迭代次数

图1 K-Means算法示例

K-Means算法的优化目标

用$\mu_{c^{(i)}}$表示第$i$个数据点$x^{(i)}$所在类的中心,则K-Means优化的代价函数为$$J(c^{(1)},\ldots,c^{(m)},\mu_1,\ldots,\mu_K)=\frac{1}{m}\sum\limits_{i=1}^{m}||x^{(i)}-\mu_{c^{(i)}}||^2$$希望找到最优参数使得该函数最小化,即$$\min\limits_{\substack{c^{(1)},\ldots,c^{(m)} \\ \mu_1,\ldots,\mu_K}}J(c^{(1)},\ldots,c^{(m)},\mu_1,\ldots,\mu_K)$$

需要注意的问题

  • 随机初始化:常用的初始化方法是,从训练数据点中随机选择$K$($K < m$)个数据点,作为初始的聚类中心$\mu_1, \mu_2, \ldots, \mu_K$
  • 局部最优:算法聚类的性能与初始聚类中心的选择有关,为避免陷入局部最优(如图2所示),应该运行多次(50次)取使得$J$最小的结果
  • $K$值选择:Elbow方法,绘制$J$随$K$的变化曲线,选择下降速度突然变慢的转折点作为K值;对于转折不明显的曲线,可根据K-Means算法后续的目标进行选择。


图2 K-Means算法的全局最优解和局部最优解

图3  用Elbow方法选择K值的情况(左)和Elbow法不适用的情况(右)

PCA降维算法

动机

数据压缩:将高维数据(n维)压缩为低维数据(k维)

数据可视化:将数据压缩到2维/3维方便可视化

PCA问题形式化

如果需要将二维数据点,压缩为一维数据点,我们需要找到一个方向,使得数据点到这个方向上投射时的误差最小(即点到该直线的距离最小);更一般地,如果需要将$n$维的数据点压缩到$k$维,我们需要找到$k$个新的方向$u^{(1)}, u^{(2)}, \ldots, u^{(k)}$使得数据点投射到每个方向$u^{(i)}$时的误差最小。


图4 PCA实例,将2维数据点压缩为1维数据点,找到新的方向$u_1$,使得投射误差(图中的垂线距离如$x^i$到${\widetilde x}^i$)最小

注意:PCA和线性回归的区别,PCA是保证投射的误差(图5右的黄线)最小,而线性回归是保证沿$y$方向的误差(图5左的黄线)最小.

图5 线性回归和PCA优化目标的区别

PCA算法步骤

1. 数据预处理:mean normalization:$\mu_j = \frac{1}{m}\sum\limits_{i=1}^{m}x_j^{(i)}, x_j^{(i)}=x_j-\mu_j$;feature scaling:(可选,不同特征范围差距过大时需要) , $x_j^{(i)}=\frac{x^{(i)}-\mu_j}{\sigma_j}$

2. 计算协方差矩阵(Convariance Matrix) $$\Sigma=\frac{1}{m}\sum\limits_{i=1}^{m}x^{(i)}(x^{(i)})^T \quad \text{or} \quad \Sigma = \frac{1}{m}X^TX$$

3. 计算协方差矩阵$\Sigma$的特征向量  [U, S, V] = svd(Sigma)

4. 选择U矩阵的前k个列向量作为k个主元方向,形成矩阵$U_{reduce}$

5. 对于每个原始数据点$x$($x\in R^n$),其降维后的数据点$z$($z \in R^k$)为 $z=U_{reduce}^T x$

应用PCA

重构数据:对于降维后k维数据点z,将其恢复n维后的近似点为 $x_{apporx}(\approx x)=U_{reduce}z$

选择k值

  • 平均投射误差(Average square projection error):$\frac{1}{m}\sum\limits_{i=1}^{m}||x^{(i)}-x^{(i)}_{approx}||^2$
  • total variation: $\frac{1}{m}\sum\limits_{i=1}^{m}||x^{(i)}||^2$
  • 选择最小的k值使得 $\frac{\frac{1}{m}\sum\limits_{i=1}^{m}||x^{(i)}-x^{(i)}_{approx}||^2}{\frac{1}{m}\sum\limits_{i=1}^{m}||x^{(i)}||^2} \leq 0.01(0.05)$,也可以使用SVD分解后的S矩阵进行选择 $1-\frac{\sum\limits_{i=1}^{k}S_{ii}}{\sum\limits_{i=1}^{n}S_{ii}}\leq 0.01(0.05)$

应用PCA的建议

  • 用于加速监督式学习:(1) 对于带标签的数据,去掉标签后进行PCA数据降维,(2)使用降维后的数据进行模型训练,(3) 对于新的数据点,先PCA降维得到降维后数据,带入模型获得预测值。:应仅用训练集数据进行PCA降维获取映射$x^{(i)}\rightarrow z^{(i)}$,然后将该映射(PCA选择的主元矩阵$U_{reduce}$)应用到验证集和测试集
  • 不要用PCA阻止过拟合,用regularization。
  • 在使用PCA之前,先用原始数据进行模型训练,如果不行,再考虑使用PCA;而不要上来直接使用PCA。

参考文献

[1] Andrew Ng Coursera 公开课第八周

[2] 漫谈Clustering:k-means. http://blog.pluskid.org/?p=17

[3] k-means clustering in a GIF. http://www.statsblogs.com/2014/02/18/k-means-clustering-in-a-gif/

[4] Wikipedia: Principal component analysis. https://en.wikipedia.org/wiki/Principal_component_analysis

[5] Explained Visually: Principal component analysis http://setosa.io/ev/principal-component-analysis/

机器学习公开课笔记(8):k-means聚类和PCA降维的更多相关文章

  1. Andrew Ng机器学习公开课笔记 -- 支持向量机

    网易公开课,第6,7,8课 notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf SVM-支持向量机算法概述, 这篇讲的挺好,可以参考   先继 ...

  2. Andrew Ng机器学习公开课笔记–Principal Components Analysis (PCA)

    网易公开课,第14, 15课 notes,10 之前谈到的factor analysis,用EM算法找到潜在的因子变量,以达到降维的目的 这里介绍的是另外一种降维的方法,Principal Compo ...

  3. Andrew Ng机器学习公开课笔记 -- Mixtures of Gaussians and the EM algorithm

    网易公开课,第12,13课 notes,7a, 7b,8 从这章开始,介绍无监督的算法 对于无监督,当然首先想到k means, 最典型也最简单,有需要直接看7a的讲义   Mixtures of G ...

  4. Andrew Ng机器学习公开课笔记 -- 学习理论

    网易公开课,第9,10课 notes,http://cs229.stanford.edu/notes/cs229-notes4.pdf 这章要讨论的问题是,如何去评价和选择学习算法   Bias/va ...

  5. Andrew Ng机器学习公开课笔记 – Factor Analysis

    网易公开课,第13,14课 notes,9 本质上因子分析是一种降维算法 参考,http://www.douban.com/note/225942377/,浅谈主成分分析和因子分析 把大量的原始变量, ...

  6. Andrew Ng机器学习公开课笔记 -- Generalized Linear Models

    网易公开课,第4课 notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 前面介绍一个线性回归问题,符合高斯分布 一个分类问题,logstic回 ...

  7. Andrew Ng机器学习公开课笔记 -- Regularization and Model Selection

    网易公开课,第10,11课 notes,http://cs229.stanford.edu/notes/cs229-notes5.pdf   Model Selection 首先需要解决的问题是,模型 ...

  8. 机器学习公开课笔记(5):神经网络(Neural Network)——学习

    这一章可能是Andrew Ng讲得最不清楚的一章,为什么这么说呢?这一章主要讲后向传播(Backpropagration, BP)算法,Ng花了一大半的时间在讲如何计算误差项$\delta$,如何计算 ...

  9. 机器学习公开课笔记(4):神经网络(Neural Network)——表示

    动机(Motivation) 对于非线性分类问题,如果用多元线性回归进行分类,需要构造许多高次项,导致特征特多学习参数过多,从而复杂度太高. 神经网络(Neural Network) 一个简单的神经网 ...

随机推荐

  1. Django1.8教程——从零开始搭建一个完整django博客(一)

    第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...

  2. CSS培训机构

    CSS培训机构[跑赢职场,跑赢未来] CSS培训机构[跑赢职场,跑赢未来]CSS设计热度白热化的今天,如何选对专业的CSS设计培训学校/机构,成为众多人关注的话题.跑赢职场就是css培训机构中的佼佼者 ...

  3. DELL R720系统内存指南

    该文章摘自于:http://www.dell.com/support/article/cn/zh/cndhs1/SLN153646/zh#issue3,仅供个人作为笔记使用 PowerEdge R72 ...

  4. POJ2286 The Rotation Game

    Description The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see ...

  5. 初次使用erlang的concurrent

    如果不是它骇人听闻的并行性能,几乎不会考虑去学习这么一门语言.因为它的并行,我看到的是一块用软件写出来的电路板,是的,它几乎就是把电脑变成了一个可以自由编写逻辑的芯片. 例程来自这里:http://w ...

  6. 【基础语法】a++与++a的区别

    package com.on.learn.e2; /** * @author lj * 自增:a++与++a a++是指本行表达式不使用a自增后的值,++a是指本行开始就已经使用a自增后的值 * */ ...

  7. nginx&apache比较

    1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx ...

  8. HD2255奔小康赚大钱(最大权匹配模板)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...

  10. yii 10.16

    什么是框架? a)         框架就是一个半成品,一个帮助我们完成业务流程的程序 b)        框架融合了很多的功能,但是不会给我们具体功能模块 c)         我们需要在框架的基础 ...