目录
基本概念
什么是主成分分析
主成分分析(Principal Component Analysis,简称PCA)是一种无监督学习算法,是一种简化数据集的技术,主要用于降维和数据压缩。它可以将高维数据映射到低维空间,通过数据投影的线性转化(正交变换),用较少的数据集维数,保留数据集中对方差贡献最大的特征,也就是保留数据的主要特征。
具体来说,PCA会计算原始数据的协方差矩阵,然后找到协方差矩阵的特征向量和特征值。特征向量是新空间的基向量,特征值描述了每个特征向量的重要程度。在建模中,我们可以选择保留最大的k个特征值对应的特征向量,将原始数据投影到这k个特征向量所张成的低维空间中。
方差与相关系数
我们该如何评价某一个特征是否是好的特征呢?
比较简明的方法,通过方差来判断。
方差的概念
方差衡量的是样本偏离样本均值的程度;方差越大,样本分布越散;方差越小,样本分布越集中。
方差大的分散度显然大于方差小的(注意横坐标
我们可以认为,一个特征下的样本方差大,说明这个特征对样本的区分度大,因为样本之间的差异会更大一些;相反,如果一个特征的方差小,在这个特征下的样本趋于一个点,说明这个特征的区分度不大。
另外,特征和特征之间也会有或多或少的联系,这体现在一个特征的数值的变化对另一个特征数值的变化的趋势上。
比如一个人的身高体重,一个身高高的人,体重往往也会更大。而相比于身高和考试分数而言,二者的想相关性就远不及身高和体重。
我们定义两个特征的协方差
协方差会受到样本分布的影响,我们常用相关系数衡量两个特征之间的关系
当呈线性关系时,二者的相关系数为1
特征降维
还记得我们的线性回归吗
我们线性回归中要求是可逆的,这便需要样本矩阵
列满秩;但是当样本的特征多起来之后,甚至特征数m大于样本数n,此时不可逆
于是乎,我们希望减少特征的维度,寻找更优的特征
优秀的特征方差更大,同时和其他特征的相关性更小
我们把维的特征降低到维,使得样本矩阵变化为,这需要右乘矩阵
我们希望新样本矩阵方差大而协方差小
主成分
最理想的情况就是协方差矩阵对角线最大,而其他位置为0
这也就是协方差矩阵的相似对角化
显然,该矩阵是实对称矩阵,也就存在正交矩阵A使得,其中是对角矩阵
为了规范,我们将对角元素从大到小排列,
便是矩阵的m个特征值了
而矩阵A是矩阵特征值对应的特征向量的组合,他是正交的,为了规范我们将写为单位正交阵
矩阵可以理解为做特征变换后新的协方差矩阵,这里的特征变换是将原有特征进行线性组合形成新的特征(比如身高、体重变换为0.2身高+0.8体重,0.8身高+0.2体重)
经过线性变换后的矩阵A有着大方差和小协方差的优良特性
我们取方差最大的个新特征讨论,这t个特征称为t主成分,右乘的矩阵便是前t个特征向量的组合
降维后的矩阵具有如下结构,对角线从大到小依次排列,其他地方为0
原理
降维有两种方法,一种是特征消除,另一种是特征提取
特征消除:将会在直接消除那些我们觉得不重要的特征,这会使我们对视这些特征中的很多信息。
特征提取:通过组合现有特征来创建新变量,可以尽量保存特征中存在的信息
PCA是一种常见的数据降维算法,PCA会将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,于是就可以用较少的综合指标分别代表存在于各个变量中的各类信息。PCA的核心思想是找到一个维数更低的仿射集,然后将所有的数据点在其上做投影,以得到新的在更低维空间中的点作为新的数据。如何选择这样的仿射集,以降维的同时不至于损失过多的信息呢?有两种思路:
最近重构性:样本点到该仿射集的距离要尽量小;
最大可分性:样本点到该放射集的投影要尽可能分开。
上图所示的左图中有5个离散点,降低维度,就是需要把点映射成一条线。将其映射到右图中黑色虚线上则样本变化最大,且坐标点更分散,这条黑色虚线就是第一主成分的投影方向。
PCA是一种线性降维方法,即通过某个投影矩阵将高维空间中的原始样本点线性投影到低维空间,以达到降维的目的,线性投影就是通过矩阵变换的方式把数据映射到最合适的方向。
降维的几何意义可以理解为旋转坐标系,取前k个轴作为新特征。降维的代数意义可以理解为,阶的原始样本X,与阶的矩阵W做矩阵乘法运算,即得到m*k阶的低维矩阵Y,这里阶的矩阵W就是投影矩阵。
PCA的步骤
步骤1:数据标准化 对原始数据进行标准化,使得每个特征具有零均值和单位方差。
步骤2:计算协方差矩阵 计算标准化后的数据的协方差矩阵。
步骤3:计算特征值和特征向量 求解协方差矩阵的特征值和特征向量。
步骤4:选择主成分 根据特征值的大小选择前k个主成分,这些主成分对应特征值最大的特征向量。
步骤5:投影数据 将标准化后的数据投影到选定的主成分上,得到降维后的数据。
优缺点
优点:
可以降低数据维度:主成分分析算法可以将高维数据降低到低维空间中,从而减少数据的维度,提高计算效率和模型的泛化能力。
可以去除冗余信息:主成分分析算法可以去除数据中的冗余信息,提取出最重要的特征,从而提高模型的准确率和泛化能力。
可以进行数据压缩:主成分分析算法可以将数据压缩到较小的空间中,从而减少存储和传输数据的成本。
可以处理多变量问题:主成分分析算法可以处理多变量问题,从而提高模型的复杂度和准确率。
可以可视化数据:主成分分析算法可以将数据降低到二维或三维空间中,从而方便可视化和理解数据。
可以灵活选择成分数量:各主成分是按方差大小依次排序的,可以根据实际情况灵活取舍;
去噪:PCA可以通过保留主成分,去除噪声和冗余信息,从而提高数据的质量。
特征提取:PCA可以用来提取数据的主要特征,从而帮助分类和聚类等任务。
缺点:
信息损失:PCA是一种无监督学习算法,它通过最大化方差来选择主成分,但在降维过程中可能会丢失一些重要信息,特别是低方差的主成分往往包含了一些有用的局部模式。
非线性问题处理困难:PCA只能处理线性关系,对于非线性关系的数据降维效果不好。
计算复杂性:PCA需要计算数据的协方差矩阵,其计算复杂性随数据维度的增加而增加,对于大规模数据集可能较为耗时。
可能不适用于稀疏数据:PCA在处理稀疏数据时效果可能不佳,因为稀疏数据的协方差矩阵难以准确估计。
主成分含义复杂:PCA得到的主成分是原始特征的线性组合,可能不易解释,特别是当数据维度较高时,主成分往往难以直观地与实际含义对应。
基于PCA实现对鸢尾花四维数据进行降维处理
数据集介绍
Iris 鸢尾花数据集是一个经典数据集,在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于(iris-setosa, iris-versicolour, iris-virginica)三种中的哪一品种。
数据内容:
sepal_len sepal_wid petal_len petal_wid label
0 5.1 3.5 1.4 0.2 0
1 4.9 3.0 1.4 0.2 0
2 4.7 3.2 1.3 0.2 0
3 4.6 3.1 1.5 0.2 0
4 5.0 3.6 1.4 0.2 0
.. ... ... ... ... ...
145 6.7 3.0 5.2 2.3 2
146 6.3 2.5 5.0 1.9 2
147 6.5 3.0 5.2 2.0 2
148 6.2 3.4 5.4 2.3 2
149 5.9 3.0 5.1 1.8 2
代码实现
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
iris = load_iris()
Y = iris.target # 数据集标签 ['setosa', 'versicolor', 'virginica'],山鸢尾、变色鸢尾、维吉尼亚鸢尾
X = iris.data # 数据集特征 四维,花瓣的长度、宽度,花萼的长度、宽度
pca = PCA(n_components=2)
pca = pca.fit(X)
X_dr = pca.transform(X)
# 对三种鸢尾花分别绘图
colors = ['red', 'black', 'orange']
# iris.target_names
plt.figure()
for i in [0, 1, 2]:
plt.scatter(X_dr[Y == i, 0],
X_dr[Y == i, 1],
alpha=1,
c=colors[i],
label=iris.target_names[i])
plt.legend()
plt.title('PCA of IRIS dataset')
plt.show()
结果展示
横坐标代表主成分1,纵坐标代表主成分2,从数据点的分布来看,混杂在一起的数据不多,数据容易进行分类。