PCA(1):基础知识介绍

PCA算法思路:

        首先利用样本集及特征构建一个样本矩阵,然后利用样本矩阵计算得到一个协方差矩阵,再计算协方差矩阵的特征值和特征向量,保留特征值前k个大的对应的特征向量作为新的维度方向,再将原始样本数据转换到新的空间维度。(他非常巧妙地利用协方差矩阵来计算出样本集在不同方向上的分散程度,利用方差最大的方向作为样本集的主方向)

上述提到的k(k<n,n是n维特征,)这个k维是全新的正交特征,这k维特征称为主成分,是重新构造出来的k维特征,而不是简单的从n维特征中去除其余n-k维特征。

为什么要用到PCA:

         PCA算法是专门用来对高维数据进行降维,因此算法的核心就是在于找出数据变化的主方向和次方向。比如下图二维平面内有一些点,那么向量u1的方向可以认为是该数据的主方向,而u2是次方向。

去均值:

为什么要去均值:

         这主要是去除均值对变化的影响,减去均值后数据的信息量没有变化,即数据的区分度(方差)是不变的。如果不去均值,第一主成分,可能会或多或少的与均值有关。

归一化:

        将不同特征的数据范围归一化到同一范围中,一般做法是将每个值除以当前维的最大值。

         (将每一维特征的均值中心化,方差归一化)

对于组成的协方差矩阵求取的特征值与特征向量:

         特征值越大的特征向量,样本集在该方向上的变化越大。(因为协方差矩阵计算出来的特征值为其特征向量上的样本集的方差,当方差越大说明数据集在该特征向量方向上越分散,变化越大,所以该方向就可以用来作为数据集的主方向。)对于由特征向量组成的矩阵我们称为特征矩阵U,特征矩阵是一个正交矩阵,即满足U^{T}U=UU^{T}=I(特征向量之间相互正交,说明各特征之间相关性最小,基本接近0。独立===>不相关<===>协方差为0

计算新维度下的每个样本对应的新样本数据值:

        已经得到了数据变化的主次方向,现在需要计算样本在每个特征向量上的长度,对于原始样本x,其在特征向量u1方向上的长度为:u_{1}^{T}x

PCA具有缩放不变性:

       所有的特征分量被放大或缩小相同的倍数,PCA输出的特征向量不会发生变化。

例子分析:

       比如下边有3个维度为4的样本数据(X,Y,Z,A)首先假设XYZA之间互不相关。

样本编号 X Y Z A
1 1 1 12 30
2 90 2 13 30
3 847 3 14 30

由上边几个简单的样本我们就可以看出XYZ作为主成分,X可以作为该样本的第一主成分,因为分布比较广。

但是如果每一个维度我们都不能明显的看出他们分布的差异性,意思就是在同一个维度上每个样本之间的差值都非常小,那么我们就不能一眼看出该样本的主成分。

通过如下一些二维数据我们走一遍PCA的过程:

原始样本编号 x y
1 2.5 2.4
2 0.5 0.7
3 2.2 2.9
4 1.9 2.2
5 3.1 3.0
6 2.3 2.7
7 2 1.6
8 1 1.1
9 1.5 1.6
10 1.1 0.9

第一步:求x、y的均值。\bar{x}=1.81,\bar{y}=1.91,得到去均值之后的样本如下:

去均值后的样本个数 x y
1 0.69 0.49
2 -1.31 -1.21
3 0.39 0.99
4 0.09 0.29
5 1.29 1.09
6 0.49 0.79
7 0.19 -0.31
8 -0.81 -0.81
9 -0.31 -0.31
10 -0.71 -1.01

第二步:求x,y的协方差矩阵:

求的协方差矩阵,对角线上分别是方差,非对角线上是协方差,协方差是衡量两个变量同时变化的变化程度(协方差大于0表示,x和y若一个增另外一个也增;小于0表示一个增,一个相应的减。如果x和y是统计独立的,那么两者之间的协方差就是0;相反协方差是0并不能说明两者是独立的。而且两者协方差的绝对值越大,那么两者对彼此的影响就越大,反之越小。协方差是没有单位的量。)

第三步:求协方差的特征值和特征向量,得到

第四步:将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735178656)T。

第五步:将样本点投影到选取的特征向量上。假设样例数为m(此处是10),特征数为n(此处是2),减去均值后的样本矩阵为DataAdjust(m*n)(此处是10x2),协方差矩阵是n*n(此处是2x2),选取的k个特征向量组成的矩阵为EigenVectors(n*k)(此处是2x1)。那么投影后的数据FinalData为

FinalData(10*1) = DataAdjust(10*2矩阵) x 特征向量(-0.677873399, -0.735178656)T(此步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影)

最后将每一个去均值后的数据点与选择的k个特征向量做乘后的结果为:(10x2)与(2x1)矩阵得到(10x1)

Transformed Data(一个维度)
-0.828
1.778
-0.992
-0.274
-1.676
-0.913
-0.991
1.144
0.438
1.224

这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。

最后例子参照博客:https://blog.csdn.net/zhongkelee/article/details/44064401

热门文章

暂无图片
编程学习 ·

kafka+zookeeper消息队列

软件包提取码:u3s1 kafka: 起初是做采集日志的,和zookeeper一起才能做消息队列,可持久化。kafka broker(server): 消息中间件处理的节点 一个Kafka节点就是一个broker(server) topic = vhost -类消息 对消息进行分类主题-个类型-个主题topic可以有多个 partition = que…
暂无图片
编程学习 ·

一文详解土地增值税

在房地产开发的各个环节,所缴纳的税费不尽相同。其中在商品房销售环节需缴纳的税费比较多,土地增值税是一个主要税种,对企业来说负担比较重,涉及政策也比较复杂。如何确定土地增值税的纳税义务人,明确征税行为和范围;营改增后,土地增值税在应税收入、扣除项目金额、税款预…
暂无图片
编程学习 ·

一文看懂Chrome浏览器工作原理

转自:https://juejin.im/post/5e182a47e51d453cee48c752本文是笔者对Mario Kosaka写的inside look at modern web browser系列文章的翻译。这里的翻译不是指直译,而是结合个人的理解将作者想表达的意思表达出来,而且会尽量补充一些相关的内容来帮助大家更好地理解。这篇文章…
暂无图片
编程学习 ·

那些不常见,但却非常实用的 css 属性

作者:寒水寺一禅https://segmentfault.com/a/11900000228515431、-webkit-line-clamp可以把 块容器 中的内容限制为指定的行数。并且在超过行数后,在最后一行显示"..."这是正常的展示display: -webkit-box; /*值必须为-webkit-box或者-webkit-inline-box*/ -webkit…
暂无图片
编程学习 ·

数据表的规范

数据库的设计范式 六种范式 1. 第一范式 2. 第二范式 3. 第三范式 4. BCNF 巴斯-科德范式 5. 第四范式 6. 第五范式 完美范式 * 范式设计越高阶,冗余度越低。数据表中的键 1. 超键: 能唯一标识元组的属性集叫超键 2. 候选键:如果超键不包括多余的属性,这个超键就是候选键 …
暂无图片
编程学习 ·

力扣-算法练习(Python)

9.回文数判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例1: 输入: 121 输出: true 示例2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例3: 输入: 10 输出: fal…
暂无图片
编程学习 ·

Python爬虫入门教程 72-100 分布式爬虫初步解析-配好环境肝完一半

写在前面 最近该系列的爬虫更新比较慢了,原因是实在写不动了,70多篇博客,每一篇都是一个案例,在写好多都不是篇博客可以容纳的了,而且爬虫的技术在70多篇中都有所涉及了,但是flag既然历下了,那么就必须要把它完成,接下来进入一些稍微稍微麻烦一点的内容,第一个咱就写分…
暂无图片
编程学习 ·

Tableau制作全球电影数据分析/全球超市利润混合地图

作业5: 1、创建产地电影数量与评分(以此命名)的符号地图,处理未知位置信息,以颜色表示评分平均值,选择红绿发散,以电影数量表示圆形大小,显示产地标签,对数据进行分析。 2、使用智能显示制作连续面积图,命名为电影数量变化,以年代为横轴,电影数量为纵轴,显示标签;…
暂无图片
编程学习 ·

2. judgeSquareSum

忘记是自然选择,重要的是抽取学习方法双指针 --判断某一非负整数是否是两数平方和(easy) leecode输入:5 输出:true 5=1^2 + 2^2 思路:等于从一个有序数组找两个数平方和为target,注意的是最大值肯定小于Math.sqrt(target)public boolean judgeSquareSum(int c) {if (c < 0)…
暂无图片
编程学习 ·

数据结构的基本概念和常用术语

下面是对android数据结构的基本概念和常用术语的一些理解,大家可以了解学习一下。我收集了一些学习用的资料,其中包含了很多学习,面试,中高进阶fluuter资料,还有很多视频详解,如果有同学想进一步了解,详情请看文末。数据是信息的载体,是描述客观事物属性的数、字符以及…
暂无图片
编程学习 ·

如何创建MySQL存储过程,这是一个问题!且看大佬如何整理剖析

简单地说,存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理。本篇主要介绍如何创建存储过程和存储函数以及变量的使用,如何调用、查看、修改、删除存储过程和存储函数等。存储程序可以分为存储过程和函数,MySQL 中创建存储过程和函数使用的语…
暂无图片
编程学习 ·

1252 奇数值单元格的数目(模拟)

1. 问题描述:给你一个 n 行 m 列的矩阵,最开始的时候,每个单元格中的值都是 0。另有一个索引数组 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。你需要将每对 [ri, ci] 指定的行和列上的所有单元格的值加 1。请你在执行完所有 ind…
暂无图片
编程学习 ·

java温习*(13):关于向下转型易出现错误总结

1、向下转型需在满足向上转型前提下进行譬如:如下图所示代码中,父类Person及两个子类Chinese,French,子类中既有重写父类的方法,又有各自独立的方法。测试类中:先经过向上转型设置one指向Chinese,后由French强转one,此时虽然编译不会报错,但会产生运行时异常。因此:请…
暂无图片
编程学习 ·

RecyclerView ItemDecoration-实现分组/悬浮(粘性)头部

简单说ItemDecoration就是Item的装饰,在Item的四周,我们可以给它添加上自定义的装饰; (是用Kotlin实现的,如果有需要java版,可留言回复)ItemDecoration主要就三个方法 : ) getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State…
暂无图片
编程学习 ·

《MySQL数据库》常用函数整理

以下内容,是我整理出来的比较常用的字符串函数,数值函数,日期函数。第一类:字符串函数1、conv(n,from_base,to_base):对from_base进制的数n,转成to_base进制的表示方式(PS:进制范围为2-36进制,当to_base是负数时,n作为有符号数否则作无符号数)mysql> select conv(&quo…
暂无图片
编程学习 ·

操作系统 第二章 (用户态 核心态 中断 异常)

操作系统 第二章进程的定义进程的状态与转换进程控制进程通信线程概念和多线程模型处理机调度的概念、层次进程调度的时机、切换与过程、方式、调度算法评价指标 进程的定义 程序:就是一个指令序列 PCB(进程控制块存放有进程位置等信息)、程序段和数据构成了进程实体(进程映像…
暂无图片
编程学习 ·

HTML标记符

目录元标记符语义标记符HTML5废弃标记符 元标记符 <meta>放在<head></head>标签中 作用:定义网页的关键字。供搜索引擎使用,但现在使用这个标记符的搜索引擎越来越少<meta name="keywords" content="pests,weeds,flowers">将用户…