Coursera机器学习 Week8 笔记

编程作业放到了github上:coursera_machine_learning

1. K-Means聚类算法

这是这门课中的第一个非监督学习算法(unsupervised learning)。非监督学习在之前的课程中已经介绍过了,就是不给出数据 x 所对应于label y,模型的目的就是把同类的 x 聚集到一起去,而类别是什么是未知的。

K-means就是一个聚类算法,其目的就是将一堆数据分到几个未知的类别中去。

1.1 算法过程

第一步:随机选择k个聚类中心(cluster centriods),如k=2

第二步:计算各样例点到这k个聚类中心的距离,让样例点属于距离自己近的那个聚类中心所属的类别。

第三步:重新决定聚类中心,为各类中所有样例的平均值

[重复第二步和第三步]

更新各样例所属类别
更新聚类中心

总结一下,步骤如下:

随机初始化K个聚类中心μ1,μ2,...,μK
重复{
         for i = 1 to m: [Cluster Assignment Step]
                  c(i):= 距离 x(i) 最近的聚类中心的索引
         for k = 1 to K: [Move Centroid Step]
                  μk:= 所有属于 k 类的样本点的平均值
}

和监督学习一样,K-means也有自己的cost function和优化目标:

J(c(1),...c(m);μ1,..μK)=1mi=1mx(i)μc(i)

minc(1),...c(m);μ1,..μKJ(c(1),...c(m);μ1,..μK)

很好的是,这个优化目标其实已经包含在了上述的分类步骤中了:

[Cluster Assignment Step]: 通过更新 c(1),...c(m) 来最小化 J(c(1),...c(m);μ1,..μK)

[Move Centroid Step]: 通过更新 μ1,..μK 来最小化 J(c(1),...c(m);μ1,..μK)

所以进行完上述步骤,就 minc(1),...c(m);μ1,..μKJ(c(1),...c(m);μ1,..μK) 了。

1.2 聚类中心初始化

可以随机初始化聚类中心,还有一种方法是在训练集中随机挑选K个样例点,赋值给K个聚类中心。

在学习的过程中,和监督学习一样,很有可能会掉入“局部最优解”中,如下图(上面一幅是正确的聚类,下面两种都是局部最优聚类)

没啥好的解决办法,办法就是多初始化几次聚类中心,然后多训练几个K-means模型,然后从中选择一个让 J(c(1),...c(m);μ1,..μK) 最小的模型。

不过局部最优解,一般当K比较小的时候会出现。

1.3 聚类数量K的选择

有两种方法来确定K的取值。

第一种方法,称为“Elbow Method”,即去多个K,去训练多个K-means模型,然后画出K- J(c(1),...c(m);μ1,..μK) 的图像:

选择转折点的K值。

但并得做出来的图都有清晰的转折点:

第二种方法,根据实际应用来决定,比如说T-shirt的大小类别如果是S, M, L则K=3,如果是xS, S, M, L, xL则K=5。

2. PCA降维算法

在所给的数据集中,有时候会有一些噪音的干扰,需要我们从中挑选出重要的特征来,这就是降维算法的应用;又或者说我们想要可视化数据,可视化的最高维度就是三维,再高维的图像,人是看不到的,所以也需要把高维数据映射到低维度的空间中,可以让人观察到。

2.1 算法概述

目的:将高维度的特征空间映射到低维度的特征空间中来。

既然是映射问题,那么最直接的一个方法就是给定一个低维度空间,将高维度空间中的数据投影到这个低维度空间中去。那么如何确定这个低维度空间就是关键了。

要求:选择的低维度空间使得投影距离最小。

举例:从2维映射到1维空间。

图中有两个1维空间,紫红色的线和橘黄色的线,很明显,各数据点到橘黄色的线的距离远远小于到紫红色的线,所以选择橘黄色的线所表示的1维空间。在1维空间上这些数据点变成了下面的样子:

2.2 实际操作过程

下面的介绍实际操作中,应该如何找到这个合适的低维空间。这里面有关“奇异值分解”的数学原理一概不讲,知道用这个方法可以达到最终效果就行了。

第一步:数据预处理 - feature scaling/mean normalization

x(i)j:=x(i)jμjrange(xj)

第二步:计算协同矩阵
Σ=1mXTX

第三步:奇异值分解
                                                [U,S,V] = svd(sigma)
第四步:选择U中前K列作为低维空间
                                                U_reduce = U(:,:K)
第五步:将数据映射到这个低维空间
[z(i)=UTx(i)]

Z=UTX

至此,映射完毕,用 Z 代替X进行接下来的模型训练即可。

2.3 K的选择

在PCA算法中,应该如何选择低维空间的维度呢?

我们希望, x(i) 在被映射到低维空间后成为 z(i) ,将 z(i) 再映射回原来的高维空间,得到的 x(i)approx 中,大部分应该和 x(i) 是相同的,只有少部分因为映射损失了一些。用数学公式表示就是:

mi=1x(i)x(i)approx2mi=1x(i)20.01

在实际操作中,有一个更好的计算上述公式的方法;

mi=1x(i)x(i)approx2mi=1x(i)2=1Ki=1Siimi=1Sii0.01

即:

Ki=1Siimi=1Sii0.99

所以整个选择K的流程是:

从K=1开始,进行PCA过程,得到[U,S,V] = svd(sigma)
计算

Ki=1Siimi=1Sii0.99
是否成立
如果成立,输出所有结果,如果不成立, K=K+1 继续上述过程

注:PCA的降维目的并不是防止过拟合,防止过拟合的方法是引入regularization项

2.4 附录:背后的数学原理

参见:机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值