机器学习——降维

15 降维

15.1 为什么需要降维?

​ (1)多余的特征会影响或误导学习器
​ (2)更多特征意味着更多参数需要调整,过拟合风险也越大
​ (3)数据的维度可能只是虚高,真实维度可能比较小
​ (4)维度越少意味着训练越快,更多东西可以尝试,能够得到更好的结果
​ (5)如果我们想要可视化数据,就必须限制在两个或三个维度上

因此,我们需要通过降维把无关或冗余的特征删掉。
降维的方法主要有

线性降维
流形学习-非线性降维
奇异值分解SVD
主成分分析
因子分析
独立成分分析
线性判别分析
降维
特征提取
特征筛选
缺失值比率
低方差滤波
高相关滤波
随机森林
反向特征消除
前向特征选择

​ 低方差滤波:方差很小,包含的信息量很少;

​ 高相关滤波:比如两个特征相关性较大,一个特征基本上可以替代另一个特征,就可以只保留一个;

​ 随机森林:可以返回特征的重要性;

​ 反向特征消除:把数据放到模型里面训练,剃掉一个特征来看看,模型的改变会不会很大;

​ 前向特征选择:选一个最重要的特征放到模型里面,然后加一个重要的特征,观察模型改变;

15.2 维度诅咒

​ 当训练实例拥有几千个甚至上百万个特征时,不仅导致训练非常缓慢,也更加难找到好的解决方案,这个问题就是维度诅咒。

​ 在现实中,我们一般可以大量减少特征的数量,其一是有些特征对于分类任务来说是无足轻重的,比如,MNIST图像中边框的白色区域像素位,另外两个相邻像素通常是高度相关的,如果将它们合成为一个像素,也不会丢失太多的信息。

​ 两种主要的数据降维方法:投影流形学习

​ 三种降维技术:PCA,Kernal PCA ,LLE。

​ 高纬度数据集很大可能是非常稀疏的:大多数训练实例可能彼此之间相聚较远。训练集的维度越高,过度拟合的风险就越大。理论上来说,通过增大训练集,使训练实例达到足够的密度,是可以解开维度的诅咒的。但是,实践中,要达到给定密度所需要的训练实例数量随着维度增加呈指数式上升。

15.2 数据降维的主要方法

15.2.1 投影

​ 实际中,训练实例在所有维度上并不是均匀分布的,许多特征几乎是不变的,有些特征是高度相关的。因此,高维空间的所有训练实例实际上(或近似)受一个低得多的低维子空间的影响。

​ 在许多情况下,子空间可能会弯曲或转动。

15.2.1 流形学习

​ d维流形学习就是n(其中,d<n)维空间中的一部分,局部类似于一个d维超平面。

15.3 降维算法—PCA

​ 主成分分析法,是一种非监督的机器学习算法,主要用于数据的降维。通过降维,可以发现更便于人类理解的特征,其他也可以用于:可视化,去噪。

​ PCA是通过抛弃携带信息量较少的纬度,保留主要的特征信息来对数据进行降维处理,思路上是使用少数几个有代表性、互不相关特征来代替原先的大量的、存在一定相关性的特征,从而加速机器学习进程。白化的目的是去掉数据之间的相关联度和令方差归一化。数据预处理方式(去均值、归一化、PCA降维)

15.3.1 什么是PCA

​ 对于一个有两个特征的数据集,如果我们用x轴表示特征1,y轴表示特征2,那么结果如下:

​ 如果降维,那么二维可以降到一维,那么数据要么是在x轴表示,要么是在y轴表示。但是会使得降维后的数据间隔变动很大,如果想保持数据之间的间隔变化最下,对于上面的数据,我们取一个斜轴,然后将其映射,这时间隔就会较小。如下图所示:

15.3.2 保留差异性

​ 将数据集投影到低维超平面之前,需要选择正确的超平面。选择保留最大差异性的轴看起来比较合理,因为它丢失的信息更少。

15.3.3 主成分

​ 主成分分析可以在训练集中识别出哪条轴对差异性的贡献度最高。

轴的数量与数据集维度数量相同。定义第i条轴的单位向量就叫作第i个主成分(PC)。

​ 主成分的方向是不稳定的:如果稍微打乱数据集,然后重新运行PCA,部分新的主成分可能指向跟原来的主成分相反的方向。但是,通常还是在同一条轴上。在某些情况下,两条主成分可能会旋转甚至互换,但是它们定义的平面还是不变。

1、如何找到主成分

​ 有一种标准矩阵分解技术,叫作奇异值分解(SVD)。它可以将训练集矩阵X分解成三个矩阵的点积 U V T U\cdot\sum\cdot V^T ,其中 V T V^T 包含我们想要的所有主成分

​ PCA假设数据围绕原点集中,所以不要忘记先将数据集中。(即,均值归0)

​ 【如何找到主成分(这个让样本间间距最大的轴)?】<—【如何定义样本间间距?】<—使用方差(Variance):在数理统计中,主要用于描述数据整体疏密的量。方差越大,代表数据之间越稀疏,方差越小,代表数据之间越紧密。
V a r ( x ) = 1 m i = 1 m ( x i x ˉ ) 2 Var(x)=\frac{1}{m}\sum_{i=1}^{m}(x_i-\bar{x})^2
​ 【解决方法】:找到一个轴,使得样本空间的所有点映射到这个轴后,方差最大。

​ 第一步:将样例的均值归为0(demean);

移动坐标轴。上面的公式就变成下面的了:
V a r ( x ) = 1 m i = 1 m x i 2 Var(x)=\frac{1}{m}\sum_{i=1}^{m}x_i^2

2、低维度投影

​ 在求出主成分之后,数据还没有实现降维,此时只是找出了训练集中所有的主成分,使用PCA降维,其实就是更换了新的坐标系。所以找出的主成分就是新的坐标系。我们将数据集投影到由前d个主成分定义的超平面上,从而将数据集的维度降到d维。

​ 要将训练集投影到超平面上,简单地计算训练集矩阵X和矩阵Wd的点积即可,Wd是包含前d个主成分的矩阵。
X d _ p r o j = X W d X_{d\_proj}=X\cdot W_d

15.4 梯度上升法求解PCA

​ 目标:求w,使得 f ( x ) = 1 m i = 1 m ( X 1 ( i ) w 1 + X 2 ( i ) w 2 + . . . + X n ( i ) w n ) 2 f(x)=\frac{1}{m}\sum_{i=1} ^{m}(X_1^{(i)}w_1+X_2^{(i)}w_2+...+X_n^{(i)}w_n)^2 最大。

​ 【注意】:

​ 1、每次求一个单位方向;
​ 2、不能用0向量初始化;
​ 3、不能使用StandardScaler标准化数据。(因为我们将数据映射到轴上本身就是要使方差最大,但是我们标准化之后,方差就为1了,方差的最大值就不存在了,在标准化的过程中将方差打掉了)

15.5 求数据的前n个主成分

​ 求出第一主成分以后,如何求出下一个主成分?

​ 数据进行改变,将数据在第一主成分上的分量去掉,在新的数据上求第一主成分。

15.6 scikit-learn中的PCA

​ 导入:from sklearn.decomposition import PCA
pca.explained_variance_ration_:解释的方差比例;

方差解释率
​ 获取每个主成分的方差解释率,它表示每个主成分对整个数据集的方差的贡献度。

选择正确数量的维度
​ 1)将靠前的主成分方差解释率依次相加,直到得到足够大比例的方差。
​ 2)将解释方差绘制成关于维度数量的函数。

PCA压缩
​ 在PCA投影上运行投影的逆变换,也可以将缩小的数据集解压缩回与原始数据集同样维度的数据集。
​ 原始数据和重建数据(压缩之后解压缩)之间的均方距离,被称为重建误差。
​ PCA逆转换,回到原始维度:
X r e c o v e r e d = X d _ p r o j W d T X_{recovered}=X_{d\_proj}\cdot W_d^T

15.7 增量PCA

​ 前面关于主成分分析法的实现,需要将整个训练集都进入内存,才能运行SVD算法。

增量主成分分析(IPCA)算法:可以将训练集分成一个个小批量,一次给IPCA算法喂一个。

15.8 在NumPy中实现PCA

​ 将数据转换成前N个主成分的步骤大致如下:

​ 1)去除平均值
​ 2)计算协方差矩阵
​ 3)计算协方差矩阵的特征值和特征向量
​ 4)将特征值从大到小排序
​ 5)保留最上面的N个特征向量
​ 6)将数据转换到上述N个特征向量构建的新空间中

发布了57 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43343803/article/details/102088370