大家好,欢迎来到IT知识分享网。
这个是在研一的概率论课上做的实验报告,PCA算法分析,对降维进行了一定程度的了解,并用PCA实现降维,具体语言是Python。
第一章 概率论与随机过程在降维中的应用——PCA算法分析
1.1 PCA背景
1.1.1降维的意义
在大数据集上进行复杂的分析和挖掘需要很长的时间,数据降维产生更小但保持数据完整性的新数据集,在降维后的数据集上进行分析和挖掘将更有效率
数据降维的意义:
1)降低无效、错误的数据对建模的影响,提高建模的准确性。
2)少量且具有代表性的数据将大幅缩减数据挖掘所需要的时间。
3)降低存储数据的成本。
1.1.2降维的作用
- 降低时间复杂度和空间复杂度
- 节省了提取不必要特征的开销
- 去掉数据集中夹杂的噪声
- 较简单的模型在小数据集上有更强的鲁棒性
- 当数据能有较少的特征进行解释,我们可以更好的解释数据,使得我们可以提取知识。
- 实现数据可视化
1.1.3降维的方法
降维方法分为线性和非线性降维,非线性降维又分为基于核函数和基于特征值的方法。如图1-1所示。
1、线性降维方法:PCA 、ICA LDA、LFA、LPP(LE的线性表示)
2、非线性降维方法:
(1)基于核函数的非线性降维方法:KPCA 、KICA、KDA
(2)基于特征值的非线性降维方法(流型学习):ISOMAP、LLE、LE、LPP、LTSA、MVU
图1-1 降维方法
1.2 PCA原理
主成分分析(Principal Component Analysis,PCA):主成分分析是一种用于连续属性的数据降维方法,它构造了原始数据的一个正交变换,新空间的基地去除了原始空间基底下数据的相关性,只需要使用少数新变量就能够解释原始数据中大部分变量。在应用中通常是选出比原始变量个数少,能够解释大部分数据中的变量的几个新变量,即所谓的主成分,来代替原始变量进行建模。通过线性变化,将原始数据集变化为一组各维度线性无关的表示。
PCA把原先的n个特征用数目更少的n’个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的n’个特征互不相关。
例如将三维空间的物体降维至二维空间,如图1-2所示。
图1-2 降维示例
1.3 PCA算法流程
1.3.1 PCA推导
首先将原特征空间的样本点表示为: xi ,并认为其已经中心化。样本空间中的所有向量可构成矩阵X。
将降维后的特征空间中的投影点表示为:WTxi ,W=(w1, w2 , …. , wd),其中W为投影变换后的新的坐标系,wi是标准正交基向量。
则投影后样本点的方差表示为:1ni=1n(WTxi )2 (1)
公式(1)可将矩阵的乘法展开写成: 1ni=1n(WTxi)(WTxi)T (2)
去掉括号为: 1ni=1nWTxixiTW (3)
由于W与加和符号无关,故提出来: 1nWT (i=1nxixiT)W (4) 可以将公式(4)写成所有样本点组成的矩阵相乘: 1nWT (XXT)W (5)
建立目标函数: J(W)=WT XXTW ,添加W为单位向量的约束条件:WTW=1
对方差进行拉格朗日乘子法:lw=WT XXTW-λ(WTW-1),并对w求偏导: ∂l(w)∂w=0 è XXTW =λW
对协方差矩阵XXT进行特征值分解,最大特征值λ1对应方差,特征向量w1为第一主成分的方向。
1.3.2 PCA算法流程
PCA |
输入:n维的样本集D={ 输出:降到n’ 维的样本集D’ ; 1: 对所有样本进行中心化:xi←xi–1mi=1mxi ; 2: 计算所有样本的协方差矩阵 XXT ; 3: 对协方差矩阵XXT 做特征值分解 ; 4: 取出最大的n’ 特征值对应的特征向量 w1 ,w2 ,…, w n’ 将其标准化,组成新的特征向量矩阵W ; 5: 对于每一个样本xi ,转化为新样本 zi =WTxi ; 6: Return D’ ={ |
1.4 PCA应用实例
1.4.1 普通数据降维
原样本为二维空间上的数据,如图1-3所示。
图1-3 二维空间的样本数据
实验环境为:Win10,RAM大小:8G ,CPU:i5-7200U,代码语言为Python,运行环境:CMD控制台窗口。
实验代码如下:
import numpy as np
import matplotlib.pyplot as plt
data=np.array([[2.5,2.4],
[0.5,0.7],
[2.2,2.9],
[1.9,2.2],
[3.1,3.0],
[2.3,2.7],
[2.0,1.6],
[1.0,1.1],
[1.5,1.6],
[1.1,0.9]])
plt.plot(data[:,0],data[:,1],'*')
meandata=np.mean(data,axis=0) #计算每一列的平均值
data=data-meandata #均值归一化
covmat=np.cov(data.transpose()) #求协方差矩阵
eigVals,eigVectors=np.linalg.eig(covmat) #求解特征值和特征向量
pca_mat=eigVectors[:,-1] #选择第一个特征向量
pca_data=np.dot(data,pca_mat)
plt.show()
print(pca_data)
降维后的结果为一维数据,[-0.82797019 1.77758033 -0.99219749 -0.27421042 -1.67580142 -0.9129491 0.09910944 1.14457216 0.43804614 1.22382056],结果如图1-4所示。
图1-4 运行结果
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15311.html