主成分分析

理论

在PCA中,我们要做的是找到一个方向向量,当我们把所有的数据都投射到该向量上时,我们希望投射平均均方误差尽可能小。而投射误差是从特征向量向该方向向量作垂线的长度。

问题描述:

要将 n n n维数据降至 k k k维,目标是找到向量 u ( 1 ) , u ( 2 ) , . . . , u ( k ) u^{(1)},u^{(2)},...,u^{(k)} u(1),u(2),...,u(k)使得总的投射误差最小。

算法流程:

PCA减少 n n n维到 k k k

1、均值归一化。计算出所有特征的均值,然后令 x j = x j − μ J x_j=x_j-\mu_J xj=xjμJ。如果特征在不同的数量级上,我们还需要除以方差 σ 2 \sigma^2 σ2

2、计算协方差矩阵 S i g m a = 1 m ∑ i = 1 n ( x ( i ) ) ( x ( i ) ) T Sigma=\frac 1 m \sum_{i=1}^n(x^{(i)})(x^{(i)})^T Sigma=m1i=1n(x(i))(x(i))T

3、计算协方差矩阵 S i g m a Sigma Sigma的特征向量

[U, S, V] = svd( S i g m a Sigma Sigma)

对于一个 n ∗ n n*n nn维度的矩阵,上式中的 U U U是一个具有与数据之间最小投射误差的方向向量构成的矩阵。 n n n维降至 k k k维,我们只需从 U U U中选择前 k k k个向量,获得一个 n ∗ k n*k nk的矩阵 U r e d u c e U_{reduce} Ureduce,新的特征向量 z ( i ) = U r e d u c e T ∗ x ( i ) z^{(i)}=U^{T}_{reduce}*x^{(i)} z(i)=UreduceTx(i)

其中 x x x n ∗ 1 n*1 n1维的,因此结果是 k ∗ 1 k*1 k1维的。

其中的S是一个n×n的矩阵,只有对角线上有值,而其它单元都是0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例: 1 m ∑ m i = 1 ∣ x ( i ) − x ( i ) a p p r o x ∣ 2 1 m ∑ m i = 1 ∣ x ( i ) ∣ 2 = 1 − Σ k i = 1 S i i Σ m i = 1 S i i ≤ 1 \dfrac {\dfrac {1}{m}\sum^{m}{i=1}\left| x^{\left( i\right) }-x^{\left( i\right) }{approx}\right| ^{2}}{\dfrac {1}{m}\sum^{m}{i=1}\left| x^{(i)}\right| ^{2}}=1-\dfrac {\Sigma^{k}{i=1}S_{ii}}{\Sigma^{m}{i=1}S{ii}}\leq 1% m1mi=1x(i)2m1mi=1x(i)x(i)approx2=1Σmi=1SiiΣki=1Sii1

也就是: Σ k i = 1 s i i Σ n i = 1 s i i ≥ 0.99 \frac {\Sigma^{k}{i=1}s{ii}}{\Sigma^{n}{i=1}s{ii}}\geq0.99 Σni=1siiΣki=1sii0.99

在压缩过数据后,我们可以采用如下方法来近似地获得原有的特征: x ( i ) a p p r o x = U r e d u c e ⋅ z ( i ) x^{\left( i\right) }{approx}=U{reduce}·z^{(i)} x(i)approx=Ureducez(i)

Python实现

假设我门得到2维度数据

data = [[x1,y1],[x2,y2],...,[xn,yn]]
# 1.求x,y的均值
mx = mean(x1,x2,...,xn)
my = mean(y1,y2,...,yn)
# 2.替换之前的x,y(分别减去均值)
data_adjust = [[x1-mx,y1-my],[x2-mx, y2-my], ...,[xn-mx, yn-my]]
# 3.求协防差矩阵
cov=[[cov(x,x), cov(x,y)], [cov(y,x), cov(y,y)]]
# 4.求协方差的特征值和特征向量
eigenvalues = [e1, e2]
eigenvectors = [[e11, e12], [e21, e22]]
# 5.将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量,组成特征向量矩阵
# 6.将样本点投影到选择的特征向量上。

假设样本数为 m m m,特征数为 n n n,减减去均值后的样本矩阵为 D a t a A d j u s t DataAdjust DataAdjust, 选取的 k k k个特征向量组成的矩阵为 E i g e n V e c t o r s ( s h a p e = n ∗ k ) EigenVectors(shape=n*k) EigenVectors(shape=nk),那么投影后的数据 F i n a l D a t a = D a t a A d j u s t × E i g e n V e c t o r s FinalData=DataAdjust×EigenVectors FinalData=DataAdjust×EigenVectors

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值