专栏首页程序猿声Python AI 教学 | 主成分分析(PCA)原理及其应用

Python AI 教学 | 主成分分析(PCA)原理及其应用

1

问题导入

假如你是一家淘宝店店主,你所负责运营的淘宝店2018年全年的流量及交易情况可以看成是一组记录的集合,其中每一天的数据是一条记录,(日期,浏览量,访客数,下单数,成交数,成交金额),这是一个六维的数据,但我们可以发现,“浏览量”和“访客数”往往具有较强的相关关系,而“下单数”和“成交数”也具有较强的相关关系,如果删除其中一个指标,不会丢失太多信息。我们知道,很多机器学习算法的复杂度和数据的维数有着密切关系,甚至与维数呈指数级关联。在实际机器学习中处理成千上万甚至几十万维的情况也并不罕见,在这种情况下,机器学习的资源消耗是不可接受的,因此我们必须对数据进行降维。但降维意味着信息的丢失,不过鉴于实际数据(如上面所述的淘宝店数据)本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低,这就是我们要介绍的降维方法——PCA(主成分分析法)。

2

简介

主成分分析(Principal Component Analysis),是一种用于探索高维数据的技术。PCA通常用于高维数据集的探索与可视化,还可以用于数据压缩,数据预处理等。PCA可以把可能具有线性相关性的高维变量合成为线性无关的低维变量,称为主成分(principal components),新的低维数据集会尽可能的保留原始数据的变量,可以将高维数据集映射到低维空间的同时,尽可能的保留更多变量。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

3

数学原理

样本集 ?=?×?,表示 ,表示 ?个样例, 个样例, ?个特征维度 :

1、 首先对特征值进行归一化处理:

2、求样本集的协方差矩阵

所以C为一个n x n的矩阵

可以直观地看到,协方差矩阵C是一个对称矩阵,Cij=Cji,对角线是各个特征的方差

因为矩阵是一个实对称矩阵,所以具备实对称的特征:

1) C的不同特征值对应的特征向量是正交的;

2) C的特征值都是实数,特征向量都是实向量;

3) C可对角化,且相似对角阵上的元素即为矩阵本身特征值;

3、根据以上性质,我们可以得到个线性无关的非零特征向量e1,e2,...,en,这些特征向量构成的特征矩阵E=(e1 e2 ... en)满足:

上述的矩阵是一个对角矩阵,除了对角线有值,其他位置都是0。

对于特征矩阵X,因为可能存在大量的冗余数据,我们将它转换到另外一个特征空间,得到新的特征矩阵Z:

我们希望这个特征空间中各个特征彼此是线性无关的,也就是说各个特征向量是正交关系,那么在新的特征空间中,其协方差也应该是一个对角矩阵:

对角线是方差,其他位置是协方差,协方差为0,代表着两个向量正交。

假设特征空间转换的过程可以表达为Z=XU,矩阵D代入该表达式可以得到:

也就是说U=E,U就是矩阵C特征向量所组成的矩阵。矩阵D对角线上每个值就是矩阵C的特征值。

4、我们将D中的特征值按照从大到小,将特征向量从左到右进行排序,然后取其中前K个,经过压缩转换(Z=XU),就得到降维之后的数据矩阵Z:

X是m x n的矩阵,U是n x k的矩阵,Z是m x k的矩阵

4

算法实现

定义pca函数,并保存为py文件,文件命名pca.py:

函数介绍

(1)numpy.mean:计算沿指定轴的算术平均值

语法:

numpy.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>)

示例:

(2)numpy.cov :在给定数据和权重下,估计协方差矩阵。

语法:

numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)

示例:

(3)numpy.argsort:返回对数组进行排序的索引。

语法:

numpy.argsort(a, axis=-1, kind='quicksort', order=None)

示例:

5

应用

现有150行,5组特征的鸢尾花数据(局部如下图所示),并保存在名为“testdata.txt”的文件中。现对其用PCA方法进行降维处理,并将其降维后的数据重构后与原数据进行比较,展示PCA的全过程,帮助大家理解PCA的思想。

1、在进行PCA之前,先将最后一列文本型数据去掉,得到只包含数值型数据的矩阵,定义一个删除列操作的函数并同样的保存在前述的pca.py文件中:

2、定义一个函数将数据集中的空值用均值填满,同样地,将其保存进pca.py文件里面:

3、新建一个py文件,并调用前面构造好的pca函数:

运行结果(局部):

4、利用pca函数中数据恢复语句将降维后的数据再恢复,并将其与原始数据进行对比,以图的形式展现,先将定义好的画图函数保存在pca.py文件中:

调用函数:

运行结果:

责编 | 老薛 张钒

本文分享自微信公众号 - 程序猿声(ProgramDream)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-01

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 10分钟教你用Python爬取微博评论

    微博,想必大家都非常熟悉。人人都可以在上面发表自己的观点。到现在微博已经成为了官方和明星等“新闻发布”的第一阵地,比如前几天范冰冰宣布和李晨分手,双宋CP宣布离...

    短短的路走走停停
  • 干货 | 到底是什么算法,能让人们如此绝望?

    今天的任务是去给山顶的人家化斋,在爬山算法的帮助下,终于顺利爬到了最高点!阿弥陀佛~~⬇⬇⬇

    短短的路走走停停
  • Python 自动整理 Excel 表格

    相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋友问可否编程来减轻表格整理工作量,今儿我...

    短短的路走走停停
  • Python AI 教学 | 主成分分析(PCA)原理及其应用

    假如你是一家淘宝店店主,你所负责运营的淘宝店2018年全年的流量及交易情况可以看成是一组记录的集合,其中每一天的数据是一条记录,(日期,浏览量,访客数,下单数,...

    用户1621951
  • 推荐系统之矩阵分解模型

    最近在整理Embedding技术在推荐系统中的应用,总结了获取各类item2vec的方法,推荐系统中的矩阵分解作为解决item2vec问题初期技术方法之一,虽已...

    流川枫
  • 从机器学习学python(四) ——numpy矩阵广播及一些技巧

    从机器学习学python(四)——numpy矩阵广播及一些技巧 (原创内容,转载请注明来源,谢谢) 在学ng的深度学习微专业时,其中有几节课讲到numpy的一...

    用户1327360
  • matlab—基本操作与矩阵输入

    还有一个月就美赛了,本系列文章适用于完全没有任何matlab基础,但是有别的编程语言基础的人看,我会结合自己的理解,有的放矢的讲,不会掺杂很多废话,各位读者轻喷...

    mathor
  • 吴恩达机器学习笔记18-逆矩阵、矩阵转置

    “Linear Algebra review(optional)——Inverse and transpose”

    讲编程的高老师
  • 吴恩达机器学习笔记16-矩阵与矩阵的乘法

    “Linear Algebra review(optional)——Matrix-matrix multiplication”

    讲编程的高老师
  • 深度学习中的矩阵乘法与光学实现

    上篇笔记里(基于硅光芯片的深度学习)提到:深度学习中涉及到大量的矩阵乘法。今天主要对此展开介绍。

    光学小豆芽

扫码关注云+社区

领取腾讯云代金券