pca图解读_干货!手把手一步一步解读PCA分析,逃学博士尽力了!

01 引言

之前发了几篇文章关于矩阵中 特征向量和PCA主元分析的文章,大家反响不错。当时并没有涉及到数学运算,只是大概讲了讲原理。

这篇文章我们一起来一步一步解读

  • PCA的计算过程
  • 如何用Python实现PCA分析
b5cb36db1ae17483ec92ebf24baeccd8.png

准备就绪

02 第一步:数据获取

第一步,大量的数据收集是必须的。手边此时并没有数据,就通过python自己制造点数据吧。

29778090edc2f194e1b8bd2a7d0f9520.png

构造数据框架

我们的项目计划是 看看 白种人和黄种人的基因差别

gene = ['gene' + str(i) for i in range(1, 101)] #创造100个基因

白种人取5人(Wh1 到 Wh5)和黄种人取5人(Ye1 到 Ye5)

white = ['Wh' + str(i) for i in range(1, 6)]

yellow = ['Ye' + str(i) for i in range(1, 6)]

data = pd.DataFrame(columns = [*white, *yellow], index = gene)

将所有的数据通过pandas包放入一个数据矩阵中。如下所示:

ede5c65c9d41843a16d85045ee5f9923.png

数据矩阵

现在,我们给这个矩阵赋值,完全随机的,不要去管数据严谨性,毕竟全是假设的数据。

d4827d64bc4b198ce976e1dc2230e352.png

数据代码

a18c64551ab271049bdfae7fa1ece3bd.png

数据

搞定数据了,一般数据都是现成的。下一步,咱们开始PCA分析。

03 数据中心化

什么叫数据中心化呢?太高大上了!其实就是求平均值,将所有的数据和平均值联系起来。

我们还是用二维数据解释比较顺溜,假设数据如下:

bd68878df1bb67559cb06873f23d0948.png

杜撰数据

54c0489aa1b732bbdb690d8081f1a8e0.png

二维数据

假设我们有6组数据,x轴代表 影响因子1, y轴代表 影响因子2。蓝色小球代表数据,紫色小球代表数据平均值。

数据中心化,就是所有数据 减去 平均值,而图像的变化就是将平均值的点(紫色)移动到原点,其他数据点跟着移动。

2422d1f95fc66901e8cb2b34aa556fb0.png

数据中心化

322d3a7fc2f4164d77f6456e62ea6e06.png

数据中心化

简单吧!数据中心化后还有一步,是将数据缩放一下。

你看哦!

数据中心化的过程中,数据的方差是没有变化的。为了数据比较的方便,对数据还需要缩放一下,过程很简单。

a9ae9dc06d7c42d6d66ed04fde34fd3b.png

数据缩放

所有数据 除以 方差,这样最后的数据的方差都变成 1 了。

上面的python代码我们创建了100个基因,10个人的数据包。总共数据是100 * 10。

我们给中间中心化和缩放一下。

scaled_data = preprocessing.scale(data.T) # 搞定!

4e7915ddc89dd15a4ef6ecf81cadae84.png

数据缩放

04 PCA分析

52654f4c39d0de740b547cbe51904a1a.png

PCA分析

线性规划大家还记得吧。

d9e6f25d5b180ef0e2b5297613dfda94.gif

线性规划

如上图所示,我们需要划出一条线使得所有的数据点到达这条线的距离的平方和(红色线段)最小。

ab8e736ce34daee8e8e2adfdf86050d2.png

线性规划

为了详细说明线性规划,我们拿一个点来说明。

当B是无数数据点中的一个,AC(绿线)是一条最匹配的直线。那么我们需要保证:

  • B到AC的距离,BC的长度的平方和最小;
  • 或者C到A的距离平方和最大(勾股定理可证),两者是等效的。

所有数据点在主元坐标轴上的投射点到原点的距离(如上图中AC)的平方和叫做 Sum of Squared Distances (SSD)

主元1 上的投射点的 Sum of Squared Distances 就是 主元1的特征值(Eigenvalue),可以参见我之前的文章。

主元2上的投射点的Sum of Squared Distances 就是 主元2的特征值(Eigenvalue)

162a20d9d38706bc67771293573daa14.png

Sum of Squared Distances

我们注意到上图中最后一列是Variation。这是通过:

SSD / (数据个数 - 1)求得的。

Variation有什么用的?

主元1的Variation是2.20,主元2的Variation是0.20。那么一共是2.2 + 0.2 = 2.4。

那么,主元1占有:2.2 / 2.4 = 91.5%

主元2占有:0.2 / 2.4 = 8.5%

也就是说,PCA分析后,主元1保留了91.5%的原始数据信息,占比比主元2大的多。那么,主元1就是第一主元

分析完毕,大功告成!

f9b4d4ed47c44ffcd944c534eed32049.png

PCA

对于上述数据做PCA分析后,我们看出主元1占比高达95%。自然是第一主元。

7d1237201707c6b5ef98b8d132b365ba.png

05 总结

如果大家喜欢我的文章,请关注“逃学博士”。

感谢StatQuest。

“逃学博士”:理工科直男一枚,在冰天雪地的加拿大攻读工程博士。闲暇之余分享点科学知识和学习干货。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中南月赛 1313: ZZY的宠物

1313: ZZY的宠物 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 114 Solved: 59[Submit][Status][Web Board]Description ZZY领养了一对刚刚出生的不知名小宠物..巨萌巨可爱!!...小宠物的生命为5个单位时间并且不会在中间出意外翘辫子(如: 从0出生能活到5但活不到6)..小宠物…

查询大于2分钟的数据

查询大于2分钟的数据select * from dt_appsdk_users where datediff(mi,update_time,getdate()) > 2转载于:https://www.cnblogs.com/sntetwt/p/9838012.html

数据结构——二叉树根节点到特定节点路径(C语言版)

摘自:数据结构——二叉树根节点到特定节点路径(C语言版) 作者:正弦定理 发布时间:2020-12-10 21:09:43 网址:https://blog.csdn.net/chinesekobe/article/details/110991771 二叉树——根节点到特定节点路径…

实用插件_精选 10 个非常实用的 VS Code 插件

来源:Daan原文:https://medium.com/better-programming/10-extremely-helpful-visual-studio-code-plugins-for-programmers-c8520a3dc4b8无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人员,你都会想让自己的开发工作尽可能轻…

nginx笔记.

安装: 依赖的软件包: gcc gcc-c autoconf automake zlib zlib-devel openssl opensll-devel pcre pcre-devel 到官方网站上下载nginx包: 解压: tar -zxf nginx-x.x.tar.gz 安装三步走:./configure------- make------make install …

English trip -- VC(情景课)10 C I like to watch TV. 我爱看电视

Grammar focus 语法点: like to do you do they What does he like to do? does she Practice 练习 What do they like to do? They like to play basketball. What does she like to do? She likes to swim. What does he…

数据结构——计算节点个数和二叉树高度(C语言版)

摘自:数据结构——计算节点个数和二叉树高度(C语言版) 作者:正弦定理 发布时间:2020-12-12 23:27:09 网址:https://blog.csdn.net/chinesekobe/article/details/111086664 数据结构——计算节点个数、二叉树…

写入接口c语言_PYNQ: 使用CFFI嵌入C语言

未经私信同意禁止转载!前言CFFI是连接Python与c的桥梁,可实现在Python中调用c文件。CFFI为c语言的外部接口,在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数。Python运行比较低,尤其是操作字节流的时候&…

cp命令的编写——浅谈系统调用

摘要&#xff1a;linux中cp命令的实现&#xff0c;通过这个程序&#xff0c;我们需要了解系统调用耗费时间的方面&#xff0c;同时学会系统调用的错误处理机制。 本文来源&#xff1a;http://blog.csdn.net/trochiluses/article/details/11103523 #include<stdio.h> #inc…

Unity 协程原理探究与实现

目录 一、介绍二、迭代器三、原理四、总结一、介绍 协程Coroutine在Unity中一直扮演者重要的角色。可以实现简单的计时器、将耗时的操作拆分成几个步骤分散在每一帧去运行等等&#xff0c;用起来很是方便。 但是&#xff0c;在使用的过程中有没有思考过协程是怎么实现的&#x…

数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历(C语言版)

摘自&#xff1a;数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-19 17:25:49 网址&#xff1a;https://blog.csdn.net/zhuguanlin121/article/details/118436142 无向图创建…

android 图片识别白色区域进行裁剪_【研途技能贴】| 4款好用的图片处理软件推荐...

要考研啦4款好用的图片处理软件推荐01入门级作图神器——图怪兽一款会打字就能用的在线编辑器&#xff0c;80万模板任君挑选~无论是基础的旋转裁剪&#xff0c;还是难度进阶的抠图拼图&#xff0c;在这款软件里&#xff0c;你可以分分钟做出高大上的好图&#xff01;Use tips①…

Android 开发(一)项目概况

2019独角兽企业重金招聘Python工程师标准>>> 开始写博客&#xff0c;自己是边学习边做开发&#xff0c;将自己开发的过程记录下来&#xff0c;能够对学习的知识进行梳理&#xff0c;也可以对学习做个总结。 首先是对项目的介绍&#xff1a; 做一个功能全面的软件&am…

github和dockerhub制作k8s镜像

一、前言&#xff1a; 对于初学者来说&#xff0c;k8s的镜像问题往往会将他们拦在学习门外&#xff0c;今天就白话一下k8s众多镜像的获取方式&#xff0c;前提只有一个&#xff1a;你能上百度。 二、github和dockerhub账号准备&#xff0c;这个没任何门槛&#xff0c;只要知道这…

数据结构——无向图创建邻接表以及深度遍历、广度遍历(C语言版)

摘自&#xff1a;数据结构——无向图创建邻接表以及深度遍历、广度遍历&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-22 20:55:12 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/111409503 数据结构——无向图…

python抽象类的实现_python 抽象类、抽象方法的实现

由于python 没有抽象类、接口的概念&#xff0c;所以要实现这种功能得abc.py 这个类库,具体方式如下from abc import ABCMeta, abstractmethod#抽象类class Headers(object):__metaclass__ ABCMetadef __init__(self):self.headers abstractmethoddef _getBaiduHeaders(self)…

全文检索技术介绍与使用方法

全文检索技术ElasitcSearch介绍&#xff1a;http://www.javacodegeeks.com/2013/04/getting-started-with-elasticsearch.html全文检索技术Elasticsearch的使用介绍&#xff1a;http://www.cnblogs.com/dennisit/archive/2013/04/08/3008631.htmlIBM职员对ElasticSearch的认识&…

C++轮子队-第三周(需求改进原型设计)

需求改进&原型设计 一.需求完善 &#xff08;一&#xff09;系统功能&#xff08;补充&#xff09; 图形界面&#xff08;图片如下图所示&#xff1a;&#xff09; 根据需求与组内讨论结果&#xff0c;现归纳图形界面方面需要的设计与相应功能&#xff1a; 数据-图形界面中…

Linux 从头学 01:CPU 是如何执行一条指令的?

摘自&#xff1a;Linux 从头学 01&#xff1a;CPU 是如何执行一条指令的&#xff1f; 作者&#xff1a;IOT物联网小镇 发布时间&#xff1a;2021-07-02 08:22:43 网址&#xff1a;https://blog.csdn.net/jchen1218/article/details/118404217?utm_sourceapp&app_version4.…

python题目推荐_python题目

#1~100的奇数和&#xff0c;偶数和sum 0n 99while n > 0:sum sum nn n - 2print(sum)i1sum0while i<100:if i%20:sumii1else:i1print(sum)#偶数sum0for i in range(1,101):if i%20:sumiprint(sum)#奇数sum10for i in range(1,101):if i%2!0:sum1iprint(sum1)print(s…