【李宏毅2020 ML/DL】P57 Unsupervised Learning - Linear Methods | PCA & Matrix Factorization
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes
本节对应笔记:
- https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-md/16_Unsupervised%20Learning%20Introduction.md
- https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-md/17_Unsupervised%20Learning%20PCA%20part1.md
- https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-md/18_Unsupervised%20Learning%20PCA%20part2.md
- https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-md/19_Matrix%20Factorization.md
本节内容综述
- 李老师将无监督学习分为两类:化繁为简
(聚类 Clustering),降维 Dimension Reduction
、无中生有(Generation)
。 - 讲了 K-means 、
Hierarchical Agglomerative Clustering (HAC)
、Distributed Representation / Dimension Reduction (如何做?Feature Selection、PCA)。 - 详细介绍 PCA 。很详细,从线性代数角度。但是,PCA有不可逆的缺陷(无监督、线性)。之后用宝可梦、MNIST、人脸识别举了例子,例子详见上述的笔记3。
- 另外,略提了 NMF (Non-negative matrix factorization),其要求,所有数据都必须是组件的非负加权组合。
文章目录
小细节
PCA
principal components analysis
如上,我们希望找一个方向,这个方向能让数据进行分散地投影在上面。
我们再找下一个 是,其必须与上一个 是正交的。
此时是正交矩阵(orthogonal matrix)。
Lagrange multiplier
除了经典梯度下降(建模成神经网络),也可以用拉格朗日乘数法。
简单的线性代数展开如上。我们的目标即为最大化 。
然后使用拉格朗日乘数法。
结论:是这个matrix中的特征向量,对应最大的特征值。
结论,也是这个matrix中的特征向量,对应第二大的特征值。
PCA-decorrelation
如上,,,这使得的协方差是一个对角矩阵 diagonal matrix。
“PCA可以让不同dimension之间的covariance变为0,即不同new feature之间是没有correlation的,这样做的好处是,减少feature之间的联系从而减少model所需的参数量。”
Reconstruction Component
如上,数字 7 是由不同的组件 加起来的结果。
如果 的数量比 pixel 少,那么这个组合是有意义的。
于是我们来确定优化目标。
如上,我们希望两边的矩阵越接近越好。
可以使用 SVD 拆分。
如上,可以得出结论:
- 用 PCA 找出来的 就是 个组件的 。
如上,我们的目标是将逼近,此时因为是标准正交的,应该有。
于是我们可以用神经网络表示上述优化问题。
这件事就叫做了:Autoencoder 。
注意,通过 PCA 直接解出的 与使用神经网络梯度下降的方式得到的 其结果是不一样的,因为神经网络无法保证 正交。
因此:
- 在 linear 的情况下,直接使用 PCA 找 比神经网络更快更方便;
- 用神经网络的好处是,可以使用不止一层隐层,作为 deep autoencoder 。
Weakness of PCA
如上,PCA 有明显的弱点:
-
非监督学习
,如果我们要将下图绿色的点投影到一维空间上,PCA给出的从左上到右下的划分(如上)会使原本属于蓝色和橙色的两个class的点被merge在一起(因此我们可以使用LDA
); -
线性的
,对于S型彩色曲面,无法拉直。
Matrix Factorization
举个例子讲解一下矩阵分解。
加深每个人有一定数量的手办。如上。发现,有手办1的人,就比较可能有手办2。说明可能人们偏好不同。
但是,一个人的偏好,与手办的属性其实没有办法知道。我们只能通过数据来推导。
如上,首先我们明确:对于 r 向量,其维度需要人为确定好,就好像神经网络的神经元数量一样。
之后,我们可以将矩阵分解如上图下半部分。我们即可知道 等值。
可以使用 SVD 等方法求解。
如上,此外,我们可能缺失一些值。此时我们更换我们的优化目标,变为 ,并且跳过我们不知道到的元素。
使用梯度下降即可。
如上,我们使用梯度下降,得到各自的编码,就可以根据 得到矩阵中的位置数据,从而进行推荐。
此外,模型还可以做的紧致一些:
- 用户 A 本身的属性 ;
- 手办 1 本身的欢迎程度 。
Latent semantic analysis (LSA)
Matrix Factorization for Topic analysis
如上,每个文档中出现词汇的顺序。可以找出每个词背后的主题。
有很多方法,比如PLSA、LDA。