机器学习公开课笔记(8):k-means聚类和PCA降维

http://www.cnblogs.com/python27/p/MachineLearningWeek08.html

K-Means算法

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

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

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

K-Means算法步骤

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

图1 K-Means算法示例

K-Means算法的优化目标

μc(i) 表示第 i 个数据点 x(i) 所在类的中心,则K-Means优化的代价函数为

J(c(1),,c(m),μ1,,μK)=1mi=1m||x(i)μc(i)||2
希望找到最优参数使得该函数最小化,即
minc(1),,c(m)μ1,,μKJ(c(1),,c(m),μ1,,μK)

需要注意的问题

  • 随机初始化:常用的初始化方法是,从训练数据点中随机选择 K ( K<m )个数据点,作为初始的聚类中心 μ1,μ2,,μ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),,u(k) 使得数据点投射到每个方向 u(i) 时的误差最小。


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

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

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

PCA算法步骤

1. 数据预处理:mean normalization: μj=1mi=1mx(i)j,x(i)j=xjμj ;feature scaling:(可选,不同特征范围差距过大时需要) ,  x(i)j=x(i)μjσj  

2. 计算协方差矩阵(Convariance Matrix)

Σ=1mi=1mx(i)(x(i))TorΣ=1mXTX

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

4. 选择U矩阵的前k个列向量作为k个主元方向,形成矩阵 Ureduce

5. 对于每个原始数据点 x ( xRn ),其降维后的数据点 z ( zRk )为  z=UTreducex

应用PCA

重构数据:对于降维后k维数据点z,将其恢复n维后的近似点为  xapporx(x)=Ureducez

选择k值

  • 平均投射误差(Average square projection error): 1mi=1m||x(i)x(i)approx||2
  • total variation:  1mi=1m||x(i)||2
  • 选择最小的k值使得  1mi=1m||x(i)x(i)approx||21mi=1m||x(i)||20.01(0.05) ,也可以使用SVD分解后的S矩阵进行选择  1i=1kSiii=1nSii0.01(0.05)

应用PCA的建议

  • 用于加速监督式学习:(1) 对于带标签的数据,去掉标签后进行PCA数据降维,(2)使用降维后的数据进行模型训练,(3) 对于新的数据点,先PCA降维得到降维后数据,带入模型获得预测值。:应仅用训练集数据进行PCA降维获取映射 x(i)z(i) ,然后将该映射(PCA选择的主元矩阵 Ureduce )应用到验证集和测试集
  • 不要用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/

标签:  机器学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值