热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据梳理、降维主成分分析、超易懂实例及R语言实现

欢迎批评指正!主成分分析(principalcomponentanalysis,PCA)一。几何的角度理解PCA--举例:将原来的三维空间投影到方差最大且线性无关的两

 欢迎批评指正!

 

主成分分析(principal component analysis,PCA)

一。几何的角度理解PCA -- 举例:将原来的三维空间投影到方差最大且线性无关的两个方向(二维空间)。

二。数学推导的角度为 -- 将原矩阵进行单位正交基变换。

且听我慢慢展开。

关于第一句话,给个图直观理解,请问,下面的三维空间中的一条鱼,在二维平面时怎么能更直观的看出,这是一条鱼?

 

很明显,第一种情况更直观,为什么呢?

这就是将原矩阵(三维空间)投影到了信息量最大的两个维度上(二维平面),这就是PCA所做的事情,降维

参考https://www.bilibili.com/medialist/play/ml304203591

  https://www.matongxue.com/madocs/228/

 

关于第二句话,从数学的角度解释,一句话,原矩阵进行单位正交基变化。

首先。什么是基变化

举例

 

 

 三维空间中的四个点(矩阵B),左乘一个矩阵A,没有发生任何变化,因为该矩阵就是B的基,如果A发生变化,对应的乘积也发生变化。

第二,为什么要正交单位基,单位基很好理解了,就是为了计算的方便,正交的目的是为了PCA降维之后,我们希望能对各个主成分进行合理解释,如果非正交的话,各主成分之间相关性很高,结果难已解释。

下面到了最重要的一点,如何找鸡?不对不对,找基!

当我们遇到这样的(左面)的数据时,我们很难去选择将数据投影到X1或者X2,因为两个基上的数据信息量差别不大,我们希望找到像Y1,Y2这样的基,这时的取舍就很明确了。

首先,我们将数据中心化

 

疑问(问什么要中心化)

因为标准化之后X的相关矩阵等于协方差阵,证明(忽视角标0_0),注意此处的Y与下文的Y无关

 

因为在之前X坐标系下,X1与X2存在很大的相关性,所义无法很好的选择一个维度来投影,但是在Y坐标系下,Y1,Y2之间相关性很小,投影方向很明确。

问题转化为Y = PX,

 

 

 

 那么我们希望得到的是一个除去对角线上元素为1之外的其他元素均为零的矩阵。

 

 第三步为谱分解,她有很好的性质,如,Q为X的特征向量组,为单位正交矩阵,D为对角线元素为X特征值的对角线矩阵


对于第④步的解释:我们希望得到的是Y的协方差矩阵为对角线矩阵,而D为对角线矩阵,PQ = 单位矩阵即可,

又Q为正交阵,所以inverse Q = transpose Q,所以

我们可以选择特征值较大的eigenvectors 乘以 X,实现降维

伪代码

 

 实例及R语言实现

 

a <- c(-1,-1,0,2,0) 
b <- c(-2,0,0,1,1)
x <- as.matrix(cbind(a,b))   # already normalization
x
cor <- cor(x) 
eig <- eigen(cor)
plot(eig$values)
p <- eig$vectors
y <- t(p) %*% t(x)
plot(t(y))

 

 参考https://www.bilibili.com/video/av29441413/?p=3

https://www.bilibili.com/medialist/play/ml304203591

https://blog.csdn.net/y521263/article/details/44925363


推荐阅读
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文详细介绍了如何在最新版本的Xcode中重命名iOS项目,包括项目名称、应用名称及相关的文件夹和配置文件。通过本文,开发者可以轻松完成项目的重命名工作。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
  • Nginx 启动命令及 Systemctl 配置详解
    本文详细介绍了在未配置和已配置 Systemctl 的情况下启动 Nginx 的方法,并提供了详细的配置步骤和命令示例。 ... [详细]
  • 本文详细介绍了如何在Mac操作系统中为IntelliJ IDEA配置更高的内存限制,以提高开发效率和性能。 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文探讨了如何将个人经历,特别是非传统的职业路径,转化为职业生涯中的优势。通过作者的亲身经历,展示了舞蹈生涯对商业思维的影响。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
author-avatar
wangtao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有