高维数据降维——主成分分析

一、 高维数据降维

  高维数据降维是指采取某种映射方法,降低随机变量的数量。例如将数据点从高维空间映射到低维空间中,从而实现维度减少。降维分为特征选择和特征提取两类,前者是从含有冗余信息以及噪声信息的数据中找出主要变量,后者是去掉原来数据,生成新的变量,可以寻找数据内部的本质结构特征。

  简要来说,就是通过对输入的原始数据的特征学习,得到一个映射函数,实现将输入样本映射后到低维空间中,其原始数据的特征并没有明显损失。通常新空间的维度要小于原空间的维度。目前大部分降维算法是处理向量形式的数据。

二、 主成分分析过程

  主成分分析(Principal Component Analysis,PCA)是一种最常用的线性降维方法,目标是通过某种线性投影,将高维数据映射到低维空间中,并期望在所投影的维度上数据的方差最大。PCA的降维是指经过正交变换后,形成新的特征集合,然后从中选择比较重要的一部分子特征集合,从而实现降维。这种方式并非是在原始特征中选择,所以PCA极大程度保留了原有的样本特征。

  关于PCA降维原理,请参考http://blog.codinglabs.org/articles/pca-tutorial.html

PCA降维的一般过程:

设有 m 条 n 维的数据。

①    将原始数据按列组成n行m列矩阵X

②    计算矩阵 X 中每个特征属性(n 维)的平均向量M(平均值);

③    将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值M;

④    求出协方差矩阵

⑤    求出协方差矩阵的特征值及对应的特征向量;

⑥    将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k(k<n)行组成基向量P;

⑦    Y=PX即为降维到k维后的数据;

  PCA目标是求出样本数据的协方差矩阵的特征值和特征向量,而协方差矩阵的特征向量的方向就是PCA需要投影的方向。使用样本数据向低维投影后,能尽可能的表征原始的数据。协方差矩阵可以用散布矩阵代替,即协方差矩阵*(n-1),其中n为样本的数量。

三、 案例演示

  1. 基于sklearn(python语言下的机器学习库)和numpy随机生成2个类别共40个三维空间点的样本。
mu_vec1 = np.array([0,0,0])
cov_mat1 = np.array([[1,0,0],[0,1,0],[0,0,1]])
class1_sample = np.random.multivariate_normal(mu_vec1, cov_mat1, 20).T

mu_vec2 = np.array([1,1,1])
cov_mat2 = np.array([[1,0,0],[0,1,0],[0,0,1]])
class2_sample = np.random.multivariate_normal(mu_vec2, cov_mat2, 20).T

  其中,multivariate_normal()生成多元正态样本分布,参数分别为设定的样本均值向量,协方差矩阵,每个类别数量为20个。生成的两个类别class1_sample和class2_sample为三维样本数据,即样本数据的特征数量为3个。可视化结果如下:

  2. 下面利用PCA将其投射到二维空间,查看其分布情况。计算40个点在3个维度上的平均向量,首先将两个类别的数据合并到all_samples中,然后计算平均向量:

all_samples = np.concatenate((class1_sample, class2_sample), axis=1)
mean_x = np.mean(all_samples[0,:])
mean_y = np.mean(all_samples[1,:])
mean_z = np.mean(all_samples[2,:])

  计算平均向量mean_x,mean_y,mean_z,然后基于平均向量计算散布矩阵,方法如下:,其中m为计算的平均向量;所有向量与m的差值经过点积并求和后即可获得散布矩阵的值:

scatter_matrix = np.zeros((3,3))
for i in range(all_samples.shape[1]):
    scatter_matrix += (all_samples[:,i].reshape(3,1) - mean_vector).dot((all_samples[:,i].reshape(3,1) - mean_vector).T)

  应用numpy库内置的np.linalg.eig(scatter_matrix)方法计算特征向量和特征值。此外,也可以利用numpy.cov()方法计算协方差矩阵求解:

# 由散布矩阵得到特征向量和特征值
eig_val_sc, eig_vec_sc = np.linalg.eig(scatter_matrix)

# 由协方差矩阵得到特征向量和特征值
eig_val_cov, eig_vec_cov = np.linalg.eig(cov_mat)

  得到3个维度的特征值(eig_vec_sc)和3个维度的特征向量(eig_val_sc)。以平均向量为起点,绘出特征向量,可以看到特征向量的方向,这个方向确定了要进行转化的新特征空间的坐标系。结果如下:

  3. 按照特征值和特征向量进行配对,并按照特征值的大小从高到低进行排序,由于需要将三维空间投射到二维空间中,选择前两个特征值-特征向量作为坐标,并构建2*3的特征向量矩阵W 。原来空间的样本通过与此矩阵相乘,使用公式:的方法将所有样本转换到新的空间中。结果如下:

  4.结论:

  这种变换并没有改变各样本之间的关系,只是应用了新的坐标系。在本例中是将三维空间降维到二维空间,如果有一个n 维的数据,想要降到k维,则取前k个特征值对应的特征向量即可。

  缺点:当数据量和数据维度非常大的时候,用协方差矩阵的方法解PCA会变得很低效。解决办法是使用奇异值分解(SVD)。

原文地址:https://www.cnblogs.com/wyr-123-wky/p/11080408.html

时间: 2024-11-05 22:53:03

高维数据降维——主成分分析的相关文章

数据降维——主成分分析(PCA)

在数据挖掘过程中,当一个对象有多个属性(即该对象的测量过程产生多个变量)时,会产生高维度数据,这给数据挖掘工作带来了难度,我们希望用较少的变量来描述数据的绝大多数信息,此时一个比较好的方法是先对数据进行降维处理.数据降维过程不是简单提取部分变量进行分析,这样的方式法当然会降低数据维度,但是这是非常不可取的方式(不专业一点,可以称之为"丢维"),违背了"降维"的含义. 尽管我们并不确定不同变量之间是否一定有关系,但除非有确定的依据,我们最好还是猜测是有关系的,先看一个

流形学习-高维数据的降维与可视化

1.流形学习的概念 流形学习方法(Manifold Learning),简称流形学习,自2000年在著名的科学杂志<Science>被首次提出以来,已成为信息科学领域的研究热点.在理论和应用上,流形学习方法都具有重要的研究意义. 假设数据是均匀采样于一个高维欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低维流形结构,即找到高维空间中的低维流形,并求出相应的嵌入映射,以实现维数约简或者数据可视化.它是从观测到的现象中去寻找事物的本质,找到产生数据的内在规律. 以上选自百度百科 简单地理解

数据降维方法小结

原文:http://blog.csdn.net/yujianmin1990/article/details/48223001 数据的形式是多种多样的,维度也是各不相同的,当实际问题中遇到很高的维度时,如何给他降到较低的维度上?前文提到进行属性选择,当然这是一种很好的方法,这里另外提供一种从高维特征空间向低纬特征空间映射的思路. 数据降维的目的 数据降维,直观地好处是维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及无用信息的摈弃. 数据降维的方法 主要的方法是线性映射和非线性

初识PCA数据降维

PCA要做的事降噪和去冗余,其本质就是对角化协方差矩阵. 一.预备知识 1.1 协方差分析 对于一般的分布,直接代入E(X)之类的就可以计算出来了,但真给你一个具体数值的分布,要计算协方差矩阵,根据这个公式来计算,还真不容易反应过来.网上值得参考的资料也不多,这里用一个例子说明协方差矩阵是怎么计算出来的吧. 用matlab计算这个例子 z=[1,2;3,6;4,2;5,2] cov(z) ans = 2.9167 -0.3333 -0.3333 4.0000 可以看出,matlab计算协方差过程

【深度学习】数据降维方法总结

引言: 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式. y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的).f可能是显式的或隐式的.线性的或非线性的. 目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据.之所以使用降维后的数据表示是因为:①在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应

Stanford机器学习---第十讲. 数据降维

本文原始地址见http://blog.csdn.net/abcjennifer/article/details/8002329,在此添加了一些自己的注释方便理解 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.内容大多来自

Coursera《machine learning》--(14)数据降维

本笔记为Coursera在线课程<Machine Learning>中的数据降维章节的笔记. 十四.降维 (Dimensionality Reduction) 14.1 动机一:数据压缩 本小节主要介绍第二种无监督学习方法:dimensionality reduction,从而实现数据的压缩,这样不仅可以减少数据所占磁盘空间,还可以提高程序的运行速度.如下图所示的例子,假设有一个具有很多维特征的数据集(虽然下图只画出2个特征),可以看到x1以cm为单位,x2以inches为单位,它们都是测量长

数据降维--低秩恢复

数据降维--低秩恢复 在实际的信号或图像采集与处理中,数据的维度越高, 给数据的采集和处理带来越大的限制.例如,在采集三维或四维(三个空间维度再加上一个频谱维度或一个时间维度) 信号时,往往比较困难.然而,随着数据维数的升高,这些高维数据之间往往存在较多的相关性和冗余度.信号的维度越高,由于数据本身信息量的增长比数据维度增长慢得多,也就使得数据变得越冗余.一个明显的例子就是,视频信号要比单幅图像的可压缩的空间大得多. 例如,对于一幅图像而言,其像素间的相关性表现在图像在某个变换域的系数是稀疏分布

数据降维技术(1)—PCA的数据原理

PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维.网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理.这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么. 当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导.希望读者在