大家好,欢迎来到IT知识分享网。
目录
一、PCA算法
1. PCA算法介绍
PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可以发现更便于人理解的特征,加快对样本有价值信息的处理速度,此外还可以应用于可视化(降到二维)和去噪。基本原理是通过线性变换将原始数据投影到新的坐标系,使得投影后的数据方差最大。 PCA算法所要达到的目标是,降维后的数据所损失的信息量应该尽可能的少。
2. PCA算法的原理
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
先假设用数据的两个特征画出散点图:
如果我们只保留特征1或者只保留特征2。那么此时就有一个问题,留个哪个特征比较好呢?
通过上面对两个特征的映射结果可以发现保留特征1(右面)比较好,因为保留特征1,当把所有的点映射到x轴上以后,点和点之间的距离相对较大,也就是说,拥有更高的可区分度,同时还保留着部分映射之前的空间信息。
那么如果把点都映射到y轴上,发现点与点距离更近了,这不符合数据原来的空间分布。所以保留特征1相比保留特征2更加合适,但是这是最好的方案吗?
将所有的点都映射到一根拟合的斜线上,从二维降到一维,整体和原样本的分布并没有多大的差距,点和点之间的距离更大了,区分度也更加明显。
如何找到让样本间距最大的轴?
一般,会使用方差(Variance)来定义样本之间的间距:
3. PCA求解步骤
输入m个样本,特征数为n的数据集:
记样本集为矩阵X:
其中每一行代表一个样本,每一列代表一个特征,列号表示特征的维度,共n维。
输出降维后的样本集:
具体步骤:
① 对矩阵去中心化得到新矩阵X,即每一列进行零均值化,也即减去这一列的均值
所求矩阵X仍为
② 计算去中心化的矩阵X的协方差矩阵


③ 对协方差矩阵C进行特征分解,求出协方差矩阵的特征值

④ 将特征向量按对应特征值从左到右按列降序排列成矩阵,取前k列组成矩阵W,即
⑤ 通过

4. PCA算法的降维准则
- 最近重构性:样本集中所有点,重构后的点距离原来的点的误差之和最小。
- 最大可分性:样本在低维空间的投影尽可能分开。
二、PCA算法的代码实现
import numpy as np import matplotlib.pyplot as plt X=np.empty((100,2)) X[:,0]=np.random.uniform(0,100,size=100) X[:,1]=0.6*X[:,0]+3+np.random.normal(0,10,size=100) plt.scatter(X[:,0],X[:,1]) #对数据进行中心化处理:减去每个特征的均值 def demean(X): return X-np.mean(X,axis=0) X_demean=demean(X) #保存中心化后的数据 plt.figure(2) plt.scatter(X_demean[:,0],X_demean[:,1]) #定义目标函数:数据在投影到方向 w 上时的方差 def f(w,X): return np.sum((X.dot(w)2))/len(X) #目标函数关于参数 w 的梯度 def df_math(w,X): return X.T.dot(X.dot(w))*2/len(X) def direction(w): return w / np.linalg.norm(w) def gradient_ascent(df, X, initial_w, eta, n_iters = 1e4, epsilon=1e-8): w = direction(initial_w) cur_iter = 0 while cur_iter < n_iters: gradient = df(w, X) last_w = w w = w + eta * gradient w = direction(w) # 注意1:每次求一个单位方向 if(abs(f(w, X) - f(last_w, X)) < epsilon): break cur_iter += 1 return w initial_w = np.random.random(X.shape[1]) # 注意2:不能用0向量开始 eta = 0.001 w = gradient_ascent(df_math, X_demean, initial_w, eta) plt.figure(3) plt.scatter(X_demean[:,0], X_demean[:,1]) plt.plot([0, w[0]*50], [0 , w[1]*50], color='r')
原始数据散点图:
中心化之后的数据散点图:
主成分的方向(图中红色直线):
三、PCA算法优缺点
优点:
- 降维效果显著: PCA通过找到数据中方差最大的方向,能够在保留大部分信息的同时实现数据的降维,去除冗余信息,提高了计算效率。
- 去相关性: PCA通过选择特征值较大的特征向量,实现了数据的去相关性,新的特征之间尽可能地不相关,有助于减少多重共线性对模型的影响。
- 可解释性: PCA的结果是一组相互正交的主成分,这些主成分能够更好地反映数据的主要结构,具有较好的可解释性。
- 适用性广泛: PCA不仅可以用于降维,还可以用于特征提取、数据可视化等多个领域,是一种通用的数据分析工具。
缺点:
- 线性关系假设: PCA基于线性变换,假设数据是线性相关的。对于非线性关系较强的数据,PCA可能不够有效,需要使用非线性降维方法。
- 计算复杂度: 在计算协方差矩阵和特征值分解时,PCA的计算复杂度较高,特别是对于大规模数据集。近年来有一些基于随机采样的PCA方法用于加速计算。
- 特征值分解有局限性,比如变换的矩阵必须是方阵。
- 在非高斯分布情况下,PCA方法得出的主元可能并不是最优的。
- 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118024.html








