机器学习入门14--降维
本系列博客基于温州大学黄海广博士的机器学习课程的笔记,小伙伴们想更详细学习黄博士课程请移步到黄博士的Github、或者机器学习初学者公众号,现在在中国慕课也是可以学习的,内容包括机器学习、深度学习及Python编程,matplotlib、numpy、pandas、sklearn等,资料很详细,要系统学习请移步哦!笔者的博客只是笔记,内容不会十分详细,甚至会有些少错误!1.降维概述维数灾难:在机器学
本系列博客基于温州大学黄海广博士的机器学习课程的笔记,小伙伴们想更详细学习黄博士课程请移步到黄博士的Github、或者机器学习初学者公众号,现在在中国慕课也是可以学习的,内容包括机器学习、深度学习及Python编程,matplotlib、numpy、pandas、sklearn等,资料很详细,要系统学习请移步哦!笔者的博客只是笔记,内容不会十分详细,甚至会有些少错误!
1.降维概述
-
维数灾难:在机器学习建模过程中,随着特征数量的增多,计算量会剧增,变得很大,维度太大导致机器学习性能下降,模型的性能随着特征的增加先上升后下降;
-
降维定义:降维(Dimensionality Reduction),将训练数据中的样本从高维空间转换到低维空间,但不存在完全无损的降维;
-
降维的意义:
- 高维数据增加了运算难度;
- 高维使得学习算法的泛化额能力变弱,维度越高,算法的搜索难度和成本越大;
- 降维增加数据可读性,有利于发掘数据有意义的结构;
-
降维的作用:
- 减少冗余特征,降低数据维度;
假设有两个特征:
x1x_1x1:身高(单位:厘米);
x2x_2x2:身高(单位:英寸);
可以用一个特征表示身高即可; - 数据可视化;
t−distributedStochasticNeighborEmbedding(t−SNE)t-distributed Stochastic Neighbor Embedding(t-SNE)t−distributedStochasticNeighborEmbedding(t−SNE):将数据点之间的相似度转换为概率;
- 减少冗余特征,降低数据维度;
-
降维的优缺点:
-
优点:
- 通过减少特征的维数,数据集存储所需的空间相应减少,减少了特征维数所需的计算训练时间;
- 数据集特征的降维有助于快速可视化数据;
- 通过处理多重共线性消除冗余特征;
-
缺点:
- 降维可能会丢失一些数据;
- 在主成分分析(PCA)降维技术中,有时需要考虑多少主成分是难以确定的;

2.SVD(奇异值分解)
2.1 奇异值分解
- 奇异值分解(Singular Value Decomposition,SVD)(Singular \ Value \ Decomposition,SVD)(Singular Value Decomposition,SVD);
- SVD可以将一个矩阵AAA分解成三个矩阵的乘积:
- 一个正交矩阵U(orthogonal matrix)U(orthogonal \ matrix)U(orthogonal matrix);
- 一个对角矩阵Σ(diagonal matrix)\Sigma(diagonal \ matrix)Σ(diagonal matrix);
- 一个正交矩阵VVV的转置;
2.2 SVD详解
-
假设矩阵AAA是一个m×nm\times{n}m×n的矩阵,通过SVDSVDSVD对矩阵进行分解,SVDSVDSVD定义如下:
A=UΣVT A=U\Sigma{V^T} A=UΣVT
-
符号定义
A=UΣVT=u1σ1v1T+⋯+urσrvrT A=U\Sigma{V^T}=u_1\sigma_1v_1^T+\dots+u_r\sigma_rv_r^T A=UΣVT=u1σ1v1T+⋯+urσrvrT
其中:U:一个m×m的矩阵;每个特征向量ui称为A的左奇异向量;Σ:一个m×n的矩阵;除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值σ;V:一个n×n的矩阵,每个特征向量vi称为A的右奇异向量;U和V都是酉矩阵,即满足:UTU=I,VTV=I;r:矩阵A的秩;其中:\\ U:一个m\times{m}的矩阵;每个特征向量u_i称为A的左奇异向量;\\ \Sigma:一个m\times{n}的矩阵;除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值\sigma;\\ V:一个n\times{n}的矩阵,每个特征向量v_i称为A的右奇异向量;\\ U和V都是酉矩阵,即满足:U^TU=I,V^TV=I;\\ r:矩阵A的秩;其中:U:一个m×m的矩阵;每个特征向量ui称为A的左奇异向量;Σ:一个m×n的矩阵;除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值σ;V:一个n×n的矩阵,每个特征向量vi称为A的右奇异向量;U和V都是酉矩阵,即满足:UTU=I,VTV=I;r:矩阵A的秩; -
SVD求解1:U矩阵求解
方阵AAT为m×m的一个方阵,可以进行特征分解,得到的特征值和特征向量满足式子:(AAT)ui=λiui得到矩阵AAT的m个特征值和对应的m个特征向量u;将AAT的所有特征向量组成一个m×m的矩阵U,即SVD中的U矩阵;U矩阵中的每个特征向量叫做A的左奇异向量;方阵AA^T为m\times{m}的一个方阵,可以进行特征分解,得到的特征值和特征向量满足式子:(AA^T)u_i=\lambda_iu_i\\ 得到矩阵AA^T的m个特征值和对应的m个特征向量u;\\ 将AA^T的所有特征向量组成一个m\times{m}的矩阵U,即SVD中的U矩阵;\\ U矩阵中的每个特征向量叫做A的左奇异向量;方阵AAT为m×m的一个方阵,可以进行特征分解,得到的特征值和特征向量满足式子:(AAT)ui=λiui得到矩阵AAT的m个特征值和对应的m个特征向量u;将AAT的所有特征向量组成一个m×m的矩阵U,即SVD中的U矩阵;U矩阵中的每个特征向量叫做A的左奇异向量; -
SVD求解2:V矩阵求解
将A的转置和A做矩阵乘法,得到一个n×n的一个方阵ATA;特征分解,得到特征值和特征向量满足:(ATA)vi=λivi;得到矩阵ATA的n个特征值和对应的n个特征向量v;将ATA的所有特征向量组成一个n×n的矩阵V,即SVD中V矩阵;V矩阵中的每个特征向量叫做A的右奇异向量;将A的转置和A做矩阵乘法,得到一个n\times{n}的一个方阵A^TA;\\ 特征分解,得到特征值和特征向量满足:(A^TA)v_i=\lambda_iv_i;\\ 得到矩阵A^TA的n个特征值和对应的n个特征向量v;\\ 将A^TA的所有特征向量组成一个n\times{n}的矩阵V,即SVD中V矩阵;\\ V矩阵中的每个特征向量叫做A的右奇异向量;将A的转置和A做矩阵乘法,得到一个n×n的一个方阵ATA;特征分解,得到特征值和特征向量满足:(ATA)vi=λivi;得到矩阵ATA的n个特征值和对应的n个特征向量v;将ATA的所有特征向量组成一个n×n的矩阵V,即SVD中V矩阵;V矩阵中的每个特征向量叫做A的右奇异向量; -
SVD求解3:Σ\SigmaΣ矩阵求解
特征值矩阵等于奇异值矩阵的平方,即特征值和奇异值满足:σi=λi;可以通过ATA的特征值取平方根求解奇异值;由A=UΣVT,则有:AV=UΣVTV;因:VTV=I,则有:AV=UΣ;有:Avi=σiui,σi=Avi/ui特征值矩阵等于奇异值矩阵的平方,即特征值和奇异值满足:\sigma_i=\sqrt{\lambda_i};\\ 可以通过A^TA的特征值取平方根求解奇异值;\\ 由A=U\Sigma{V^T},则有:AV=U\Sigma{V^T}V;\\ 因:V^TV=I,则有:AV=U\Sigma;\\ 有:Av_i=\sigma_iu_i,\sigma_i=Av_i/u_i特征值矩阵等于奇异值矩阵的平方,即特征值和奇异值满足:σi=λi;可以通过ATA的特征值取平方根求解奇异值;由A=UΣVT,则有:AV=UΣVTV;因:VTV=I,则有:AV=UΣ;有:Avi=σiui,σi=Avi/ui
2.3 SVD计算案例
-
实例背景
设矩阵A定义:A=[3045],则有A的秩r=2设矩阵A定义:A=\begin{bmatrix}3 & 0\\4 & 5\end{bmatrix},则有A的秩r=2设矩阵A定义:A=[3405],则有A的秩r=2; -
求ATA和AATA^TA和AA^TATA和AAT
ATA=[3405][3045]=[25202025]; AAT=[3045][3405]=[9121241] A^TA=\begin{bmatrix}3 & 4\\0 & 5\end{bmatrix}\begin{bmatrix}3 & 0\\4 & 5\end{bmatrix}=\begin{bmatrix}25 & 20\\20 & 25\end{bmatrix};\ \ AA^T=\begin{bmatrix}3 & 0\\4 & 5\end{bmatrix}\begin{bmatrix}3 & 4\\0 & 5\end{bmatrix}=\begin{bmatrix}9 & 12\\12 & 41\end{bmatrix} ATA=[3045][3405]=[25202025]; AAT=[3405][3045]=[9121241] -
计算ATAA^TAATA的特征值和特征向量
∣25−λ202025−λ∣=(25−λ)2−400=(λ−45)(λ−5)=0 \begin{vmatrix}25-\lambda & 20\\ 20 & 25-\lambda\end{vmatrix}=(25-\lambda)^2-400=(\lambda-45)(\lambda-5)=0 ∣∣∣∣25−λ202025−λ∣∣∣∣=(25−λ)2−400=(λ−45)(λ−5)=0
解得:λ1=45,λ2=5解得:\lambda_1=45,\lambda_2=5解得:λ1=45,λ2=5
由σi=λi,得到奇异值:σ1=45,σ2=5由\sigma_i=\sqrt{\lambda_i},得到奇异值:\sigma_1=\sqrt{45},\sigma_2=\sqrt{5}由σi=λi,得到奇异值:σ1=45,σ2=5 -
计算AATAA^TAAT的特征值和特征向量
求得:λ1=45,λ2=5; v1=[1212]; v2=[−1212] 求得:\lambda_1=45,\lambda_2=5;\ \ v_1=\begin{bmatrix}\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}}\end{bmatrix};\ \ v_2=\begin{bmatrix}-\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}}\end{bmatrix} 求得:λ1=45,λ2=5; v1=[2121]; v2=[−2121] -
求奇异值
利用Avi=σiui,i=1,2,求奇异值:利用Av_i=\sigma_iu_i,i=1,2,求奇异值:利用Avi=σiui,i=1,2,求奇异值:
Av1=[3292]=45[110310]=σ1u1;Av2=[−3212]=5[−310110]=σ2u2 Av_1=\begin{bmatrix}\frac{3}{\sqrt{2}} \\ \frac{9}{\sqrt{2}}\end{bmatrix}=\sqrt{45}\begin{bmatrix}\frac{1}{\sqrt{10}} \\ \frac{3}{\sqrt{10}}\end{bmatrix}=\sigma_1u_1; Av_2=\begin{bmatrix}-\frac{3}{\sqrt{2}} \\ \frac{1}{\sqrt{2}}\end{bmatrix}=\sqrt{5}\begin{bmatrix}-\frac{3}{\sqrt{10}} \\ \frac{1}{\sqrt{10}}\end{bmatrix}=\sigma_2u_2 Av1=[2329]=45[101103]=σ1u1;Av2=[−2321]=5[−103101]=σ2u2 -
奇异值分解结果
U=[110−310310110]; Σ=[45005]; V=[12−121212]A=UΣVT=[110−310310110][45005][12−121212]T=[3045] \begin{aligned} &U=\begin{bmatrix}\frac{1}{\sqrt{10}} & -\frac{3}{\sqrt{10}} \\ \frac{3}{\sqrt{10}} & \frac{1}{\sqrt{10}}\end{bmatrix};\ \ \Sigma=\begin{bmatrix}\sqrt{45} & 0 \\ 0 & \sqrt{5}\end{bmatrix};\ \ V=\begin{bmatrix}\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix}\\ &A=U\Sigma{V^T}= \begin{bmatrix}\frac{1}{\sqrt{10}} & -\frac{3}{\sqrt{10}} \\ \frac{3}{\sqrt{10}} & \frac{1}{\sqrt{10}}\end{bmatrix} \begin{bmatrix}\sqrt{45} & 0 \\ 0 & \sqrt{5}\end{bmatrix} \begin{bmatrix}\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix}^T=\begin{bmatrix}3 & 0 \\ 4 & 5\end{bmatrix} \end{aligned} U=[101103−103101]; Σ=[45005]; V=[2121−2121]A=UΣVT=[101103−103101][45005][2121−2121]T=[3405]
2.4 奇异值分解近似
- SVD分解将一个矩阵进行分解,对角矩阵对角线上的特征值递减存放,奇异值的减少特别快;
- 对于奇异值,可以用最大的kkk个奇异值和对应的左右奇异向量来近似描述矩阵;
Am×n=Um×mΣm×nVn×nT≈Um×kΣk×kVk×nT;k要比n小很多,即一个大矩阵A可以用三个小矩阵Um×k、Σk×k、Vk×nT表示; \begin{aligned} & A_{m\times{n}}=U_{m\times{m}}\Sigma_{m\times{n}}V_{n\times{n}}^T≈U_{m\times{k}}\Sigma_{k\times{k}}V_{k\times{n}}^T;\\ k要比n小很多,即一个大矩阵A可以用&三个小矩阵U_{m\times{k}}、\Sigma_{k\times{k}}、V_{k\times{n}}^T表示; \end{aligned} k要比n小很多,即一个大矩阵A可以用Am×n=Um×mΣm×nVn×nT≈Um×kΣk×kVk×nT;三个小矩阵Um×k、Σk×k、Vk×nT表示;
2.5 SVD案例

3.主成分分析(PCA)
3.1 PCA简述
- 主成分分析:Principal Component Analysis,PCA;
- 主成分分析:一种降维方法,通过将一个大的特征集转换成一个较小的特征集,小特征集仍包含原始数据中的大部分信息,从而降低了原始数据的维数;
- 减少一个数据集的特征数量,会牺牲一点准确性;





3.2 得到包含最大差异性的主成分方向的方法
- 通过计算数据矩阵的协方差矩阵;
- 得到协方差矩阵的特征值特征向量;
- 选择特征值最大的kkk个特征所对应的特征向量组成的矩阵;
- 将数据矩阵转换到新的空间中,实现数据特征的降维;
3.3 PCA算法的实现方法
- 基于SVD分解协方差矩阵实现PCA算法;
- 基于特征值分解协方差矩阵实现PCA算法;
3.4 基于SVD分解协方差矩阵实现PCA算法
- 背景:PCA从nnn维减少到kkk维,设有mmm条nnn维数据,将原始数据按列组成nnn行mmm列矩阵XXX
- 均值归一化。计算所有特征的均值,令xj=xj−μj(μjx_j=x_j-\mu_j(\mu_jxj=xj−μj(μj为均值))),如果特征在不同数量级上,需要除以标准差σ2\sigma^2σ2;
- 计算协方差矩阵(covariance matrix)Σ(covariance \ matrix)\Sigma(covariance matrix)Σ,即:Σ=1m∑i=1n(x(i))(x(i))T\Sigma=\frac{1}{m}\sum_{i=1}^n(x^{(i)})(x^{(i)})^TΣ=m1∑i=1n(x(i))(x(i))T;
- 计算协方差矩阵Σ\SigmaΣ的特征向量(eigenvectors)(eigenvectors)(eigenvectors),利用奇异值分解来求解;

3.5 基于特征值分解协方差矩阵实现PCA算法
-
基础知识:
- 特征值与特征向量
如果一个向量v是矩阵A的特征向量,则满足:Av=λv;其中:λ是特征向量A对应的特征值,一个矩阵的一组特征向量是一组正交向量;如果一个向量v是矩阵A的特征向量,则满足:Av=\lambda{v};\\ 其中:\lambda是特征向量A对应的特征值,一个矩阵的一组特征向量是一组正交向量;如果一个向量v是矩阵A的特征向量,则满足:Av=λv;其中:λ是特征向量A对应的特征值,一个矩阵的一组特征向量是一组正交向量; - 特征值分解矩阵
对于矩阵A,有一组特征向量v,将这组向量进行单位正交化,即得到一组正交单位向量;特征值分解,将矩阵A分解为:A=PΣP−1;其中:P是矩阵A的特征向量组成的矩阵;Σ是一个对角阵,对角线上的元素是特征值;对于矩阵A,有一组特征向量v,将这组向量进行单位正交化,即得到一组正交单位向量;\\ 特征值分解,将矩阵A分解为:A=P\Sigma{P^{-1}};\\ 其中:\\ P是矩阵A的特征向量组成的矩阵;\\ \Sigma是一个对角阵,对角线上的元素是特征值;对于矩阵A,有一组特征向量v,将这组向量进行单位正交化,即得到一组正交单位向量;特征值分解,将矩阵A分解为:A=PΣP−1;其中:P是矩阵A的特征向量组成的矩阵;Σ是一个对角阵,对角线上的元素是特征值;
- 特征值与特征向量
-
算法流程:
设有mmm条nnn维数据,将原始数据按列组成nnn行mmm列矩阵XXX;- 均值归一化。计算所有特征的均值,令xj=xj−μj(μjx_j=x_j-\mu_j(\mu_jxj=xj−μj(μj为均值))),如果特征在不同数量级上,需要除以标准差σ2\sigma^2σ2;
- 计算协方差矩阵(covariance matrix)Σ\SigmaΣ,即:Σ=1m∑i=1n(x(i))(x(i))T\Sigma=\frac{1}{m}\sum_{i=1}^n(x^{(i)})(x^{(i)})^TΣ=m1∑i=1n(x(i))(x(i))T;
- 用特征值分解方法计算协方差矩阵Σ\SigmaΣ的特征值和特征向量;
- 对特征值从大到小排序,选择最大的kkk个,将其对应的kkk个特征向量分别作为行向量组成特征向量矩阵PPP;
- 将数据转换到kkk个特征向量构建的新空间中,即Y=PXY=PXY=PX;
3.6 PCA算法案例分析
- 实例背景:
A=[−1−1020−20012] A=\begin{bmatrix}-1 & -1 & 0 & 2 &0 \\ -2 & 0 & 0 & 1 & 2\end{bmatrix} A=[−1−2−10002102] - 矩阵每行为零均值;
- 求解协方差矩阵:
Σ=15[−1−1020−20012][−1−2−10002101]=[65454565] \Sigma=\frac{1}{5}\begin{bmatrix}-1 & -1 & 0 & 2 &0 \\ -2 & 0 & 0 & 1 & 2\end{bmatrix} \begin{bmatrix}-1 & -2 \\ -1 & 0 \\ 0 & 0 \\ 2 & 1 \\ 0 & 1\end{bmatrix}=\begin{bmatrix}\frac{6}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5}\end{bmatrix} Σ=51[−1−2−10002102]⎣⎢⎢⎢⎢⎡−1−1020−20011⎦⎥⎥⎥⎥⎤=[56545456] - 求Σ\SigmaΣ的特征值和特征向量
∣A−λE∣=∣65−λ454565−λ∣=(65−λ)2−1625=0解得特征值和特征向量:λ1=2,λ2=2/5; Σ1=[11]T,Σ2=[−11]T \begin{aligned} &|A-\lambda{E}|=\begin{vmatrix}\frac{6}{5}-\lambda & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5}-\lambda\end{vmatrix}=(\frac{6}{5}-\lambda)^2-\frac{16}{25}=0\\ &解得特征值和特征向量:\lambda_1=2,\lambda_2=2/5;\ \Sigma_1=\begin{bmatrix}1 & 1\end{bmatrix}^T,\Sigma_2=\begin{bmatrix}-1 & 1\end{bmatrix}^T \end{aligned} ∣A−λE∣=∣∣∣∣56−λ545456−λ∣∣∣∣=(56−λ)2−2516=0解得特征值和特征向量:λ1=2,λ2=2/5; Σ1=[11]T,Σ2=[−11]T - 标准化后的特征向量
α1=[1212]T,α2=[−1212]T \alpha_1=\begin{bmatrix}\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix}^T,\alpha_2=\begin{bmatrix}-\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix}^T α1=[2121]T,α2=[−2121]T - 求得矩阵PPP
P=[1212−1212] P=\begin{bmatrix}\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix} P=[21−212121] - 验证协方差矩阵Σ\SigmaΣ的对角化
PΣPT=[1212−1212][65454565][12−121212]=[20025] P\Sigma{P^T}=\begin{bmatrix}\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix} \begin{bmatrix}\frac{6}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5}\end{bmatrix} \begin{bmatrix}\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix}=\begin{bmatrix}2 & 0 \\ 0 & \frac{2}{5}\end{bmatrix} PΣPT=[21−212121][56545456][2121−2121]=[20052] - 降维后数据
用P的第一行乘以数据矩阵,得到降维后数据表示:用P的第一行乘以数据矩阵,得到降维后数据表示:用P的第一行乘以数据矩阵,得到降维后数据表示:
Y=[1212][−1−1020−20011]=[−32−12032−12] Y=\begin{bmatrix}\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}}\end{bmatrix} \begin{bmatrix}-1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1\end{bmatrix}= \begin{bmatrix}-\frac{3}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & \frac{3}{\sqrt{2}} & -\frac{1}{\sqrt{2}}\end{bmatrix} Y=[2121][−1−2−10002101]=[−23−21023−21]
3.7 PCA算法优缺点
-
优点:
- 只需要以方差衡量信息量,不受数据集以外的因素影响;
- 各主成分之间正交,可消除原始数据成分之间的相互影响的因素;
- 计算方法简单,主要运算时特征值分解,易于实现;
- 无监督学习的一种,无参数限制;
-
缺点:
- 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强;
- 方差小的非主成分可能包含对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响;
注:矩阵分解部分不熟悉的读者需要详细阅读线性代数部分。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)