欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程资源 > 编程问答 >内容正文

编程问答

详细推导pca算法(包括算法推导必备的知识) -凯发k8官方网

发布时间:2024/10/14 编程问答 115 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 详细推导pca算法(包括算法推导必备的知识) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 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=acosθ=uau=au
其中: θ\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=uta,av=vta
∴\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]ta=[utavta]
如果矩阵 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]ta

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} xf=λxgyf=λygg(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)λ[cg(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} xf=0yf=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[(1e(x))(2e(y))(35e(x))(25e(y))]cov(x,z)=e[(1e(x))(3e(z))(35e(x))(55e(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][ij]=[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]=[ij]
在应用变换矩阵变换时,我们发现存在与上图中红色向量平行的向量a⃗,\vec a ,a, 他们总满足:
a⋅a⃗//a⃗a \cdot \vec{a} / / \vec{a} aa//a
即:
a⋅a⃗=λ⋅a⃗a \cdot \vec{a}=\lambda \cdot \vec{a} aa=λa
所以:红色的特征向量不受变换矩阵的影响, 仍保持原来的方向, 我们称这类向量为变换矩阵a的特征向量, 对应的 vambda 为特征值。又因为特征向量有很多个, 即 :
a⋅a⃗i=λi⋅a⃗ia \cdot \vec{a}_{i}=\lambda_{i} \cdot \vec{a}_{i} aai=λiai
所以:
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λ2a=qσq1
其中:q的列向量都是a变换矩阵的特征向量
另外,在做旋转变换时,要求变换前后的坐标维度不发生改变, 即a须为方阵
综上:如果方阵a满足 a=q⋅σ⋅q−1,a=q \cdot \sigma \cdot q^{-1},a=qσq1, 那么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×nvn×nt其中:
ut⋅u=imvt⋅v=in\begin{array}{l} u^{t} \cdot u=i_{m} \\ v^{t} \cdot v=i_{n} \end{array} utu=imvtv=in即:u的列向量两两正交且模为1, v列向量两两正交且模为1,即:
ut=u−1u^{t}=u^{-1} ut=u1vt=v−1v^{t}=v^{-1} vt=v1

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σvtvσut=uσ2u1
σ′=σ2,\sigma^{\prime}=\sigma^{2},σ=σ2, 则:
aat=uσ′u−1a a^{t}=u \sigma^{\prime} u^{-1} aat=uσu1
满足 a=qσq−1a=q \sigma q^{-1}a=qσq1 特征向量定义
所以 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σvt
所以:
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σ=σu1=vu=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},xituj, 所以所有的mmmnnn维样本数据在该基底上投影的方差 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=1m(xitujxcentertuj)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=1m(xituj)2=m1i=1m(ujtxixituj)=ujtm1i=1m(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=ujtm1(x1x1tx2x2txmxmt)uj=ujtm1[x1xm]x1txmtuj==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=ujtsuj, 根据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(1ujtuj)
求解 ∂f∂uj=0,\frac{\partial f}{\partial u_{j}}=0,ujf=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} 2suj2λjuj=0suj=λ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=1kλ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=u1tu2tuktk×nxn×m

3.2 pca过程总结

pca流程如下:

  • 初始化 x,x,x, 使得所有样本之间的特征值均值为0, 同时应用feature scaling, 缩放到-0.5 ∼0.5\sim 0.50.5;
  • 计算x的协方差矩阵s;
  • 对s进行svd分解, u即我们要求的新坐标系集合, σ\sigmaσ 为特征值集合 (计算时特征值都会大于0, 且结果会从小到大 排列) ;
  • 按照特征值从大到小排序, 要降低为k维, 那么取前k个特征值对应的特征向量, 就是新的k个坐标轴
  • 把x映射到新的坐标系中, 完整降维操作;
    根据之前的公式, 做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=1kjj=j=1kλ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=1njj=j=1nλj
    即:x的协方差矩阵的特征值和对应x的方差
  • 总结

    以上是凯发k8官方网为你收集整理的详细推导pca算法(包括算法推导必备的知识)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

    网站地图