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

简介:

网易公开课,第14, 15课 
notes,10

之前谈到的factor analysis,用EM算法找到潜在的因子变量,以达到降维的目的

这里介绍的是另外一种降维的方法,Principal Components Analysis (PCA), 比Factor Analysis更为直接,计算也简单些

参考,A Tutorial on Principal Component Analysis, Jonathon Shlens

 

主成分分析基于,

在现实中,对于高维的数据,其中有很多维都是扰动噪音,或有些维是冗余的,对描述数据特征没有作用

比如我们在描述汽车速度的时候,用不同的单位mph or kph作为两维,其实只需要其中一维即可

那么如果对于一个高维数据,比如3维空间,大部分数据都集中于一个二维平面,那么我们用这个二维平面的两个主向量来替代3维向量,就达到降维的目的

并且这样的也尽可能的保留了原始变量的信息不丢失

推而广之,对于n维空间,数据点集中于一个k维的超平面,那么我们就可以说这个超平面的k个主向量为主成分

看NG说的直升机自动驾驶的例子,描述直升机驾驶员的水平 
x1,表示驾驶技能;x2,表示驾驶的爱好和兴趣,这两个维度其实是极度相关的,如下图 
可以看到其实所有点都是集中在u1这个axis附近的,所以我们可以用u1作为主成分来替代原先的x1和x2

image

其实可以看出,u1和u2是对x1和x2进行旋转的结果,旋转后发现其实数据集中在u1维度,u2方向表示noise 
对于n维空间,旋转后,发现用其中的k维就可以很好的描述数据,那么这k维就是主成分,并且坐标轴都是正交的,即特征间是独立的 
所以旋转后,选取得到的主成分也都是独立的

用特征值和特征向量再解释一下, 
对于一个n维矩阵,当前的n个特征即坐标轴,并不一定可以很好的反映数据,比如上面的例子看起来数据和两个坐标轴都是有很大相关性的 
所以我们通过旋转或线性变换,来找到可以更好的反映数据的新的坐标轴,比如上面的u1,u2 
这些向量,称为特征向量,而特征值表示该特征向量的重要性,即数据是否集中于该维上 
这时你会发现,少部分的特征向量的特征值占了特征值总和的绝大部分,而大部分的特征向量的特征值都很小 
比如上面的例子u1的特征值很大,而u2的特征值就很小 
所以你可以选择top k特征值的特征向量,来近似原来的n个特征向量,从而达到降维,且尽量的不丢失数据信息

知道主成分分析的原理,下面的问题就是如何找到主成分?

首先做预处理,zero mean and unit variance

image

1和2,使x的均值为0 
3. 算均方差 
4. normalization 偏差,因为每维上的scale是不一样的,比如一维是体重80,一维是身高1.8,所以需要规范化

好,如何找到u?

One way to pose this problem is as finding the unit vector u so that when the data is projected onto the direction corresponding to u, the variance of the projected data is maximized.

即找到一个单位向量,让数据投影到u上的点的方差最大,即最分散

为什么? 
首先我们的目的是找到那个子超平面,使得数据点尽量集中在这个超平面上,即点到这个超平面的距离尽可能的小 
如下图,比较直观,如左图,当点到u向量距离最小时,方差是最大的 
当选取右图的方向时,方差是最小的

再者,方差大,点比较分散,才便于去区分

image image

形式化的表达出来, 
部分参考,主成分分析(Principal components analysis)-最大方差解释

To formalize this, note that given a unit vector u and a point x, the length of the projection of x onto u is given by image

image

所以所有点的方差和为,

image

其中,中间那块是x的协方差矩阵, 
设, 
image 为image

image 为image

上面的式子表示为,

image

两边同时乘上u

image

image ,这个是特征向量和特征值的公式 
我们上面的目标是最大化image的情况下求u,到这里转变为求x的协方差矩阵image,特征值image最大的特征向量u

简单解释一下特征向量和特征值

http://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%B5%E5%90%91%E9%87%8F

矩阵可以看作是线性变换,所以上面公式可以看成,对向量u进行线性变换image,得到的向量仍然在同一方向上,只是发生伸缩(即数乘变换) 
这样就称u为线性变换或矩阵image的特征向量,而image为对应于该特征向量的特征值

可以看到对于PCA的求解其实很简单, 只需要下面几步, 
1. normalized zero mean and unit variance 
2. 算出协方差矩阵 
3. Find top k 特征向量


PCA的应用非常广泛,

压缩数据 
可视化,高维数据无法可视化,降到2维或3维便于可视化 
降低over-fitting, 用高维数据进行supervised learning,模型复杂度比较高,容易过拟合,通过PCA降维达到防止过拟合的作用 
去噪音,比如对于脸部识别,100×100的pixel,就是10000特征,通过PCA降维可以找到主成分特征 
异常检测,通过PCA可以找到由k个主成分组成的超平面,如果新的数据离该超平面很远,就说明可能是异常数据

 

奇异值分解(Singular Value Decomposition)

对于PCA有个问题,是如果x的维度很高,那么算出协方差矩阵image,就是相当耗费空间和困难的事

比如对于谈到的脸部识别10000维的x,10000×10000的协方差矩阵 
比如文本分析,可能维度更高 
对于文本分析,之所以要使用PCA,因为对于naive bayse而言,所有特征都是独立的 
即如果有两篇文章x1,x2 
x1中含有learn 
而x2中含有study 
对于bayse分类而言,这两篇文章是完全不相关的 
但是其实learn和study一定是相关的,所以用PCA可以达到降维,并且可以更准确的描述相关性 
称为LSI(latent semantic indexing),参考机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用

这种高维的PCA问题,就需要用SVD去求解

SVD用于把一个大矩阵分解成若干个小矩阵,便于存储和分析,具体参考上面blog里面的reference


A矩阵,SVD分解成,UDV-transpose

image

其中U的列,是A×A-transpose的特征向量eigenvector 
而V的列,是A-transpose×A的特征向量

为什么?不知道,有空复习线性代数

image

对于x的协方差矩阵image,可以表示为X-transpose*X,为什么?直接算下就知道

我们的目的就是算出image的特征向量,即X-transpose*X的特征向量

image

根据前面SVD的定义,我们知道X矩阵的SVD分解,中V的列就是X-transpose*X的特征向量 
所以对于X进行SVD分解,就解决了PAC问题 
X矩阵是比较小的,比如文本50000特征向量,100个文本,那么X就是100×50000d的svd分解,比对协方差矩阵50000×50000做特征值向量解要简单的多

 

另外在上面的blog中引用数学之美中LSI的例子 
比如对m个文本进行聚类,每个文本n个特征,n一般都很大比如50000 
那么传统做法,就是余弦法,每个文本之间通过余弦法来计算相似度,这个计算量很大 
而用SVD分解,就可以很简单 
对于A,表示m个,n个特征的文本矩阵

image

进行svd分解,

image

这边解释一下,svd分解,应该是分解成mn = mm × mn × nn 
但是这样分解出来的子矩阵仍然很大,所以近似成,

image

其实和特征向量一样,只是选取奇异值top r的那些向量,进行了压缩

而对于文本聚类而言,r=100,就代表类,也就是LSI中所谓的latent semantic 
相当于现在你不用比较每个单词特征来判断文本是否相似,而是比较类特征是否相似,这个不但有效降维,而且解决原来上面提到的learn,study这样的同义词的问题

“三个矩阵有非常清楚的物理含义。第一个矩阵X中的每一行表示这类词中每个词的相关性。最后一个矩阵Y中的每一列表示这类文章中每篇文章的相关性。中间的矩阵则表示词类和文章类之间的相关性。因此,我们只要对关联矩阵A进行一次奇异值分解,我们就可以同时完成了近义词分类和文章的分类”

之前不解,为何做SVD分解,后得到的矩阵可以表示相关性 
其实根据前面的定义,知道A-transpose×A等于

image 即行,文本之间的协方差矩阵

而V是A-transpose×A的特征向量矩阵,即文本之间协方差矩阵的特征向量矩阵,这就不难理解了

同样A×A-transpose表示,列,即单词特性的协方差矩阵。。。同理U。。。

 

NG总结无监督学习

首先分为两类,

求子空间,subspace

因子分析,是density estimation算法,会计算出P(x) 
主成分分析,单纯的直接求解子空间,不是一个概率算法

所以如果单纯为了降维和求解子空间,使用PCA 
如果需要使用概率P(x)就使用因子分析

求聚类,clumps或group

混合高斯,是density estimation算法 
K-means,单纯聚类算法,不是一个概率算法


本文章摘自博客园,原文发布日期:2014-08-13

目录
相关文章
|
6月前
|
机器学习/深度学习 数据可视化 计算机视觉
【视频】机器学习交叉验证CV原理及R语言主成分PCA回归分析犯罪率|数据共享
【视频】机器学习交叉验证CV原理及R语言主成分PCA回归分析犯罪率|数据共享
|
1月前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
66 1
|
3月前
|
机器学习/深度学习 算法 Python
【绝技揭秘】Andrew Ng 机器学习课程第十周:解锁梯度下降的神秘力量,带你飞速征服数据山峰!
【8月更文挑战第16天】Andrew Ng 的机器学习课程是学习该领域的经典资源。第十周聚焦于优化梯度下降算法以提升效率。课程涵盖不同类型的梯度下降(批量、随机及小批量)及其应用场景,介绍如何选择合适的批量大小和学习率调整策略。还介绍了动量法、RMSProp 和 Adam 优化器等高级技巧,这些方法能有效加速收敛并改善模型性能。通过实践案例展示如何使用 Python 和 NumPy 实现小批量梯度下降。
42 1
|
3月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
93 4
|
5月前
|
机器学习/深度学习 算法 BI
机器学习笔记(一) 感知机算法 之 原理篇
机器学习笔记(一) 感知机算法 之 原理篇
|
5月前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
55 0
|
5月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
42 0
|
6月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】K-means算法与PCA算法之间有什么联系?
【5月更文挑战第15天】【机器学习】K-means算法与PCA算法之间有什么联系?
|
6月前
|
机器学习/深度学习 存储 数据采集
【Python 机器学习专栏】PCA(主成分分析)在数据降维中的应用
【4月更文挑战第30天】本文探讨了主成分分析(PCA)在高维数据降维中的应用。PCA通过线性变换找到最大化方差的主成分,从而降低数据维度,简化存储和计算,同时去除噪声。文章介绍了PCA的基本原理、步骤,强调了PCA在数据降维、可视化和特征提取上的优势,并提供了Python实现示例。PCA广泛应用在图像压缩、机器学习和数据分析等领域,但降维后可能损失解释性,需注意选择合适主成分数量及数据预处理。
594 1
|
6月前
|
机器学习/深度学习 Python 索引
fast.ai 机器学习笔记(二)(4)
fast.ai 机器学习笔记(二)
58 0
fast.ai 机器学习笔记(二)(4)
下一篇
无影云桌面