pca降维原理及过程:
原始数据矩阵可能存在数千万列,高纬度数据可能引起维度灾难,严重影响模型性能,浪费资源,因此需要对其降维。pca可以对原始数据降维,去除数据中的噪声,便于后续分析。
PCA(Principal Component Analysis),即主成分分析方法。PCA的主要思想就是将n维特征映射到k维上。高维数据不好观测,以三维星空为例,到处散落的星星观测不出规律;pca就像是专业摄影师,用照相机以不同方位对星空拍照,星空照片是降维后的数据,可以从不同角度不同方位拍n张照片,找出看到云点最多的,展开最大最清晰的照片为最佳照片,云点其次,第二清晰的为第二好的照片,看不清的或者拍出来星星最小的舍弃,pca主要工作就是找出最好的一些照片,丢弃拍的不好的照片,好的照片能够大概反映星空的大部分特征。
PCA数学原理基于线性代数和统计学,通过线性变换将原始数据投影到新的坐标系中,使投影后的数据在第一个坐标上方差最大,第二个坐标次之,且与第一主成分正交。以此类推..
详细计算步骤如下:
1. 中心化数据
原始数据进行中心化,每个特征减去均值,使数据均值为0。
点击查看代码
# python
import numpy as np
# 假设原始矩阵X(m*n) -- m为样本数,n为特征值
X_std = (X - np.mean(X,axis=0)) / np.std(X,axis=0)
2. 计算协方差
计算中心化后的数据的协方差矩阵,协方差矩阵的形状为 p×p,其元素表示各特征之间的协方差。协方差矩阵对角线元素即每个特征的方差,非对角线元素即不同特征之间的协方差
点击查看代码
cov_matrix = np.cov(X_std.T)
3. 特征分解
Σ × v = λ × v
Σ :协方差矩阵
v :特征向量(主成分方向)
λ :特征值(主成分的重要性)
特征向量代表数据分布的主要方向,特征值λ代表数据在这个方向的延申程度
- 特征值排序和选择
点击查看代码
# 按特征值从大到小排序
idx = eigenvalues.argsort()[::-1] # 降序排列
eigenvalues_sorted = eigenvalues[idx]
eigenvectors_sorted = eigenvectors[:, idx]# 选择前k个主成分
W = eigenvectors_sorted[:, :k] # 投影矩阵 (n×k)
5. 投影变换
点击查看代码
# 将数据投影到主成分空间
X_pca = X_centered @ W # (m×n) × (n×k) = (m×k)