原文网址:https://blog.csdn.net/sunshine_in_moon/article/details/51513880.转载主要方便随时可以查看,如有版权要求请及时联系。

相信大家对PCA并不陌生,但是PCA的本质你是否了解呢?今天就给大家简单讲讲,也是自己对PCA的一个巩固。博客中使用的图片来自七月算法的程博士的PPT,在此感谢程博士课上的耐心讲解。

1、特征值个特征向量

我相信大家对于这个式子非常熟悉,但是你真正的理解这个式子了吗?特征向量和特征值到底有什么意义呢?说实话,在听程博士的课之前我一直迷惑,不过现在懂了。

首先,我们要明确一个矩阵和一个向量相乘有什么意义?从图中我们可以看出一个矩阵和一个向量相乘的意义在于对该向量做个旋转或伸缩变换。从图中我们又发现一个矩阵和该矩阵的非特征向量相乘是对该向量的旋转变换;一个矩阵和该矩阵的特征向量相乘是对该向量的伸缩变换。那一个实数和一个向量相乘有什么意义呢?这个我们很清楚是对一个向量的伸缩变换。

发现了没?一个矩阵和一个向量相乘与一个实数和一个向量相乘的联系找到了----“对该向量伸缩变换”。

通过以上分析,我们就明白了特征值和特征向量是什么了?特征向量就是一个在矩阵A的变换下没有旋转只是伸缩变换,那到底伸缩了多少倍呢?伸缩了“特征值”倍。

2、看几条特征值分解的性质

重点在下面

我们发现一个矩阵经过特征值分解,最后可以变成一个特征值和特征向量相乘后累加的情况。既然是累加,那么加数就一定有大有小,因此一定可以对每项加数排序。我们思考一下,如果有一加数相比于其他加数非常小,我们能不能将这个加数省去,这样对最后的结果影响不是很大。

3、PCA的本质

(1)对X矩阵的说明,矩阵的每一列看成是一个样本,因此又n样本,每个样本有两个属性a,b.

(2)对协方差的几点说明:

(2.1)协方差的计算公式如图中所示

(2.2)协方差的意义,这曾经是一直困挠我的问题。协方差的意义是计算元素之间的相关性(相关程度)。如图中所示,图中的协方差计算的是特征a和特征b之间即自身的相关性。我们发现主对角线是自相关性,自己和自己肯定相关性最大,副对角线是互相关性,即特征a和特征b的相关性。(具体的我们可以去仔细看看协方差的计算就明白了)

(3)PCA的目标就是使协方差矩阵的主对角线的值尽可能的大,副对角线上的值尽可能的小,最好为0.为什么呢?我们上面已经说明,协方差的意义是衡量计算元素之间的相关性,如果我让副对角线的值为0,也就说明了特征a和特征b之间相关性为0,无相关性了。这也就是我们经常听到的PCA具有去相关性的作用。

可能有人又会问为什么要去除特征之间的相关性呢?比如在特征中有两个特征a,b,我们已知a+b=1,如果我们的样本中已经知道特征a的值,那么我们一定知道特征b的值,那我们还要特征b干嘛呢?这就是所谓的特征冗余。去除特征的相关性就是去除特征b,使保留下来的特征尽量无相关性。少量特征时,我们看不出去相关性的优势。想想一下,如果我们的特征有1亿维,而且这些特征的相关性非常高,那我们的很多计算都是多余的,这样会浪费大量的时间。所以我们需要利用PCA进行去相关性。

4、原矩阵的变换

上面我们提到过PCA的目标是使X的协方差矩阵的主对角线尽可能大,副对角线尽可能的小,甚至为0.那么我们怎样做呢?如果我们不能直接对X矩阵操作,那我们能不能对X变化后的矩阵进行操作呢?

从上图我们可以看出,首先对X矩阵进行转换,然后计算Y矩阵的协方差,如何是的Y矩阵的协方差是一个对角阵呢?为什么要弄成一个对角阵呢?对角阵只有主对角线上有值,其他地方为0.这正好符合PCA的目标,是协方差的主对角线上的值尽量大,其他地方的值为0.

U是X矩阵的特征向量矩阵,是特征值组成的对角阵,所以如果我们令,那么我们就可以得到,这样我们用对X矩阵变换后X中的特征间的相关性就达到了最低。

5、PCA降维

前面说的是PCA的去相关性,那怎么用PCA进行降维呢?我们再次回到下面这张图

我们发现A矩阵经过特征值分解后,最终得到一个累加形式,如果我们对特征值进行排序,省略的掉值很小的部分,这样特征值的个数减小了,那么矩阵会减小,相应的矩阵U和也会减小(维度上),这样我们我们返代回去求得A矩阵维度也会减小,这样就降维的目的。

6、简单实例

第一步,根据协方差公式计算X矩阵的协方差;

第二步,计算协方差的特征值和特征向量,对特征值进行从大到小排序,得到  ,特征向量矩阵

U=[U1,U2],,所以,这里的Q并没有错,因为有可知U应该是

第三步,降维,由于,所以我们选择,所以我们选择Q的第一行作为我们最终的Q值,用此Q值与X矩阵相乘得到Y矩阵,Y矩阵就是我们最终想得到的既去相关性又降维的矩阵,去相关性是因为我们找到了一个Q是的Y的协方差矩阵是个对角阵,降维是Q并非原始的特征向量矩阵,而是经过降维后的特征向量矩阵,这样和X相乘后将X降维。

讲到这里,PCA的本质就算讲完了。很抱歉,这篇博客是分开写,睡了一觉后脑子不好使了。后半部分写着写着自己也有点糊涂了,如果有的地方不对望请指正,非常感谢!

【转】主成分分析(PCA)的更多相关文章

  1. 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening

    主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通过PCA降维,我们能够有效的降低数据的维度,加快运算速度.而白化就是为了使得每个特征能有同 ...

  2. 线性判别分析(LDA), 主成分分析(PCA)及其推导【转】

    前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA ...

  3. 降维(一)----说说主成分分析(PCA)的源头

    降维(一)----说说主成分分析(PCA)的源头 降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps --------------- ...

  4. 主成分分析PCA(转载)

    主成分分析PCA 降维的必要性 1.多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯. 2.高维空间本身具有稀疏性.一维正态分布有68%的值落于正负标准差之 ...

  5. 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

  6. 一步步教你轻松学主成分分析PCA降维算法

    一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...

  7. 机器学习课程-第8周-降维(Dimensionality Reduction)—主成分分析(PCA)

    1. 动机一:数据压缩 第二种类型的 无监督学习问题,称为 降维.有几个不同的的原因使你可能想要做降维.一是数据压缩,数据压缩不仅允许我们压缩数据,因而使用较少的计算机内存或磁盘空间,但它也让我们加快 ...

  8. 主成分分析(PCA)原理及推导

    原文:http://blog.csdn.net/zhongkejingwang/article/details/42264479 什么是PCA? 在数据挖掘或者图像处理等领域经常会用到主成分分析,这样 ...

  9. K-L变换和 主成分分析PCA

    一.K-L变换 说PCA的话,必须先介绍一下K-L变换了. K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换.它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hot ...

  10. 05-03 主成分分析(PCA)

    目录 主成分分析(PCA) 一.维数灾难和降维 二.主成分分析学习目标 三.主成分分析详解 3.1 主成分分析两个条件 3.2 基于最近重构性推导PCA 3.2.1 主成分分析目标函数 3.2.2 主 ...

随机推荐

  1. Web漏洞扫描-AWVS

    Web漏洞扫描-AWVS 一.AWVS概述 二.功能以及特点 三.AWVS界面 四.AWVS使用 相关优质博文: CSDN:帽子不够白:WEB渗透测试之三大漏扫神器 一.AWVS概述 Acunetix ...

  2. 图的深度优先遍历算法(DFS)

    搜索算法有很多种,本次文章主要分享图(无向图)的深度优先算法.深度优先算法(DFS)主要是应用于搜索中,早期是在爬虫中使用.其主要的思想有如下: 1.先访问一个节点v,然后标记为已被访问过2.找到第一 ...

  3. WPF 之 INotifyPropertyChanged 接口的使用 (一)

    一.INotifyPropertyChanged 的基本概念 ​ INotifyPropertyChanged 的作用:通知客户端属性值已经更改.详细信息见:INotifyPropertyChange ...

  4. c++中几种swap

    在c与c++中,有多种办法可以通过函数交换传入的两数的值,但有容易有一些问题产生,因而本文将几种交换方式及容易出错的点进行了分类. 1.传引用这是c++中最常见方式如下: int swap1 (int ...

  5. Codeforces1248F. Catowice City

    题意:1e6个人每人有一只猫 每个人认识自己的猫 现给出一些关系表示一个人认识某只猫 要选出一些人和一些猫 使得每个人都不认识选出来的猫 且人+猫=n 题解:答案肯定是 一个人的集合和一个猫的集合 那 ...

  6. Codeforces Round #651 (Div. 2) D. Odd-Even Subsequence(二分)

    题目链接:https://codeforces.com/contest/1370/problem/D 题意 给出一个含有 $n$ 个数的数组 $a$,从中选出 $k$ 个数组成子序列 $s$,使得 $ ...

  7. poj 2318TOYS

    poj 2318(链接) //第一发:莽写(利用ToLefttest) #include<iostream> #include<algorithm> #include<c ...

  8. Codeforces Round #540 (Div. 3) B. Tanya and Candies (后缀和)

    题意:有\(n\)个数,你可以任意去除某个位置的元素然后得到一个新数组,使得新数组奇数位和偶数的元素相等,现在问你有多少种情况合法. 题解:先求个后缀和,然后遍历,记录奇数和偶数位置的前缀和,删去\( ...

  9. Codeforces Gym-102219 2019 ICPC Malaysia National E. Optimal Slots(01背包+输出路径)

    题意:给你一个体积为\(T\)的背包,有\(n\)个物品,每个物品的价值和体积都是是\(a_{i}\),求放哪几个物品使得总价值最大,输出它们,并且输出价值的最大值. 题解:其实就是一个01背包输出路 ...

  10. tkinter 实现爬虫的UI界面

    使用python的内置模块tkinter编写了爬取51Ape网站(无损音乐的百度云链接)的UI界面 tkinter入门简单, 但同时在编写的过程中因为文档的缺少很不方便. 下面是UI界面模块的编写,由 ...