Coursea-吴恩达-machine learning学习笔记(十四)【week 8之Dimensionality Reduction】

本文介绍主成分分析法(PCA),一种广泛使用的数据降维技术。文章详细解释了PCA的工作原理,包括数据预处理、算法步骤及如何选择降维后的特征数量。此外,还探讨了PCA在数据压缩、可视化及加速监督学习算法中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

维数约减又称为降维。
使用维数约减的原因:
1. 数据压缩(减少空间占用,同时为算法提速)
例1:从2D1D2D→1D
存在如下图所示样本集,x(i)R2x(i)∈R2
这里写图片描述
希望找到如下图中所示直线,把所有样本映射到这条线上
这里写图片描述
如此,就可以使用下图来表示样本位置,只需要一个特征变量即可:
这里写图片描述
x(1)R2z(1)Rx(1)∈R2→z(1)∈R
x(2)R2z(2)Rx(2)∈R2→z(2)∈R

x(m)R2z(m)Rx(m)∈R2→z(m)∈R

例2:从3D2D3D→2D
存在如下图所示样本集,x(i)R3x(i)∈R3
这里写图片描述
把所有样本投影到一个二维平面上,如下图所示:
这里写图片描述
则可以使用两个特征值来表示样本点的位置,如下图:
这里写图片描述
z(i)=[z(i)1z(i)2]z(i)=[z1(i)z2(i)]
2. 数据可视化
x(i)R50x(i)∈R50时,无法有效观察理解数据,将其降维至z(i)R3z(i)∈R3z(i)R2z(i)∈R2,就可以呈现为3D3D2D2D的图像。

主成分分析法(PCA):是当前最常用的降维算法。

PCA实质为寻找一个低维的面,把数据投射在上面,使得样本点到面的垂直距离的平方和达到最小值。这些垂直距离也称为投影误差。
更一般化的表达是:从nn维降到k维,找到kk个向量u(1),u(2),,u(k),将样本数据投射在这kk个向量上,使得投影误差最小。

在应用PCA之前,通常会进行均值归一化和特征规范化。

训练集:{x(1),x(2),,x(m)}
在执行PCA算法前的数据预处理

  1. 均值归一化
    μj=1mi=1mx(i)jμj=1m∑i=1mxj(i)
    x(i)jμjxj(i)−μj替换x(i)jxj(i)
  2. 特征缩放(可选)
    如果不同特征值取值范围差异较大,则进行特征缩放,使得各特征值具有类似的取值范围。
    x(i)jμjsjxj(i)−μjsj替换x(i)jxj(i)sjsj表示特征值xjxj的最大值-最小值或标准差。

PCA算法
将数据从nn维降维到k维:
计算协方差矩阵:Σ=1mi=1m(x(i))(x(i))TΣ=1m∑i=1m(x(i))(x(i))T(注:ΣΣ表示希腊字母Sigma)
OctaveOctave代码:Sigma=(1/m)*X'*X 其中X=x(1)Tx(2)Tx(m)TX=[x(1)Tx(2)T⋮x(m)T]
计算矩阵ΣΣ的特征向量:
OctaveOctave代码:[U,S,V]=svd(Sigma);
svd表示奇异值分解,在OctaveOctave中,也可以用eig()命令求特征向量;
Sigma协方差矩阵是一个n×nn×n矩阵;
上述语句输出三个矩阵,我们需要的是UU矩阵,也是n×n矩阵;
UU矩阵的列就是我们需要的向量:U=[u(1),u(2),,u(n)]Rn×n
提取UU矩阵的前k列向量组成矩阵Ureduce=[u(1),u(2),,u(k)]Rn×kUreduce=[u(1),u(2),⋯,u(k)]∈Rn×k
OctaveOctave代码:Ureduce=U(:,1:k);
我们的目的是xRnzRkx∈Rn→z∈Rkz=UreduceTxz=UreduceTx
其中,UreduceTRk×n,xRn×1UreduceT∈Rk×n,x∈Rn×1,所以zRkz∈Rk
OctaveOctave代码:z=Ureduce'*x;
注:使用PCA算法,xRnx∈Rn,没有x0=1x0=1这一项。

PCA算法压缩数据的原始数据重构
由上已知:z=UreduceTxz=UreduceTx,我们现在需要zRkxRnz∈Rk→x∈Rn
所以:xapprox=Ureducezxxapprox=Ureducez≈xUreduceUreducen×kn×k矩阵,zzk×1向量,故xapproxxapproxn×1n×1向量。

PCA算法中,把nn维特征变量降维到k维特征变量,kk也被称为主成分的数量。

如何选择k
两个定义:

平均平方映射误差:1mi=1mx(i)x(i)approx21m∑i=1m‖x(i)−xapprox(i)‖2,表示样本xx和其在低维平面映射点之间的距离的平方的均值。
数据的总变差:1mi=1mx(i)2,训练样本长度的平方的均值,表示训练样本与00向量的平均距离。

选择k的法则:
使

1mi=1mx(i)x(i)approx21mi=1mx(i)20.011m∑i=1m‖x(i)−xapprox(i)‖21m∑i=1m‖x(i)‖2⩽0.01
的最小的kk值。
此时,保留了99%的差异性。

算法
k=1k=1尝试PCA算法:
计算Ureduce,z(1),z(2),,z(m),x(1)approx,,x(m)approxUreduce,z(1),z(2),⋯,z(m),xapprox(1),⋯,xapprox(m)
检查1mi=1mx(i)x(i)approx21mi=1mx(i)21m∑i=1m‖x(i)−xapprox(i)‖21m∑i=1m‖x(i)‖2是否0.01⩽0.01
若符合条件,取k=1k=1,若不符合条件,k++k++,直到找到满足条件的最小的kk值。

上述算法的计算过于繁杂,对该算法进行改进。

改进版算法
执行语句[U,S,V]=svd(Sigma)会得到SS矩阵;
SS矩阵是一个正方形矩阵,形式为[S11S22Snn]
对于给定的kk值,只需满足1i=1kSiii=1nSii0.01i=1kSiii=1nSii0.99∑i=1kSii∑i=1nSii⩾0.99
不断增加kk的取值来寻求满足的条件的最小k值。

当使用特定的kk值时,也可以用i=1kSiii=1nSii来表示PCA算法性能。

PCA算法应用

监督学习算法加速
存在样本集{(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}{(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))}
提取出输入特征值,无标签数据集{x(1),x(2),,x(m)}R10000{x(1),x(2),⋯,x(m)}∈R10000
执行PCA算法,得到数据集{z(1),z(2),,z(m)}R1000{z(1),z(2),⋯,z(m)}∈R1000
形成新的训练样本:{(z(1),y(1)),(z(2),y(2)),,(z(m),y(m))}{(z(1),y(1)),(z(2),y(2)),⋯,(z(m),y(m))}
提出基于新训练样本的假设函数hθ(z)hθ(z)
注:x(i)z(i)x(i)→z(i)的映射关系是通过在训练集上运行PCA算法定义的,这个映射关系同样适用于交叉验证集和测试集的输入特征值。

常见的PCA算法应用:

  1. 数据压缩(节约存储空间,算法加速)
    选择kk值,保留x%的差异性。
  2. 数据可视化
    k=2k=233

PCA算法误用

避免过拟合
z(i)z(i)代替x(i)x(i)来减少特征数量:nkn→k,且k<nk<n
因为特征值越少,似乎越不容易过拟合;
这方法可能会有作用,但并不是好方法,避免过拟合应该用正则化方法。

在设计机器学习系统时,直接使用PCA算法
建议:在执行PCA算法前,首先在原始数据x(i)x(i)上执行相关算法,只有当算法收敛缓慢,占用内存/磁盘空间很大时,再执行PCA算法,使用z(i)z(i)计算。

添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值