主成分分析

时间:2022-11-02 09:56:56


理论

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

问题描述:

要将主成分分析维数据降至主成分分析维,目标是找到向量主成分分析使得总的投射误差最小。

算法流程:

PCA减少主成分分析维到主成分分析

1、均值归一化。计算出所有特征的均值,然后令主成分分析。如果特征在不同的数量级上,我们还需要除以方差主成分分析

2、计算协方差矩阵主成分分析

3、计算协方差矩阵主成分分析的特征向量

[U, S, V] = svd(主成分分析)

对于一个主成分分析维度的矩阵,上式中的主成分分析是一个具有与数据之间最小投射误差的方向向量构成的矩阵。主成分分析维降至主成分分析维,我们只需从主成分分析中选择前主成分分析个向量,获得一个主成分分析的矩阵主成分分析,新的特征向量主成分分析

其中主成分分析主成分分析维的,因此结果是主成分分析维的。

其中的S是一个n×n的矩阵,只有对角线上有值,而其它单元都是0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例: 主成分分析

也就是:主成分分析

在压缩过数据后,我们可以采用如下方法来近似地获得原有的特征:主成分分析

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.将样本点投影到选择的特征向量上。

假设样本数为主成分分析,特征数为主成分分析,减减去均值后的样本矩阵为主成分分析, 选取的主成分分析个特征向量组成的矩阵为主成分分析,那么投影后的数据主成分分析