PCA的主要目标是将特征维度变小,同时尽量减少信息损失。就是对一个样本矩阵,一是换特征,找一组新的特征来重新表示;二是减少特征,新特征的数目要远小于原特征的数目。
通过PCA将n维原始特征映射到维(k
怎么找到新的维度呢?实质是数据间的方差够大,通俗地说,就是能够使数据到了新的维度基变换下,坐标点足够分散,数据间各有区分。
上图所示的左图中有5个离散点,降低维度,就是需要把点映射成一条线。将其映射到右图中黑色虚线上则样本变化最大,且坐标点更分散,这条黑色虚线就是第一主成分的投影方向。
PCA是一种线性降维方法,即通过某个投影矩阵将高维空间中的原始样本点线性投影到低维空间,以达到降维的目的,线性投影就是通过矩阵变换的方式把数据映射到最合适的方向。
降维的几何意义可以理解为旋转坐标系,取前k个轴作为新特征。
降维的代数意义可以理解为阶的原始样本,与阶的矩阵做矩阵乘法运算(下面简记为),即得到阶的低维矩阵,这里阶的矩阵就是投影矩阵。
本次介绍从最大方差理论(最大可分性)的角度理解PCA的原理。最大方差理论主要是指投影后的样本点在投影超平面上尺量分开,即投影方差最大。其中涉及的概念如下。
1
PCA 涉及的主要问题
(1)对实对称方阵,可以正交对角化,分解为特征向量和特征值,不同特征值对应的特征向量之间止交,即线性无关。特征值表示对应的特征向量的重要程度,特征值越大,代表包含的信息量越多,特征值越小,说明其信息量越少。在等式中为特征向量,为特征值。
(2)方差相当于特征的辨识度,其值越大越好。方差很小,则意味着该特征的取值大部分相同,即该特征不带有效信息,没有区分度;方差很大,则意味着该特征带有大量信息,有区分度。
(3)协方差表示不同特征之间的相关程序,例如,考察特征x和y的协方差,如果是正值,则表明x和y正相关,即x和y的变化趋势相同,越大y越大;如果是负值,则表明x和y负相关,即x和y的变化趋势相反,x越小y越大;如果是零,则表明x和y没有关系,是相互独立的。
为计算方便,将特征去均值,设特征x的均值为,去均值后的方差为S,特征x和特征y的协方差为,设样本数为m,对应的公式分别为:
当时,表示特征x和y完全独立。
当有n个特征时,引用协方差矩阵表示多个特征之间的相关性,例如,有3个特征x、y、z,协方差矩阵为:
显然,协方差矩阵是实对称矩阵,其主对角线是各个特征的方差,非对角线是特征间的协方差,根据线性代数的原理,该协方差矩阵可以正交对角化,即可以分解为特征向量和特征值,特征向量之间线性无关,特征值为正数。
2
PCA 的优化目标
(1)构造彼此线性无关的新特征。
PCA的目标之一是新特征之间线性无关,即新特征之间的协方差为0。其实质是让新特征的协方差矩阵为对角矩阵,对角线为新特征的方差,非对角线元素为0,用来表示新特征之间的协方差0,对应的特征向量正交。
基于此目标,求解投影矩阵,具体过程如下。
不考虑降维,即维度不改变的情况下,设原始矩阵为个样本,维特征,转换后的新矩阵仍为个样本,维特征。
首先对和去均值化,为了简便,仍用和分别表示均值化的矩阵,此时的协方差矩阵为,的协方差矩阵为
接着,将阶矩阵变为阶矩阵,最简单的是对原始数据进行线性变换:,其中为投影矩阵,是一组按行组成的矩阵。将公式代人后可得:
PCA的目标之一是新特征之间的协方差为0.即为对角矩阵,根据的计算公式可知,PCA的目标就转换为:计算出,且应使得是一个对角矩阵。因为是一个实对称矩阵,所以可以进行特征分解,所求的即特征向量
(2)选取新特征。
PCA的目标之二是使最终保留的主成分,即k个新特征具有最大差异性。鉴于方差表示信息量的大小,可以将协方差矩阵C的特征值(方差)从大到小排列,并从中选取k个特征,然后将所对应的特征向量组成阶矩阵,计算出,作为降维后的数据,此时n维数据降低到了k维。
一般而言,k值的选取有两种方法。
①预先设立一个國值,例如0.95,然后选取使下式成立的最小k值:
(代表特征值)
②通过交叉验证的方式选择较好的k值,即降维后机器学习模型的性能比较好。
3
PCA 求解步骤
输入:条样本,特征数为的数据集,即样本数据,降维到的目标维数为k。记样本集为矩阵。
其中每一行代表一个样本,每一列代表一个特征,列号表示特征的维度,共维。
输出:降维后的样本集。
步骤如下。
第一步:对矩阵去中心化得到新矩阵,即每一列进行零均值化,也即减去这一列的均值,所求仍为阶矩阵。
第二步:计算去中心化的矩阵的协方差矩,即阶矩阵。
第三步:对协方差矩阵C进行特征分解,求出协方差矩阵的特征值,及对应的特征向量,即
第四步:将特征向量按对应特征值从左到右按列降序排列成矩阵,取前k列组成矩阵,即阶矩阵。
第五步,通过计算降维到k维后的样本特征,即阶矩阵。
4
PCA 实例实现
通过Python的sklearn库实现较为方便,例题通过在鸢尾花数据集上的实现PCA降维。
数据集获取地址参考:
https://archive.ics.uci.edu/ml/machine-learning-databases/iris/
通过存放鸢尾花数据集于iris.data中进行实验进行。
代码实例实现:
(1)基本库函数的导入。
importnumpy as np
importpandas as pd
fromsklearn.decomposition import PCA
frommatplotlib import pyplot as plt
(2)读取数据集,并将数据集的特征和标签分开。
df= pd.read_csv("iris.data")
#原始数据没有给定列名,需要加上
df.columns= ["sepal_len", "sepal_wid", "petal_len","petal_wid", "class"]
#把数据分成特征和标签
X= df.iloc[:, 0:4].values
y= df.iloc[:, 4].values
(3)定义降维函数PCA_sklearn(),使用sklearn库实现PCA降维功能,其中需要传递的参数是数据集和降维数。
defPCA_sklearn(data, k):
:param data:样本数据
:param k:目标维度
:return:降维后的数据data_new
pca = PCA(n_components=k) # 调用PCA函数,先实例化
pca.fit(data) # 用数据data来训练PCA模型
print("降维后的各主成分方差的贡献率:",\
pca.explained_variance_ratio_)
print("降维后的各主成分的方差值\n",
pca.explained_variance_)
print("降维后的累计贡献率\n",pca.explained_variance_ratio_.sum())
data_new = pca.transform(data) # 将数据data转换成降维后的数据
return data_new
一般在训练前,需要对数据进行标准化处理,使用sklearn库中的StandardScaler方法即可,代码如下。
fromsklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(X)
(4)调用PCA_sklearn()函数
data= PCA_sklearn(X, 2)
运行结果如下。
从结果可以看到,提取两个主成分的累计贡献率达到了0.9576,说明降维到2维后主成分的解释效果就比较好。
(5)降维后的结果可视化
上图是降维后的结果,横坐标代表主成分1,纵坐标代表主成分2,从数据点的分布来看,混杂在一起的数据不多,后续进行分类就更容易。
为与降维后的数据对比,对原始数据集取2维数据,并进行可视化。代码如下。
plt.figure(figsize=(6,4))
forlab, marker, col in zip(("Iris-setosa", "Iris-versicolor","Iris-virginica"),\
("^", "s","o"), ("blue", "red", "green")):
plt.scatter(X[y==lab, 1],
X[y==lab, 0],
label=lab,
marker=marker,
color=col)
plt.xlabel('X[1]')
plt.ylabel('X[0]')
plt.legend(loc='best')
plt.tight_layout()
plt.show()
结果如图:
上图中横坐标代表原始数据集的第一个特征,纵坐标代表第二个特征,从输出结果看,数据集并不能按类别分开,很多数据都重叠在一起。
BONUS TIME
数学建模资料、视频讲解、历年赛题
后台回复 【校苑】领取
高教社出版
数学考试分析(2022版)
整书205页
文末附电子版免费领取
话不多说!免费获取方式!
扫描下方公众号二维码,回复:考研
不是留言!不是留言!不是留言!
整理不易!各位宝子们且领且珍惜!
历年赛题的重要性
有了这个!
下一个上岸的就是你!
100G MATLAB资料
后台回复 【干货】领取
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.