数据降维处理:PCA之特征值分解法例子解析

请点击上面公众号,免费订阅。

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!

01

回顾

这两天推送了数据降维,提取主成分的基本概念,矩阵特征值分解法获取数据的主成分的推导过程,有需要的请参考:

机器学习数据预处理:数据降维之PCA

数据预处理:PCA原理推导

今天,拿一个小例子,理解下特征值分解法求主成分的过程。

02

特征值分解法求主成分

数据预处理:PCA原理推导中我们说到,求数据 X 的 k 个主成分就是求解

这个方阵的前 k 个最大特征值对应的特征向量。

我们还是拿高三101班的数学和外语的分数,要完成排名任务时,现在要对这批数据由二维降为一维,学生们的分数为了表达和书写的方便,拿出5个样本,矩阵 X的形状为:5个样本点2列特征,

数学 外语

X = [ [108, 100],

[ 82, 85],

[75, 84],

[120, 109],

[99, 91] ]

还记得我们设定的那个X吗?长这样:

X是要按照样本点按axis = 1(列轴)排序的,所以重新将 X 变为这样:

X = [ [108, 82, 75, 120, 99], #数学成绩

[100, 85, 84, 109, 91] ] #外语成绩

画出以上5个点,找出这5个点的第一主成分方向,然后以此为轴,将5个样本投影到这个轴上,就会抓取5个样本的主要特征,这个主成分提取的矩阵分解法的操作步骤如下所示:

第一步,X的shape找对了(一般矩阵运算和经常使用的Numpy等包,看一下某个矩阵和运算后的矩阵的 shape 是调试程序,寻找bug,经常用到的。),还要把每个特征去均值,最终 X变为如下才和昨天的推导中使用的 X对应上了吧,

X = [ [ 11.2, -14.8, -21.8, 23.2, 2.2],

[ 6.2, -8.8, -9.8, 15.2, -2.8] ]

第二步,就该求方阵

了,在numpy中求得方阵为:

[ [ 1362.8,   759.8],
  [  759.8,   450.8] ]

今天有的小伙伴问我,小编,我们书上学得网上看到的都还得除以每一维元素的个数,此处等于5,为什么你这里没有除呢,是不是拉下了? 其实这里除以5,还是不除以5,都对最后的求第一主成分的方向没有任何影响吧,我们关心的是它的方向,而不是向量的大小,只要方向ok,就ok。

第三步,得到了这个方阵后,下一步该求它的特征值和对应的特征向量了吧,我们直接在numpy中求出上面协方差矩阵的特征值和对应的特征向量:

特征值有2个:[ 1792.93319541, 20.66680459]

分别对应的特征向量的矩阵如下,注意,向量一般指列向量,所以特征值1792对应的特征向量为第一列,

[[ 0.87022851, -0.49264829],

[ 0.49264829, 0.87022851] ]

第四步,选取最大特征值对应的特征向量:[0.87022851, 0.49264829],可以看到numpy给出的特征向量已经标准化(模等于1)。

第五步,我们已经求出了第一主特征对应的方向向量了,这一步自然是将数据 X 投影到这个标准化后的特征向量 fpc = [0.87022851, 0.49264829] 上,还记得我们的数据在刚开始做的转置吗,一般习惯将 X 标记为 [样本个数,特征数]的二维数组吧,但是在此处,我们为了选取第一主成分向量而转置了吧,我们还是再回到熟悉的节奏上吧,投影上次说过了,不就是点乘特征向量标记的主轴吗,因此借用numpy的表示:

(X.T).dot(fpc .T)

= [ 12.80097873, -17.21468692, -23.7989348 , 27.67755548, 0.53508751]

好了,我们成功地将一个二维数据降维成1维了吧,以上就是整个的操作步骤。

展示下[0.87022851, 0.49264829] 这个向量定出的主轴方向吧,可以看到这5个点投影到这个新轴上,看着就是散的最开的方向。

03

总结和展望

至此,介绍完了利用矩阵分解法选取数据的主成分的背景,原理,例子解析。

还有一种方法可以用来选取数据的主成分,也是应用非常广泛,它就是奇异值分解获取数据的主成分,明天阐述下奇异值分解的相关理论和如何做数据降维。

原文发布于微信公众号 - 算法channel(alg-channel)

原文发表时间:2017-12-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

50行PyTorch代码实现生成对抗网络(GANs)

【导读】这是一份非常简单的PyTorch实现GAN教程和代码。文中另附有TensorFlow实现版本。

19640
来自专栏肖洒的博客

彩色图像中的人脸检测

色彩模型vs色彩空间 要解开YCbCr色彩空间这个结,色彩模型(color model)和色彩空间(color space)的区别必须要理解。简单来说两者的关系...

13020
来自专栏目标检测和深度学习

目标检测入门(四):特征复用、实时性

文章结构 本文的第一部分关注检测模型的头部部分。对与每张图片,深度网络其实是通过级联的映射获得了在某一流形上的一个表征,这个表征相比原图片更有计算机视角下的语义...

42270
来自专栏新智元

计算机视觉中,目前有哪些经典的目标跟踪算法?

【新智元导读】这篇文章将非常详细地介绍计算机视觉领域中的目标跟踪,尤其是相关滤波类方法,分享一些作者认为比较好的算法。 相信很多来这里的人和我第一次到这里一样,...

920100
来自专栏大数据文摘

R: 学习Gradient Boosting算法,提高预测模型准确率

247110
来自专栏机器之心

业界 | 深度学习与XGBoost在小数据集上的测评,你怎么看?(附源码)

选自Github 作者:Max Brggen 机器之心编译 参与:蒋思源 近来,部分机器学习从业者对深度学习不能训练小数据集这一观点表示怀疑,他们普遍认为如果深...

37270
来自专栏专知

【NLP专题】斯坦福CS224n课程笔记03:词向量表示(2)——深入探究词向量

24110
来自专栏和蔼的张星的图像处理专栏

暗通道去雾算法原理及实现

基本原理来源于何凯明大神的CVPR09的论文Single Image Haze Removal Using Dark Channel Prior

1K30
来自专栏企鹅号快讯

使用深度学习自动识别限速标志:这里有一份Keras和TensorFlow教程

? 原文来源:Medium 作者:Imaad Mohamed Khan 「雷克世界」编译:嗯~阿童木呀、多啦A亮 在我来到德国之前,我对德国道路上没有车速限制...

42470
来自专栏机器学习算法与Python学习

机器学习(4)之线性判别式(附Python源码)

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 LDA是什么? 线性判别式分析(Li...

42090

扫码关注云+社区

领取腾讯云代金券