当前位置:首页>区块链文章>区块链推广>机器学习笔记:主成分分析

机器学习笔记:主成分分析

本文章是看了B站大佬关于主成分分析的讲解后做的笔记,如果看不懂,建议移步观看大佬的视频https://www.bilibili.com/video/BV1E5411E71z前言我们先来看个二维的数据D,它有两个维度x和y,降维的一个准则就是数据在新的维度上要尽可能的分散。观察到原始数据,无论是在x轴方向上,还是y轴方向,数据的分散程度都不是最大的。因此,我们需要找到一个新的坐标系,使得数据在新坐标系上的一个投影方向离散度最大。PCA的目标就是找到这个新的坐标系,离散度最大的投影方向就是PCA的第一主成分

本文章是看了B站大佬关于主成分分析的讲解后做的笔记,如果看不懂,建议移步观看大佬的视频https://www.bilibili.com/video/BV1E5411E71z

前言

我们先来看个二维的数据D,它有两个维度x和y,降维的一个准则就是数据在新的维度上要尽可能的分散。观察到原始数据,无论是在x轴方向上,还是y轴方向,数据的分散程度都不是最大的。因此,我们需要找到一个新的坐标系,使得数据在新坐标系上的一个投影方向离散度最大。PCA的目标就是找到这个新的坐标系,离散度最大的投影方向就是PCA的第一主成分。
机器学习笔记:主成分分析

数学定义

D = [ x 1 x 2 . . . x n y 1 y 2 . . . y n ] D=\\begin{bmatrix}x_1 & x_2 & … & x_n \\\\ y_1 & y_2 & … & y_n \\\\ \\end{bmatrix} D=[x1y1x2y2......xnyn], 去中心化之后 D ′ = [ x 1 ′ x 2 ′ . . . x n ′ y 1 ′ y 2 ′ . . . y n ′ ] D\’=\\begin{bmatrix}x_1\’ & x_2\’ & … & x_n\’ \\\\ y_1\’ & y_2\’ & … & y_n\’ \\\\ \\end{bmatrix} D=[x1y1x2y2......xnyn],其中 x i ′ = x i − x ‾ , y i ′ = y i − y ‾ . x_i\’=x_i-\\overline x, y_i\’=y_i-\\overline y. xi=xix,yi=yiy.

PCA的第一步——去中心化,目的是为了把数据的中心移到原点,这样我们在寻找坐标系的时候会更方便一些,后续的证明过程也会得到简化。
下面我们来看几个数学定义:

协 方 差 : c o v ( x , y ) = ∑ i = 1 n ( x i − x ‾ , y i − y ‾ ) n − 1 方 差 : c o v ( x , x ) = ∑ i = 1 n ( x i − x ‾ ) 2 n − 1 协 方 差 矩 阵 : C = [ c o v ( x , x ) c o v ( x , y ) c o v ( y , x ) c o v ( y , y ) ] \\begin{aligned} 协方差&:cov(x,y)=\\frac {\\sum_{i=1}^n(x_i-\\overline x,y_i-\\overline y)}{n-1} \\\\ 方差&:cov(x,x)=\\frac {\\sum_{i=1}^n(x_i-\\overline x)^2}{n-1}\\\\ 协方差矩阵&:C=\\begin{bmatrix}cov(x,x) & cov(x,y) \\\\ cov(y,x) & cov(y,y)\\\\ \\end{bmatrix}\\end{aligned} cov(x,y)=n1i=1n(xix,yiy)cov(x,x)=n1i=1n(xix)2C=[cov(x,x)cov(y,x)cov(x,y)cov(y,y)]去中心化之后,均值为0,那么可以得到协方差矩阵的一个特殊形式为:

C = [ ∑ i = 1 n ( x i ) 2 n − 1 ∑ i = 1 n ( x i , y i ) n − 1 ∑ i = 1 n ( y i , x i ) n − 1 ∑ i = 1 n ( y i ) 2 n − 1 ] = 1 n − 1 [ ∑ i = 1 n ( x i ) 2 ∑ i = 1 n ( x i , y i ) ∑ i = 1 n ( y i , x i ) ∑ i = 1 n ( y i ) 2 ] = 1 n − 1 W W T C=\\begin{bmatrix}\\frac {\\sum_{i=1}^n(x_i)^2}{n-1} & \\frac {\\sum_{i=1}^n(x_i,y_i)}{n-1} \\\\ \\frac {\\sum_{i=1}^n(y_i,x_i)}{n-1} & \\frac {\\sum_{i=1}^n(y_i)^2}{n-1}\\\\ \\end{bmatrix} =\\frac {1}{n-1}\\begin{bmatrix}\\sum_{i=1}^n(x_i)^2 & \\sum_{i=1}^n(x_i,y_i) \\\\ \\sum_{i=1}^n(y_i,x_i) & \\sum_{i=1}^n(y_i)^2\\\\ \\end{bmatrix} = \\frac {1}{n-1}WW^T C=[n1i=1n(xi)2n1i=1n(yi,xi)n1i=1n(xi,yi)n1i=1n(yi)2]=n11[i=1n(xi)2i=1n(yi,xi)i=1n(xi,yi)i=1n(yi)2]=n11WWT

其中 W W W表示任意方向均值都为0的数据。
另外,定义缩放矩阵 S = [ a 0 0 b ] S=\\begin{bmatrix}a & 0 \\\\ 0 & b\\\\ \\end{bmatrix} S=[a00b], 其中a表示数据在x轴方向拉伸a倍,b表示数据在y轴方向拉伸b倍。

旋转矩阵 R = [ s i n ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ] R=\\begin{bmatrix}sin(\\theta) &-sin(\\theta) \\\\ sin(\\theta) & cos(\\theta)\\\\ \\end{bmatrix} R=[sin(θ)sin(θ)sin(θ)cos(θ)],代表数据以原点为中心旋转了 θ \\theta θ度。

我们假设白数据为矩阵 W W W,其中白数据的特点是在任意方向上的分布都服从标准正态分布,同时认为中心位于原点的任意数据都可以由白数据经过线性变换(缩放、旋转)得到。那么去中心化之后的数据就可以用矩阵乘法来表示: D ′ = R S W D\’=RSW D=RSW
机器学习笔记:主成分分析

理论推导

由之前的定义可知白数据的协方差矩阵:

C W = [ c o v ( x , x ) c o v ( x , y ) c o v ( y , x ) c o v ( y , y ) ] = 1 n − 1 W W T C_W=\\begin{bmatrix}cov(x,x) & cov(x,y) \\\\ cov(y,x) & cov(y,y)\\\\ \\end{bmatrix}=\\frac {1}{n-1}WW^T CW=[cov(x,x)cov(y,x)cov(x,y)cov(y,y)]=n11WWT

白数据服从标准正态分布,故有
c o v ( x , x ) = c o v ( y , y ) = 1 c o v ( x , y ) = c o v ( y , x ) = 0 cov(x,x)=cov(y,y)=1 \\\\ cov(x,y)=cov(y,x)=0 cov(x,x)=cov(y,y)=1cov(x,y)=cov(y,x)=0
代入得
C W = [ c o v ( x , x ) c o v ( x , y ) c o v ( y , x ) c o v ( y , y ) ] = [ 1 0 0 1 ] = I C_W=\\begin{bmatrix}cov(x,x) & cov(x,y) \\\\ cov(y,x) & cov(y,y)\\\\ \\end{bmatrix} =\\begin{bmatrix}1 & 0 \\\\ 0 & 1\\\\ \\end{bmatrix}=I CW=[cov(x,x)cov(y,x)cov(x,y)cov(y,y)]=[1001]=I

C W = 1 n − 1 W W T = I C_W=\\frac {1}{n-1}WW^T=I CW=n11WWT=I
然后我们现在来化简去中心化之后的数据的协方差矩阵:
C D ′ = 1 n − 1 D ′ D ′ T = 1 n − 1 ( R S W ) ( R S W ) T = 1 n − 1 R S W W T S T R T = R S ( 1 n − 1 W W T ) S T R T = R S S T R T \\begin{aligned} C_{D\’} &=\\frac {1}{n-1}D\'{D\’}^T \\\\ &=\\frac {1}{n-1}(RSW)(RSW)^T \\\\ &=\\frac {1}{n-1}RSWW^TS^TR^T \\\\ &=RS(\\frac {1}{n-1}WW^T)S^TR^T \\\\ &=RSS^TR^T \\end{aligned} CD=n11DDT=n11(RSW)(RSW)T=n11RSWWTSTRT=RS(n11WWT)STRT=RSSTRT
这样数据的协方差公式就可以用缩放矩阵和旋转矩阵来表示了,而这个旋转矩阵其实就是我们要找的新坐标系。
根据缩放矩阵和旋转矩阵的特性:
S T = S R T = R − 1 \\begin{aligned} S^T &=S \\\\ R^T &=R^{-1} \\end{aligned} STRT=S=R1
C D ′ = R S S T R T = R S S R − 1 C_{D\’}=RSS^TR^T=RSSR^{-1} CD=RSSTRT=RSSR1
L = S S T = S S = S 2 L=SS^T=SS=S^2 L=SST=SS=S2
C D ′ = R S S T R T = R S S R − 1 = R L R − 1 C_{D\’}=RSS^TR^T=RSSR^{-1}=RLR^{-1} CD=RSSTRT=RSSR1=RLR1
矩阵的特征向量定义为
C D ′ v = λ v C_{D\’}v=\\lambda v CDv=λv
以二维矩阵为例
C D ′ v 1 = λ 1 v 1 C D ′ v 2 = λ 2 v 2 C_{D\’}v_1=\\lambda_1 v_1 \\\\ C_{D\’}v_2=\\lambda_2 v_2 CDv1=λ1v1CDv2=λ2v2
写成矩阵的形式就是
C D ′ [ v 1 v 2 ] = [ v 1 v 2 ] [ λ 1 0 0 λ 2 ] C_{D\’} \\begin{bmatrix}v_1 & v_2\\\\ \\end{bmatrix}=\\begin{bmatrix}v_1 & v_2\\\\ \\end{bmatrix} \\begin{bmatrix}\\lambda_1& 0 \\\\ 0 & \\lambda_2\\\\ \\end{bmatrix} CD[v1v2]=[v1v2][λ100λ2]
由于特征向量为单位向量,同时满足正交性,故可令旋转矩阵 R = [ v 1 v 2 ] R=\\begin{bmatrix}v_1 & v_2\\\\ \\end{bmatrix} R=[v1v2],同时 L = [ λ 1 0 0 λ 2 ] L= \\begin{bmatrix}\\lambda_1 & 0\\\\ 0 & \\lambda_2\\\\ \\end{bmatrix} L=[λ100λ2]
则有 C D ′ R = R L C_{D\’}R=RL CDR=RL,推出 C D ′ = R L R − 1 C_{D\’}=RLR^{-1} CD=RLR1
故可得旋转矩阵 R R R就是协方差矩阵的特征向量。

python代码实现

我们根据原理来实现一下PCA的过程:

def my_pca(X, n_components):    X = X - np.mean(X, axis=0)  # 减去每个方向的均值    n = X.shape[0]    X_cov = 1/(n-1)*X.T@X    L, R = np.linalg.eig(X_cov)  # 求协方差矩阵的特征值L和特征向量R    index = np.argsort(L)[::-1]    R_rank = R[:, index]  # 根据特征值大小对特征向量R进行排序    new_X = X@R_rank  # 矩阵相乘得到数据在新坐标系下的变换    return new_X[:, :n_components]  # 返回变换后的数据

然后随机生成100行4维的数据测试一下:

data = np.random.random([100, 4])X_1 = my_pca(data, n_components=2)  # 数据降到2维print(X_1[:5, :])

输出降维后的前5条数据:

[[-0.2606472  -0.17418523] [-0.42146202  0.02135193] [-0.32852065 -0.31256129] [ 0.00865476  0.0472365 ] [-0.57729244  0.33415261]]

调用sklearn包的PCA方法:

X_2 = PCA(n_components=2).fit_transform(data)print(X_2[:5, :])

可以看到结果是一样的,说明我们的计算没有错

[[-0.2606472  -0.17418523] [-0.42146202  0.02135193] [-0.32852065 -0.31256129] [ 0.00865476  0.0472365 ] [-0.57729244  0.33415261]]

总结

最后总结一下PCA的步骤:

输入:原始数据D,降维维度n1、去中心化,得到D\'  2、求协方差矩阵C\'3、求特征向量R和特征值L4、按特征值从大到小排序,得到对应排序的特征向量R\'5、计算变换坐标系后的数据D_P=R\'D\'输出:前n个主成分D_P[0:n]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
区块链推广

第88篇 多重签名智能合约(0.8.5)

2021-11-17 8:56:43

区块链推广

【收藏向】一文弄懂什么是ERC20

2021-11-18 11:18:34

重要说明

本站资源大多来自网络,如有侵犯你的权益请联系管理员 区块链Bi站  或给邮箱发送邮件834379394@qq.com 我们会第一时间进行审核删除。 站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!


如果你遇到支付完成,找不到下载链接,或者不能下载,或者解压失败,先不要忙,加客服主的QQ:834379394 (客服有可能有事情或者在睡觉不能及时的回复您,QQ留言后,请耐心等待即可!)

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索