目录
一、PCA
PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。
PCA 的数学推导可以从最大可分型和最近重构性两方面进行,前者的优化条件为划分后方差最大,后者的优化条件为点到划分平面距离最小,这里我将从最大可分性的角度进行证明。
二、PCA的原理
- 数据标准化:对于每个特征,我们首先将其标准化为均值为0、方差为1的标准正态分布。这是为了确保每个特征的重要性被正确评估。
- 协方差矩阵:通过计算数据集的协方差矩阵,我们可以了解各个特征之间的关系。协方差矩阵是一个对称矩阵,其中每个元素表示两个特征之间的协方差。
- 特征值分解:通过对协方差矩阵进行特征值分解,我们可以得到特征值和对应的特征向量。特征向量表示主成分的方向,而特征值表示其重要性。
- 选择主成分:根据特征值的大小,我们选择前k个主成分作为新的特征空间。这些主成分是原始特征的线性组合,使得原始数据在新空间中的方差最大化。
三、方差与相关系数
我们该如何评价某一个特征是否是好的特征呢?
比较简明的方法,通过方差来判断。
方差的概念
方差衡量的是样本偏离样本均值的程度;方差越大,样本分布越散;方差越小,样本分布越集中。
相关系数
方差大的分散度显然大于方差小的(注意横坐标
我们可以认为,一个特征下的样本方差大,说明这个特征对样本的区分度大,因为样本之间的差异会更大一些;相反,如果一个特征的方差小,在这个特征下的样本趋于一个点,说明这个特征的区分度不大。
另外,特征和特征之间也会有或多或少的联系,这体现在一个特征的数值的变化对另一个特征数值的变化的趋势上。
比如一个人的身高体重,一个身高高的人,体重往往也会更大。而相比于身高和考试分数而言,二者的想相关性就远不及身高和体重。
我们定义两个特征的协方差
协方差会受到样本分布的影响,我们常用相关系数衡量两个特征之间的关系
当呈线性关系时,二者的相关系数为1
四、性质
- 缓解维度灾难:PCA 算法通过舍去一部分信息之后能使得样本的采样密度增大(因为维数降低了),这是缓解维度灾难的重要手段;
- 降噪:当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;
- 过拟合:PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能加剧了过拟合;
- 特征独立:PCA 不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立;
五、代码实现
import numpy as np
from sklearn.decomposition import PCA
# 生成模拟数据
X = np.random.rand(100, 5)
# 创建PCA对象,保留2个主成分
pca = PCA(n_components=2)
# 拟合并转换数据
X_pca = pca.fit_transform(X)
# 输出保留的主成分
print("保留的主成分:")
print(pca.components_)
# 输出转换后的数据
print("转换后的数据:")
print(X_pca)