详细推导pca算法(包括算法推导必备的知识) -凯发k8官方网
文章目录
- 1. pca优化目标
- 2.理论依据
- 2.1 矩阵换基底
- 2.2 拉格朗日乘子法
- 2.3 协方差矩阵
- 2.4 特征向量和奇异值分解
- 2.4.1 特征向量
- 2.4.2 奇异值分解
- 2.4.3 特征向量和奇异值分解的关系
- 3 pca
- 3.1 pca推导
- 3.2 pca过程总结
前言
该文章转载自
https://blog.csdn.net/qq2627866800/article/details/86656237
自己做了点修订
用较少特征地数据表达较多特征地数据
pca推导有两种主要思路:
1 最大化数据投影后的的方差(让数据更分散)
2 最小化投影造成的损失
下图中旋转的是新坐标轴,每个数据点在该坐标轴上垂直投影,最佳的坐标轴为数据投影后各点数据之间距离最大。
2.1 矩阵换基底
坐标变换的目标是,找到一组新的正交单位向量,替换原来的正交单位向量。
假设存在向量 a⃗=[32],要将其变换为以 u⃗=[1212],v⃗=[−1212]为新基底地坐标上, 求在新坐标系中的坐标 \text { 假设存在向量 } \vec{a}=\left[\begin{array}{l} 3 \\ 2 \end{array}\right], \text { 要将其变换为以 } \vec{u}=\left[\begin{array}{l} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{array}\right], \vec{v}=\left[\begin{array}{c} -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{array}\right] \text { 为新基底地坐标上, 求在新坐标系中的坐标 } 假设存在向量 a=[32], 要将其变换为以 u=[2121],v=[−2121] 为新基底地坐标上, 求在新坐标系中的坐标
∵\because∵ 向量 a⃗\vec{a}a 在向量 u⃗\vec{u}u 上的投影距离 s:\mathrm{s}:s:
s=∥a⃗∥⋅cosθ=a⃗⋅u⃗∥u⃗∥=a⃗⋅u⃗s=\|\vec{a}\| \cdot \cos \theta=\frac{\vec{a} \cdot \vec{u}}{\|\vec{u}\|}=\vec{a} \cdot \vec{u} s=∥a∥⋅cosθ=∥u∥a⋅u=a⋅u
其中: θ\thetaθ 表示两个向量之间的夹角
∴au=u⃗t⋅a⃗,av=v⃗t⋅a⃗\therefore a_{u}=\vec{u}^{t} \cdot \vec{a}, a_{v}=\vec{v}^{t} \cdot \vec{a} ∴au=ut⋅a,av=vt⋅a
∴\therefore∴ 向量 a⃗\vec{a}a 在新坐标系中的坐标可以表示为:
a⃗new=[u⃗v⃗]t⋅a⃗=[u⃗t⋅a⃗v⃗t⋅a⃗]\vec{a}_{n e w}=\left[\begin{array}{ll} \vec{u} & \vec{v} \end{array}\right]^{t} \cdot \vec{a}=\left[\begin{array}{l} \vec{u}^{t} \cdot \vec{a} \\ \vec{v}^{t} \cdot \vec{a} \end{array}\right] anew=[uv]t⋅a=[ut⋅avt⋅a]
如果矩阵 a\mathrm{a}a 的列向量分别表示原来坐标系中的点, 那么在新坐标系中的坐标为:
anew=[u⃗v⃗]t⋅aa_{n e w}=\left[\begin{array}{ll} \vec{u} & \vec{v} \end{array}\right]^{t} \cdot a anew=[uv]t⋅a
2.2 拉格朗日乘子法
拉格朗日乘子法主要提供了一种求解函数在约束条件下极值的方法。下面还是通过一个例子说明。 假设存在一个函数 f(x,y),f(x, y),f(x,y), 求该函数在 g(x,y)=cg(x, y)=cg(x,y)=c 下的极值 (可以是极大, 也可以极小)
通过观察我们发现,在极值点的时候两个函数必然相切, 即此时各自的导数成正比, 从而:
∂f∂x=λ∂g∂x∂f∂y=λ∂g∂yg(x,y)=c\begin{array}{l} \frac{\partial f}{\partial x}=\lambda \frac{\partial g}{\partial x} \\ \frac{\partial f}{\partial y}=\lambda \frac{\partial g}{\partial y} \\ g(x, y)=c \end{array} ∂x∂f=λ∂x∂g∂y∂f=λ∂y∂gg(x,y)=c
通过联立上述三个公式, 既可以求出最终结果。拉格朗日算子的主要思路同上, 不过他假设了一个新的函数:
f(x,y,λ)=f(x,y) λ[c−g(x,y)]f(x, y, \lambda)=f(x, y) \lambda[c-g(x, y)] f(x,y,λ)=f(x,y)λ[c−g(x,y)]
然后分解求:
∂f∂x=0∂f∂y=0∂f∂λ=0\begin{array}{l} \frac{\partial f}{\partial x}=0 \\ \frac{\partial f}{\partial y}=0 \\ \frac{\partial f}{\partial \lambda}=0 \end{array} ∂x∂f=0∂y∂f=0∂λ∂f=0
从而完成求解过程
2.3 协方差矩阵
假设有一组数据:
样本编号 变量 x(如发传单数量) 变量 y(如购买数量) 变量 z(如购买总价 )11232352555⋯⋯⋯⋯\begin{array}{c|ccc} \text { 样本编号 } & \text { 变量 } x \text { (如发传单数量) } & \text { 变量 } y \text { (如购买数量) } & \text { 变量 } z \text { (如购买总价 }) \\ \hline 1 & 1 & 2 & 3 \\ 2 & 35 & 25 & 55 \\ \cdots & \cdots & \cdots & \cdots \end{array} 样本编号 12⋯ 变量 x (如发传单数量) 135⋯ 变量 y (如购买数量) 225⋯ 变量 z (如购买总价 )355⋯
协方差研究的目的是变量 (特征) 之间的关系, 也就是上表中的发传单数量、购买数量、购买总额之间的相关情况 上表数据用矩阵表示为:
x=[135⋯225⋯355⋯]x=\left[\begin{array}{lll} 1 & 35 & \cdots \\ 2 & 25 & \cdots \\ 3 & 55 & \cdots \end{array}\right] x=⎣⎡123352555⋯⋯⋯⎦⎤
那么两两变量之间的关系:
cov(x,y)=e[(1−e(x))(2−e(y)) (35−e(x))(25−e(y)) ⋯]cov(x,z)=e[(1−e(x))(3−e(z)) (35−e(x))(55−e(z)) ⋯]\begin{array}{l} \operatorname{cov}(x, y)=e[(1-e(x))(2-e(y)) (35-e(x))(25-e(y)) \cdots] \\ \operatorname{cov}(x, z)=e[(1-e(x))(3-e(z)) (35-e(x))(55-e(z)) \cdots] \end{array} cov(x,y)=e[(1−e(x))(2−e(y))(35−e(x))(25−e(y))⋯]cov(x,z)=e[(1−e(x))(3−e(z))(35−e(x))(55−e(z))⋯]
如果 e(x)=e(y)=e(z)=0e(x)=e(y)=e(z)=0e(x)=e(y)=e(z)=0 (可以通过数据初始化实现,即减去平均值),那么上述的协方差关系可以用如下矩阵乘法表示:
cov(x)=1mxxt=[cov(x,x)cov(x,y)cov(x,z)cov(y,x)cov(y,y)cov(y,z)cov(z,x)cov(z,y)cov(z,z)]\operatorname{cov}(x)=\frac{1}{m} x x^{t}=\left[\begin{array}{lll} \operatorname{cov}(x, x) & \operatorname{cov}(x, y) & \operatorname{cov}(x, z) \\ \operatorname{cov}(y, x) & \operatorname{cov}(y, y) & \operatorname{cov}(y, z) \\ \operatorname{cov}(z, x) & \operatorname{cov}(z, y) & \operatorname{cov}(z, z) \end{array}\right] cov(x)=m1xxt=⎣⎡cov(x,x)cov(y,x)cov(z,x)cov(x,y)cov(y,y)cov(z,y)cov(x,z)cov(y,z)cov(z,z)⎦⎤
2.4 特征向量和奇异值分解
2.4.1 特征向量
假设:左侧矩形由 [ij]=[1001]\left[\begin{array}{ll}i & j\end{array}\right]=\left[\begin{array}{ll}1 & 0 \\ 0 & 1\end{array}\right][ij]=[1001] 定义, 右侧矩形由 [i⃗′j⃗′]=[2000.5]\left[\begin{array}{ll}\vec{i}^{\prime} & \vec{j}^{\prime}\end{array}\right]=\left[\begin{array}{cc}2 & 0 \\ 0 & 0.5\end{array}\right][i′j′]=[2000.5] 定义。
根据 2.1 矩阵拉伸变换的结果, 变换矩阵 a=[u⃗tv⃗t]=[2000.5],a=\left[\begin{array}{c}\vec{u}^{t} \\ \vec{v}^{t}\end{array}\right]=\left[\begin{array}{cc}2 & 0 \\ 0 & 0.5\end{array}\right],a=[utvt]=[2000.5], 即 :
a⋅[ij⃗]=[i⃗′j⃗′]a \cdot\left[\begin{array}{ll} i & \vec{j} \end{array}\right]=\left[\begin{array}{ll} \vec{i}^{\prime} & \vec{j}^{\prime} \end{array}\right] a⋅[ij]=[i′j′]
在应用变换矩阵变换时,我们发现存在与上图中红色向量平行的向量a⃗,\vec a ,a, 他们总满足:
a⋅a⃗//a⃗a \cdot \vec{a} / / \vec{a} a⋅a//a
即:
a⋅a⃗=λ⋅a⃗a \cdot \vec{a}=\lambda \cdot \vec{a} a⋅a=λ⋅a
所以:红色的特征向量不受变换矩阵的影响, 仍保持原来的方向, 我们称这类向量为变换矩阵a的特征向量, 对应的 vambda 为特征值。又因为特征向量有很多个, 即 :
a⋅a⃗i=λi⋅a⃗ia \cdot \vec{a}_{i}=\lambda_{i} \cdot \vec{a}_{i} a⋅ai=λi⋅ai
所以:
a⋅[a⃗1a⃗2⋯]=[a⃗1a⃗2⋯]⋅[λ1λ2⋱]⇒a=q⋅σ⋅q−1a \cdot\left[\begin{array}{lll} \vec{a}_{1} & \vec{a}_{2} & \cdots \end{array}\right]=\left[\begin{array}{lll} \vec{a}_{1} & \vec{a}_{2} & \cdots \end{array}\right] \cdot\left[\begin{array}{lll} \lambda_{1} \\ & \lambda_{2} \\ & & \ddots \end{array}\right] \rightarrow a=q \cdot \sigma \cdot q^{-1} a⋅[a1a2⋯]=[a1a2⋯]⋅⎣⎡λ1λ2⋱⎦⎤⇒a=q⋅σ⋅q−1
其中:q的列向量都是a变换矩阵的特征向量
另外,在做旋转变换时,要求变换前后的坐标维度不发生改变, 即a须为方阵
综上:如果方阵a满足 a=q⋅σ⋅q−1,a=q \cdot \sigma \cdot q^{-1},a=q⋅σ⋅q−1, 那么q为特征向量,σ\sigmaσ 为对应的特征值
2.4.2 奇异值分解
奇异值分解(svd: singular value decomposition ) 定义:对于任意的矩阵a,存在:
am×n=um×m⋅σm×n⋅vn×nta_{m \times n}=u_{m \times m} \cdot \sigma_{m \times n} \cdot v_{n \times n}^{t} am×n=um×m⋅σm×n⋅vn×nt其中:
ut⋅u=imvt⋅v=in\begin{array}{l} u^{t} \cdot u=i_{m} \\ v^{t} \cdot v=i_{n} \end{array} ut⋅u=imvt⋅v=in即:u的列向量两两正交且模为1, v列向量两两正交且模为1,即:
ut=u−1u^{t}=u^{-1} ut=u−1vt=v−1v^{t}=v^{-1} vt=v−1
2.4.3 特征向量和奇异值分解的关系
对于任意矩阵 a,\mathrm{a},a, 对a做svd有:
aat=uσvt⋅vσut=uσ2u−1a a^{t}=u \sigma v^{t} \cdot v \sigma u^{t}=u \sigma^{2} u^{-1} aat=uσvt⋅vσut=uσ2u−1
令 σ′=σ2,\sigma^{\prime}=\sigma^{2},σ′=σ2, 则:
aat=uσ′u−1a a^{t}=u \sigma^{\prime} u^{-1} aat=uσ′u−1
满足 a=qσq−1a=q \sigma q^{-1}a=qσq−1 特征向量定义
所以 aa^t 能实现特征分解, 又因为:
aat=u′′σ′′v′′t⏟svda a^{t}=\underbrace{u^{\prime \prime} \sigma^{\prime \prime} v^{\prime \prime t}}_{s v d} aat=svdu′′σ′′v′′t
所以:
u=u′′σ′=σ′′u−1=v′′⇒u=v′′\begin{array}{c} u=u^{\prime \prime} \\ \sigma^{\prime}=\sigma^{\prime \prime} \\ u^{-1}=v^{\prime \prime} \rightarrow u=v^{\prime \prime} \end{array} u=u′′σ′=σ′′u−1=v′′⇒u=v′′
因此:对 aata a^{t}aat 做svd,那么得到的u"列向量为特征向量 (对应a的u矩阵), σ′′\sigma^{\prime \prime}σ′′ 为特征值对角阵
同理: 对 ataa^{t} aata 做svd,那么得到的u"列向量为特征向量 (对应a的v矩阵), σ′′\sigma^{\prime \prime}σ′′ 为特征值对角矩阵
3.1 pca推导
pca的目标是找到一组新的正交基 {u1,u2,⋯,uk}\left\{u_{1}, u_{2}, \cdots, u_{k}\right\} \quad{u1,u2,⋯,uk} (从n维下降到k维), 使得n维数据点在该正交基构成的平面上投影后,投影数据点间的距离最大, 即数据间的方差最大。如果数据在每个正交基上投影后的方差最大, 那么同样满足在正交基所构成的平面上投影距离最大。
根据2.1,先考虑一个正交基 uj,u_{j},uj, 数据点 xix_{i}xi 在该基底上的投影距离为 xit⋅uj,x_{i}^{t} \cdot u_{j},xit⋅uj, 所以所有的mmm个nnn维样本数据在该基底上投影的方差 jjj_{j}jj 为:
jj=1m∑i=1m(xituj−xcentertuj)2j_{j}=\frac{1}{m} \sum_{i=1}^{m}\left(x_{i}^{t} u_{j}-x_{\text {center}}^{t} u_{j}\right)^{2} jj=m1i=1∑m(xituj−xcentertuj)2jj=1m∑i=1m(xituj)2=1m∑i=1m(ujtxi⋅xituj)=ujt⋅1m∑i=1m(xixit)⋅ujj_{j}=\frac{1}{m} \sum_{i=1}^{m}\left(x_{i}^{t} u_{j}\right)^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(u_{j}^{t} x_{i} \cdot x_{i}^{t} u_{j}\right)=u_{j}^{t} \cdot \frac{1}{m} \sum_{i=1}^{m}\left(x_{i} x_{i}^{t}\right) \cdot u_{j} jj=m1i=1∑m(xituj)2=m1i=1∑m(ujtxi⋅xituj)=ujt⋅m1i=1∑m(xixit)⋅uj所以:jj=ujt⋅1m(x1x1t x2x2t ⋯ xmxmt)⋅uj=ujt⋅1m([x1⋯xm]⋅[x1t⋮xmt])⋅uj==1mujtxxtujj_{j}=u_{j}^{t} \cdot \frac{1}{m}\left(x_{1} x_{1}^{t} x_{2} x_{2}^{t} \cdots x_{m} x_{m}^{t}\right) \cdot u_{j}=u_{j}^{t} \cdot \frac{1}{m}\left(\left[\begin{array}{lll} x_{1} & \cdots & x_{m} \end{array}\right] \cdot\left[\begin{array}{c} x_{1} ^{t}\\ \vdots \\ x_{m}^{t} \end{array}\right]\right) \cdot u_{j}==\frac{1}{m} u_{j}^{t} x x^{t} u_{j} jj=ujt⋅m1(x1x1tx2x2t⋯xmxmt)⋅uj=ujt⋅m1⎝⎜⎛[x1⋯xm]⋅⎣⎢⎡x1t⋮xmt⎦⎥⎤⎠⎟⎞⋅uj==m1ujtxxtuj
假设 sn×n=1mxxt,s_{n\times n}=\frac{1}{m} x x^{t},sn×n=m1xxt, 则 :jj=ujt⋅s⋅uj,: j_{j}=u_{j}^{t} \cdot s \cdot u_{j},:jj=ujt⋅s⋅uj, 根据pca目标, 我们需要求解 jjj_{j}jj 最大时对应 的 uju_{j}uj 根据 2.2 中的拉格朗日算子 (求极值) 求解:
jj=ujtsujj_{j}=u_{j}^{t} s u_{j} jj=ujtsujs.t. ujtuj=1\text { s.t. } u_{j}^{t} u_{j}=1 s.t. ujtuj=1
则构造函数:
f(uj)=ujtsuj λj(1−ujtuj)f\left(u_{j}\right)=u_{j}^{t} s u_{j} \lambda_{j}\left(1-u_{j}^{t} u_{j}\right) f(uj)=ujtsujλj(1−ujtuj)
求解 ∂f∂uj=0,\frac{\partial f}{\partial u_{j}}=0,∂uj∂f=0, 得:
2s⋅uj−2λj⋅uj=0⇒suj=λjuj2 s \cdot u_{j}-2 \lambda_{j} \cdot u_{j}=0 \rightarrow s u_{j}=\lambda_{j} u_{j} 2s⋅uj−2λj⋅uj=0⇒suj=λjuj
结合2.4.1则:当 uj、λju_{j} 、 \lambda_{j}uj、λj 分别为s矩阵的特征向量、特征值时, jjj_{j}jj 有极值, 把上述结果带回公式得jjj_{j}jj最大值:
jjm=ujtλjuj=λjj_{j_{m}}=u_{j}^{t} \lambda_{j} u_{j}=\lambda_{j} jjm=ujtλjuj=λj
所以对于任意满足条件的正交基{u1,u2,⋯,uk}\left\{u_{1}, u_{2}, \cdots, u_{k}\right\} \quad{u1,u2,⋯,uk} ,对应的数据在上面投影后的方差值为s矩阵的特征向量, 从而:
jmax=∑j=1kλj,λ人大到小排序 j_{\max }=\sum_{j=1}^{k} \lambda_{j}, \lambda \text { 人大到小排序 } jmax=j=1∑kλj,λ 人大到小排序
所以投影正交基为s的特征向量中的前k个最大特征值对应的特征向量。 接下来对s进行特征分解, 根据2.4.3特征向量和svd的关系结论, s的特征向量集合:
u=uof svd(s)=uof svd(1mxxt)u=u \text { of } \operatorname{svd}(s)=u \text { of } \operatorname{svd}\left(\frac{1}{m} x x^{t}\right) u=u of svd(s)=u of svd(m1xxt)另外, 由于 s=1mxxts=\frac{1}{m} x x^{t}s=m1xxt 由于x已0均值处理, 根据2.3 协方差矩阵定义:s为数据集x的协方差矩阵。 综上, 即可得到满足投影后数据距离最大的新的正交基 {u1,u2,⋯,uk}\left\{u_{1}, u_{2}, \cdots, u_{k}\right\}{u1,u2,⋯,uk} 因此降维后的数据为:
xnewk×m=[u1t′u2t⋮ukt]k×n⋅xn×mx_{n e w_{k \times m}}=\left[\begin{array}{c}u_{1}^{t^{\prime}} \\u_{2}^{t} \\\vdots \\u_{k}^{t} \end{array}\right]_{k \times n} \cdot x_{n \times m} xnewk×m=⎣⎢⎢⎢⎡u1t′u2t⋮ukt⎦⎥⎥⎥⎤k×n⋅xn×m
3.2 pca过程总结
pca流程如下:
根据之前的公式, 做pca投影后, 投影数据的方差:
varxproject=∑j=1kjj=∑j=1kλjv a r_{x_{p r o j e c t}}=\sum_{j=1}^{k} j_{j}=\sum_{j=1}^{k} \lambda_{j} varxproject=j=1∑kjj=j=1∑kλj
又因为:数据从n维投影新的n维的坐标系, 方差不会发生改变 (向量的模长度相等且为1,可以用2d坐标系投影到45-135 度坐标系验证),即:
varx=varxproject =∑j=1njj=∑j=1nλjv a r_{x}=v a r_{x_{\text {project }}}=\sum_{j=1}^{n} j_{j}=\sum_{j=1}^{n} \lambda_{j} varx=varxproject =j=1∑njj=j=1∑nλj
即:x的协方差矩阵的特征值和对应x的方差
总结
以上是凯发k8官方网为你收集整理的详细推导pca算法(包括算法推导必备的知识)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 什么是循环神经网络——学习笔记
- 下一篇: markdown公式输入(very ni