简要声明
- 课程学习相关网址
- 由于课程学习内容为英文,文本会采用英文进行内容记录,采用中文进行简要解释。
- 本学习笔记单纯是为了能对学到的内容有更深入的理解,如果有错误的地方,恳请包容和指正。
- 非常感谢Andrew Ng吴恩达教授的无私奉献!!!
专有名词
Dimensionality Reduction | 降维 | highly redundant feature | 高冗余特征 |
---|---|---|---|
Data Visualization | 数据可视化 | Principal Component Analysis (PCA) | 主成分分析方法 |
projection error | 投影误差 | Data preprocessing | 数据预处理 |
covariance matrix | 协方差矩阵 | Reconstruction | 重构 |
Motivation
Data Compression
- 数据压缩不仅能使得数据占用较少的内存或硬盘空间还能对学习算法进行加速
- highly redundant feature 高冗余特征 →将数据从二维降低到一维 →用一条线上的投影表示两种特征的数据
- 2D to 1D →通过投影到一条线上,所有的原始样本来近似原始的数据集 →只需要一个实数就能表示每一个训练样本的位置
- 3D to 2D →把所有的数据投影到一个二维平面 →只需要两个数就能指定这个平面中点的位置
Data Visualization
- 用两个主特征表示50个特征 →GDP & per person GDP
Principal Component Analysis
Principal Component Analysis (PCA) problem formulation
- Principal Component Analysis 主成分分析法 →找到一个低维平面,然后将数据投影到上面,使得投影误差最小化
- 在应用PCA之前先进行 mean normalization 均值归一化和 feature scaling 特征规范化
- 如果想将数据从二维降到一维 →试着找到一个向量 u(1),投影后能够最小化投影误差的方向
- 如果想将数据从n维降到k维 →寻找k个方向向量来对数据进行投影来最小化投影误差
- !!!PCA不是线性规划
- 线性规划是拟合一条直线来最小化点和直线之间的平方误差(垂直距离),PCA是试图最小化投影误差
- 线性规划是根据x对y的预测,而PCA没有特殊的变量y,都是特征x
Principal Component Analysis algorithm
-
Data preprocessing 数据预处理
-
Training set: x(1), x(2), … x(m),
-
Preprocessing (feature scaling 特征缩放 / mean normalization 均值标准化)
- 计算每个特征的均值
- 通过减去均值取代每个特征x(x_j - μ_j)
- 如果不同的特征有非常不同的缩放 →缩放每一个特征在一个相对的数值范围内
μ j = 1 m ∑ i = 1 m x j ( i ) x j ( i ) : = x j ( i ) − μ j s j \mu_j=\frac{1}{m}\sum_{i=1}^mx_j^{(i)} \\ x_j^{(i)}:=\frac{x_j^{(i)}-\mu_j}{s_j} μj=m1i=1∑mxj(i)xj(i):=sjxj(i)−μj
-
-
Reduce data from -n‐dimensions to k‐dimensions 将数据从n维降到k维
Σ = 1 m ∑ i = 1 n ( x ( i ) ) ( x ( i ) ) T \Sigma = \frac{1}{m}\sum_{i=1}^n(x^{(i)})(x^{(i)})^T Σ=m1i=1∑n(x(i))(x(i))T
- 计算 covariance matrix 协方差矩阵(Sigma)
- 计算协方差矩阵的 eigenvectors 特征向量
% svd 表示 sigular value decomposition 奇异值分解 % eig(Sigma) % U 表示一个降维矩阵 Sigma = (1/m)*X'*X; [U,S,V] = svd(Sigma); Ureduce = U(:,1:k); % 提取降到k的U矩阵 z = Ureduce’*x;
Reconstruction from compressed representation
z = U r e d u c e T ⋅ x z=U_{reduce}^T\cdot x z=UreduceT⋅x
x ∈ R n → z ∈ R k x \in \mathbb{R}^{n} \rightarrow z \in \mathbb{R}^k x∈Rn→z∈Rk
x ≈ x a p p r o x = U r e d u c e ⋅ z x \approx x_{approx}=U_{reduce}\cdot z x≈xapprox=Ureduce⋅z
Choosing the number of principal components
Choosing k
- Average squared projection error 均方投影误差
- Total variation in the data 数据总方差
- 选择 k 从而最小化数值的同时确保99%的数据总方差保留 →降维以后数据信息保留方差
1 m ∑ i = 1 m ∣ ∣ x ( i ) − x a p p r o x ( i ) ∣ ∣ 2 1 m ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ 2 ≤ 0.01 \frac{\frac{1}{m}\sum_{i=1}^m||x^{(i)}-x_{approx}^{(i)}||^2 }{ \frac{1}{m}\sum_{i=1}^m||x^{(i)}||^2} \le 0.01 m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2≤0.01
Algorithm
-
Try PCA with k=1,2,… ,n
-
计算U_reduce, z(1), z(2), … z(m), x_approx(1), x_approx(2), … x_approx(m),
-
检查是否符合范围
-
在确保满足范围的条件下选择最小的k
1 m ∑ i = 1 m ∣ ∣ x ( i ) − x a p p r o x ( i ) ∣ ∣ 2 1 m ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ 2 ≤ 0.01 \frac{\frac{1}{m}\sum_{i=1}^m||x^{(i)}-x_{approx}^{(i)}||^2 }{ \frac{1}{m}\sum_{i=1}^m||x^{(i)}||^2} \le 0.01 m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2≤0.01
[U,S,V] = svd(Sigma);
1 − ∑ i = 1 k S i i ∑ i = 1 n S i i = 1 m ∑ i = 1 m ∣ ∣ x ( i ) − x a p p r o x ( i ) ∣ ∣ 2 1 m ∑ i = 1 m ∣ ∣ x ( i ) ∣ ∣ 2 ≤ 0.01 1-\frac{\sum_{i=1}^kS_{ii}}{\sum_{i=1}^nS_{ii}}=\frac{\frac{1}{m}\sum_{i=1}^m||x^{(i)}-x_{approx}^{(i)}||^2 }{ \frac{1}{m}\sum_{i=1}^m||x^{(i)}||^2} \le 0.01 1−∑i=1nSii∑i=1kSii=m1∑i=1m∣∣x(i)∣∣2m1∑i=1m∣∣x(i)−xapprox(i)∣∣2≤0.01
∑ i = 1 k S i i ∑ i = 1 n S i i ≥ 0.99 \frac{\sum_{i=1}^kS_{ii}}{\sum_{i=1}^nS_{ii}} \ge 0.99 ∑i=1nSii∑i=1kSii≥0.99
Advice for applying PCA
Supervised learning speedup
- PCA算法可以减少数据的维度从而使得算法运行更加高效
- 抽取输入训练集特征x构成一个无标签的训练集 →使用PCA得到原始数据的低维表达 →得到一个新的训练集
- PCA定义一个从x到z的映射,从x到z的映射只能通过在训练集上运行的PCA来定义,这个映射可以应用于交叉验证集和测试集样本中 →当在运行PCA时仅仅在训练集中的数据上运行,不能用在交叉验证集和测试集数据
Application of PCA
- Compression 压缩
- Reduce memory/disk needed to store data →减少存储数据所需的存储器或硬盘空间
- Speed up learning algorithm →加速学习算法
- choose k by % of variance retained →为了选择k计算出确定方差保留的百分比
- Visualization 可视化
- plot only two/three dimensional data →可视化二维或三维数据
Bad use of PCA: To prevent overfitting
- !!!错误用法:使用PCA去防止过拟合
- 错误认为PCA减少特征数量所以过拟合的可能性更小
- 应该使用正则化而不是PCA来防止过拟合
- 在设计机器学习系统时直接包括PCA,而不考虑如果不使用PCA会怎样
- 在实现PCA之前,首先考虑使用最原始的数据x(i),只有这样做不能达到目的的情况下才考虑使用PCA和z(i)
吴恩达教授语录
- “For many problems we actually reduce the dimensional data and still retain most of variance and with barely effecting the performance.”
- “PCA is an incredibly useful algorithm, when you use it for the appropriate applications and I’ve actually used PCA pretty often. And for me, I use it mostly to speed up the running time of my learning algorithms.”
- “PCA is one of the most commonly used and one of the most powerful unsupervised learning algorithms.”