主成分分析Python代码

对于主成分分析详细的介绍:主成分分析(PCA)原理详解icon-default.png?t=N6B9https://blog.csdn.net/zhongkelee/article/details/44064401

import numpy as np
import pandas as pd'''标准PCA算法'''
def standeredPCA(data,N):                                   #data:数据集DataFrame  N:降维后需要的维数n=data.shape[1]                                         #数据集data的列数,即维度m=data.shape[0]                                         #数据集data的行数colname=list(data.columns)                              #提取列名AVG=[]                                                  #原始各个维度的平均值for i in range(n):avg=0s=list(data[colname[i]])num=len(s)for j in s:avg+=javg=avg/numAVG.append(avg)'''将每一列数据都转换成列表型'''df=[]                                                   #存储每一列的数据for i in range(n):ls=list(data[colname[i]])df.append(ls)'''数据中心化'''for i in range(n):t=df[i]for j in range(len(t)):t[j]=t[j]-AVG[i]'''求特征协方差矩阵'''A=np.zeros((n,n))for i in range(n):for j in range(n):p=df[i]q=df[j]for k in range(m):A[i][j]+=p[k]*q[k]A[i][j]=A[i][j]/(m-1)'''求协方差的特征值和特征向量'''B=np.linalg.eig(A)P=B.eigenvalues                                         #特征值Q=B.eigenvectors                                        #特征向量U=[index for index, value in sorted(list(enumerate(P)), key=lambda x:x[1])]     #对特征值排序输出索引值序列U=sorted(U,reverse=True)                                #特征值从大到小排序的索引值u=[]                                                    #输出排在前N个的索引值for i in range(N):u.append(U[i])r=[]                                                     #需要的特征值t=[]                                                     #需要的特征向量for i in u:r.append(P[i])T=[]for j in Q:T.append(j[i])t.append(T)'''得到通过PCA后获得的N个特征的数据'''W=[]                            #存储通过PCA后得到的每一个特征的数据【列表】for i in range(N):a=[]                        #存储通过PCA的特征数据b=t[i]for j in range(m):          #遍历数据的行f=0for k in range(n):      #遍历数据的列f=f+df[k][j]*b[k]a.append(f)W.append(a)'''输出经过PCA降维处理后得到的N个特征数据'''fdata=pd.DataFrame(W)fdata=fdata.Tprint("经过PCA降维后得到的结果如下:")print(fdata)'''计算特征信息提取率'''sum=0for i in P:sum+=ifsum=0for i in u:fsum+=P[i]PCAprecent=fsum/sumprint("PCA数据特征的信息提取率是:{}".format(PCAprecent))if __name__=="__main__":df = {'x': [2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1, 1.5, 1.1], 'y': [2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9]}data = pd.DataFrame(df)standeredPCA(data, 1)

 

 

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

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

相关文章

十种排序算法(附动图)

排序算法 一、基本介绍 ​ 排序算法比较基础,但是设计到很多计算机科学的想法,如下: ​ 1、比较和非比较的策略 ​ 2、迭代和递归的实现 ​ 3、分而治之思想 ​ 4、最佳、最差、平均情况时间复杂度分析 ​ 5、随机算法 二、排序算法的分类 …

RabbitMq-1基础概念

RabbitMq-----分布式中的一种通信手段 1. MQ的基本概念(message queue,消息队列) mq:消息队列,存储消息的中间件 分布式系统通信的两种方式:直接远程调用,借助第三方完成间接通信 消息的发送方是生产者&#xff0c…

面试热题(二叉树的锯齿形层次遍历)

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行) 输入:root [3,9,20,null,null,15,7] 输出:[[3…

C++ STL stack queue

目录 一.stack 介绍 二.stack 使用 三.stack 模拟实现 普通版本: 适配器版本: 四.queue的介绍 五. queue使用 六.queue模拟实现 七.deque介绍 1.容器适配器 2.deque的简单介绍 3.deque的缺陷 4.为什么选择deque作为stack和queue的底层默认容…

pycharm调整最大堆发挥最大

python程序运行时,怎么提高效率,设置pycharm最大堆过程如下; 一、进入设置pycharm最大堆; 二、进入设置pycharm最大堆; 如果8g设置为6g左右,占75%左右最佳

【JVM】JVM中的分代回收

文章目录 分代收集算法什么是分代分代收集算法-工作机制MinorGC、 Mixed GC 、 FullGC的区别是什么 分代收集算法 什么是分代 在java8时,堆被分为了两份: 新生代和老年代【1:2】 其中: 对于新生代,内部又被分为了三…

Socks5代理在多线程爬虫中的应用

在进行爬虫开发过程中,我们常常需要处理大量的数据,并执行多任务并发操作。然而,频繁的请求可能会引起目标网站的反爬机制,导致IP封禁或限制访问。为了规避这些限制,我们可以借助Socks5代理的强大功能,通过…

Nginx反向代理技巧

跨域 作为一个前端开发者来说不可避免的问题就是跨域,那什么是跨域呢? 跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。浏览器的同源策略是指协议,域名…

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码)

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码) 1、时间:2011-2020(省级、城市),2014-2020(区县) 2、原始数据来源:北大金融研究中心…

VS2019生成的DLL,给QT(MinGW版本)使用的小结

VS2019端: a 基于生成一个DLL的工程(要注意生成是x86,还是x64的,需要和后面的QT的App工程对应),这里不多解释了,网上多的是; b 在cpp实现文件里,假如要导出一个这样的…

Git如何上传文件到github

Git下载网址: https://git-scm.com/downloads 1. 新建一个空文件夹,用来上传文件,第一次需创建,以后无需创建 2. 点进去空文件夹,鼠标右键,使用Git Bash Here 打开 3. 克隆远程仓库:git cl…

深入理解JVM——垃圾回收与内存分配机制详细讲解

所谓垃圾回收,也就是要回收已经“死了”的对象。 那我们如何判断哪些对象“存活”,哪些已经“死去”呢? 一、判断对象已死 1、引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加一&…

解决git reset --soft HEAD^撤销commit时报错

今天在使用git回退功能的时候,遇到以下错误: 解决git reset --soft HEAD^撤销commit时报错 问题: 在进行完commit后,想要撤销该commit,于是使用了git reset --soft HEAD^命令,但是出现如下报错&#xff1…

【学习心得】安装cuda/cudann和pytorch

一、查看驱动信息 # 进入CMD输入命令 nvidia-smi 也可以右下角图标打开NVIDIA 设置进行查看 二、下载安装CUDA 1、下载 下载地址 https://developer.nvidia.com/ 2、安装 推荐自定义安装。建议只勾选Cuda,只安装这一个就好,以免报错安装失败。 3、验证…

移动端直播相关技术总结

一、直播APP原理 二、直播APP架构 三、直播APP实现流程 四、流媒体开发 流媒体模块架构 流媒体相关基础知识 帧:每一帧代表一幅静止的图像 GOP:Group of Pictures,画面组,一个GOP就是一组连续的画面,很多帧的集合 码率…

BC136 KiKi去重整数并排序

给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。 输入描述 第一行,输入一个整数n,表示序列有n个整数。 第二行输入n个整数(每个整数大于等于1,小于等于1000&#xf…

拉丁方设计资料的方差分析(SPSS版+SAS版)

拉丁方设计(Latin square design):实验研究中涉及一个处理因素和两个控制因素,每个因素的类别数或水平数相等,此时可采用拉丁方设计,将两个控制因素分别安排在拉丁方设计的行和列上。该设计类型仍为单因素方…

中电金信通过KCSP认证 云原生能力获权威认可

中电金信通过KCSP(Kubernetes Certified Service Provider)认证,正式成为CNCF(云原生计算基金会)官方认证的 Kubernetes 服务提供商。 Kubernetes是容器管理编排引擎,底层实现为容器技术,是云原…

ABAP 新语法--Data Processing

1. String Template 新语法引入了字符串模板,用于处理字符串连接以及格式转换 字符串模板在 | … | 之间定义,主要分为两部分,固定文本和变量 其中,变量只能在 { … } 内使用,大括号之外的所有字符均作为固定文本使用…

【Swagger】只需要三步,就可以让你的项目实现Swagger在线文档,实时浏览,修改展示

目录 1. pom.xml文件中添加Swagger的jar包 2. 配置Swagger 3. 项目启动中加入Swagger注解的开关,启动Swagger功能 4. 启动项目,查看效果 Swagger 的功能这里就不多说明了,相信大家都懂的,好奇多问一句,大家有知道其…