资源经验分享【机器学习】数据降维

【机器学习】数据降维

2019-12-10 | |  66 |   0

原标题:【机器学习】数据降维

原文来自:CSDN      原文链接:https://blog.csdn.net/qq_41898761/article/details/103413531


数据降维大纲

一、数据降维的简介
二、PCA的数学原理
三、PCA使用方法及例子
四、其他降维算法

一、数据降维简介

1.为什么要进行降维?

在处理现实问题时,我们会发现大部分数据集的维度都高达成百乃至上千。但在实际应用中,有用信息却并不需要那么高的维度,而且每增加一维所需的样本个数呈指数级增长,我们通常没有那么多样本。于是高纬度下就会造成数据样本稀疏和距离计算困难等「维数灾难」。于是不难得出数据降维的优点有:

  • 降低算法计算运算成本

  • 去除噪音

  • 使数据可视化

2.数据降维的方法
a.jpg
线性/非线性
线性降维是指通过降维所得到的低维数据能保持高维数据点之间的线性关系。

监督/非监督
监督式和非监督式学习的主要区别在于数据样本是否存在类别信息。非监督降维方法的目标是在降维时使得信息的损失最小;监督式降维方法的目标是最大化类别间的辨别能力。

全局/局部
局部方法仅考虑样本集合的局部信息,即数据点与临近点之间的关系。全局方法不仅考虑样本几何的局部信息,还考虑样本集合的全局信息,及样本点与非临近点之间的关系。

二、PCA的数学原理

先提出一个问题:如何把三维的数据降成二维的?
01.png
找到一个二维平面将数据投射到平面上,用新的x1’,x2’表示。要求该平面能尽量接近原始数据信息(由于总是不可避免的会丢失一些信息,所以这也是PCA的缺点)。

启发:通过变化坐标轴使维度降低。 那么该如何变化坐标轴?

由线性代数的知识可以通过基向量实现变换,于是我们要解决的问题变成为:如何选择K个基向量,使N维向量降到K维向量并能尽可能的保存多的信息?

数据中包含信息多少我们可以这样理解-----信息在差异中存在,全是相同的东西即使量再多,信息量也很少。

  • 方差
    反映数据离散程度。我们希望的是投影后的投影值尽可能分散,所以方差越大越好。

  • 协方差
    反映的是两个随机变量的相似程度。两个数据如果有相关性的话,就必然存在重复表达的信息,所以最后我们要使得变换后数据的协方差为0。
    (要达到协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。)

降维的指标与方差和协方差有关,因此,可将两者统一表示为协方差矩阵。
03.png优化目标:选择K个基,使N维向量降到K维向量后,新K维向量的方差最大,协方差为0。 设原始数据集为X,对应的协方差矩阵为C,而P是一组基按行组成的矩阵(基矩阵),Y是X对P做基变换后的数据集Y=PX,Y的协方差矩阵为D。
07.pngD是对角矩阵,C是对称矩阵。优化目标变成寻找一个矩阵P,满足PCP^T是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

由对称矩阵对角化可知,P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。

三、PCA使用方法及例子

#coding=utf-8
import numpy as np
from sklearn.decomposition import PCA

X = np.array([[-1,2,66,-1], [-2,6,58,-1], [-3,8,45,-2], [1,9,36,1], [2,10,62,1], [3,5,83,2]])  #导入数据,维度为4
pca = PCA(n_components=2)   #降到2维
pca.fit(X)                  #训练
newX=pca.fit_transform(X)   #降维后的数据
# PCA(copy=True, n_components=2, whiten=False)
print(pca.explained_variance_ratio_)  #输出贡献率
print(newX)                  #输出降维后的数据

参数解释:

  1. n_components:  我们可以利用此参数设置想要的特征维度数目,可以是int型的数字,也可以是阈值百分比,如95%,让PCA类根据样本特征方差来降到合适的维数,也可以指定为string类型,MLE。

  2. copy: bool类型,TRUE或者FALSE,是否将原始数据复制一份,这样运行后原始数据值不会改变,默认为TRUE。

  3. whiten:bool类型,是否进行白化(就是对降维后的数据进行归一化,使方差为1),默认为FALSE。如果需要后续处理可以改为TRUE。

  4. explained_variance_: 代表降维后各主成分的方差值,方差值越大,表明越重要。

  5. explained_variance_ratio_: 代表各主成分的贡献率。

  6. inverse_transform(): 将降维后的数据转换成原始数据,X=pca.inverse_transform(newX)。

结果分析:
[0.95713353 0.03398198]
[[  7.96504337   4.12166867]
[ -0.43650137   2.07052079]
[-13.63653266   1.86686164]
[-22.28361821  -2.32219188]
[  3.47849303  -3.95193502]
[ 24.91311585  -1.78492421]]
第一行为各主成分的贡献率,可以看出第一个特征占了很大比重 ,后面几行是降维后的数据。

四、其他降维算法

1.线性判别分析(LDA)
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
05.png
2. 核主成份分析 KCPA
基于核函数的主成分分析和主成分分析的步骤是一样的,只不过用核函数替代了原来的数据。原理:通过kPCA将非线性数据映射到高维空间,在高维空间下使用标准PCA将其映射到另一个低维空间。将数据隐式映射到高维线性可分空间,利用核函数进行处理,无需知道映射函数的具体形式。
06.png
3.局部线性嵌入(LLE)
LLE属于流形学习(Manifold Learning)的一种。流形学习是一大类基于流形的框架。数学意义上的流形比较抽象,不过我们可以认为LLE中的流形是一个不闭合的曲面。这个流形曲面有数据分布比较均匀,且比较稠密的特征,有点像流水的味道。基于流行的降维算法就是将流形从高维到低维的降维过程,在降维的过程中我们希望流形在高维的一些特征可以得到保留。
b.jpg
LLE首先假设数据在较小的局部是线性的,也就是说,某一个数据可以由它邻域中的几个样本来线性表示。比如我们有一个样本x1,我们在它的原始高维邻域里用K-近邻思想找到和它最近的三个样本x2,x3,x4. 然后我们假设x1可以由x2,x3,x4线性表示,即:
在这里插入图片描述
其中,w12,w13,w14为权重系数。在我们通过LLE降维后,我们希望x1在低维空间对应的投影x′1和x2,x3,x4对应的投影x′2,x′3,x′4也尽量保持同样的线性关系,即
在这里插入图片描述
也就是说,投影前后线性关系的权重系数w12,w13,w14是尽量不变或者最小改变的。

4.等距映射算法Isomap
Isomap是一种非迭代的全局优化算法。降维的目的是找出隐藏在高维数据中的低维结构,可以降低计算的复杂性。引进了邻域图,样本只与其相邻的样本连接,他们之间的距离可直接计算,较远的点可通过最小路径算出距离,在此基础上进行降维保距。
04.png

参考和引用:
https://blog.csdn.net/Reticent_Man/article/details/82633214
https://blog.csdn.net/liuweiyuxiang/article/details/78853404
https://blog.csdn.net/yanta0/article/details/91956735
https://www.cnblogs.com/pinard/p/6266408.html?utm_source=itdadao&utm_medium=referral


免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:自动驾驶(五十三)---------浅析深度学习与自动驾驶

下一篇:sklearn贝叶斯分类器的案例

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...