python版PCA(主成分分析)

python版PCA(主成分分析)  

  在用统计分析方法研究这个多变量的课题时,变量个数太多就会增加课题的复杂性。人们自然希望变量个数
较少而得到的信息较多。在很多情形,变量之间是有一定的相关关系的,当两个变量之间有一定相关关系时,可
以解释为这两个变量反映此课题的信息有一定的重叠。主成分分析是对于原先提出的所有变量,建立尽可能少的
新变量,使得这些新变量是两两不相关的,而且这些新变量在反映课题的信息方面尽可能保持原有的信息。


原理

  设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的
综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一

种方法。


步骤

主成分分析主要步骤如下:   

  1. 指标数据标准化;   
  2. 指标之间的相关性判定;  
  3. 计算特征值与特征向量
  4. 计算主成分贡献率及累计贡献率
  5. 计算主成分载荷

代码

[python] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #-*- coding:utf-8 -*-  
  2. from pylab import *  
  3. from numpy import *  
  4.   
  5. def pca(data,nRedDim=0,normalise=1):  
  6.     # 数据标准化  
  7.     m = mean(data,axis=0)  
  8.     data -= m  
  9.     # 协方差矩阵  
  10.     C = cov(transpose(data))  
  11.     # 计算特征值特征向量,按降序排序  
  12.     evals,evecs = linalg.eig(C)  
  13.     indices = argsort(evals)  
  14.     indices = indices[::-1]  
  15.     evecs = evecs[:,indices]  
  16.     evals = evals[indices]  
  17.     if nRedDim>0:  
  18.         evecs = evecs[:,:nRedDim]  
  19.   
  20.     if normalise:  
  21.         for i in range(shape(evecs)[1]):  
  22.             evecs[:,i] / linalg.norm(evecs[:,i]) * sqrt(evals[i])  
  23.     # 产生新的数据矩阵  
  24.     x = dot(transpose(evecs),transpose(data))  
  25.     # 重新计算原数据  
  26.     y=transpose(dot(evecs,x))+m  
  27.     return x,y,evals,evecs  
  28.   
  29. x = random.normal(5,.5,1000)  
  30. y = random.normal(3,1,1000)  
  31.   
  32. a = x*cos(pi/4) + y*sin(pi/4)  
  33. b = -x*sin(pi/4) + y*cos(pi/4)  
  34.   
  35. plot(a,b,'.')  
  36.   
  37. xlabel('x')  
  38. ylabel('y')  
  39.   
  40. title('raw dataset')  
  41.   
  42. data = zeros((1000,2))  
  43. data[:,0] = a  
  44. data[:,1] = b  
  45. x,y,evals,evecs = pca(data,1)  
  46. print y  
  47. figure()  
  48. plot(y[:,0],y[:,1],'.')  
  49. xlabel('x')  
  50. ylabel('y')  
  51. title('new dataset')  
  52. show()  

效果


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

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

相关文章

干货|Spring Cloud Bus 消息总线介绍

2019独角兽企业重金招聘Python工程师标准>>> 继上一篇 干货|Spring Cloud Stream 体系及原理介绍 之后,本期我们来了解下 Spring Cloud 体系中的另外一个组件 Spring Cloud Bus (建议先熟悉 Spring Cloud Stream,不然无法理解 Spr…

主成份分析(PCA)详解

主成分分析法(Principal Component Analysis)大多在数据维度比较高的时候,用来减少数据维度,因而加快模型训练速度。另外也有些用途,比如图片压缩(主要是用SVD,也可以用PCA来做)、因…

如何安装pylab:python如何导入matplotlib模块

pylab是python下挺不错的一个画图模块,使用也非常简单,记得Mit的计算机科学及编程导论有节课也是用到了这个工具,但这个工具安装不象用起来那么方便,小编就图文全程直播下吧 工具/原料 python2.7.10win10 32位方法/步骤 1缺省状态…

BP神经网络python简单实现

BP神经网络的原理在网上有很详细的说明,这里就不打算细说,这篇文章主要简单的方式设计及实现BP神经网络,并简单测试下在恒等计算(编码)作测试。 BP神经网络模型图如下 BP神经网络基本思想 BP神经网络学习过程由信息的…

golang的reflection(转)(一)

2019独角兽企业重金招聘Python工程师标准>>> 反射reflection 可以大大提高程序的灵活性,使得interface{}有更大的发挥余地反射可以使用TypeOf和ValueOf函数从接口中获取目标对象信息反射会将匿名字段作为独立字段(匿名字段的本质)…

datatables.js 简单使用--多选框和服务器端分页

说明:datatables是一款jQuery表格插件。感觉EasyUI的datagrid更易用 内容:多选框和服务器端分页 缘由:写这篇博客的原因是datatables的文档写的不怎么样,找东西很麻烦 环境:asp.net mvc , vs2015sqlserver2012 显示效…

python异常(高级) Exception

异常(高级) Exception 异常回顾:     try-except 语句 捕获(接收)异常通知,把异常流程变为正常流程     try-finally 语句 执行必须要执行的语句.     raise 语句 发送异常通知,同时进入异常流程     assert 语句 发送AssertionError异常     with 语句 wi…

从BMW Vision iNEXT 看宝马如何进军自动驾驶

安全很重要,空间也要很大,砍掉大量物理按键,内饰材料要环保,还要提供自动和主动两套驾驶方案。这些描述仅是BMW Vision iNEXT(下称Vision iNEXT)概念车的设计之冰山一角。 一款概念车当然无法完全代表未来…

CSS浮动(二)---Float

重新认识float 2.1. 误解和“误用” 既然提到“误用”,各位看官就此想想,自己平日是怎么使用float的?另外,既然“误用”加了引号,就说明这样的使用并不是真正的误用,而是误打误撞使用之后,带…

云原生生态周报 Vol. 2

业界要闻 Kubernetes External Secrets 近日,世界上最大的域名托管公司 Godaddy公司,正式宣布并详细解读了其开源的K8s外部 Secrets 管理项目: Kubernetes External Secrets,简称KES。这个项目定义了ExternalSecrets API&#xff…

centos 7新机使用前操作

关闭防火墙 systemctl stop firewalld(停服务) systemctl status firewalld(看状态) systemctl disable firewalld.service (永久关闭) selinux getenforce(查状态) vi /etc/selinux…

软件架构演进

传统架构到分布式架构详解 软件架构演进软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构的过程,博客里写到了这四种架构的特点以及优缺点分析,个人学习之用,仅供参考! 1.1.1 单体架构 特点:1、所有的…

hadoop0.20.0第一个例子

这是Hadoop学习全程记录第2篇,在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序。 新说明一下我的开发环境: 操作系统:在windows下使用wubi安装了ubuntu 10.10 hadoop版本:hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的访问路径

问题描述 对于我这个刚刚使用IDEA不久的新手来说,能够正常运行就不错了,不过到了后面,可能会觉得IDEA给你分配的默认访问路径很不顺手,比如访问的时候需要通过: http://localhost:8080/web_war_exploded/ 来访问,对于web_w…

做一个vue的todolist列表

<template><div id"app"><input type"text" v-model"todo" ref"ip"/><button click"add()">新增</button><br/><br/><hr/><ul><li v-for"(item,key) in li…

一种解决 MacBook 里的 App Store 无法登录的问题

刚刚买回来的 2018 款带有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安装 app 时一直无法登录成功&#xff08;网络链接都是好的&#xff09;&#xff0c;导致软件都无法更新&#xff0c;折腾了挺一会的。 后来发现是要退出设置里的 iCloud 登录&#xff0c;然后重新登录…

第二次冲刺

1、今日各个成员的问题 组员问题张晋誌对mui的API看得不是很懂&#xff0c;无法顺利的使用袁庆杰基础不牢,编写困难周建峰eclipse没法创建web项目&#xff0c;按照网上的方法&#xff0c;check for updates 和 install new software 之后也没用许家烨给单一功能知道如何实现但项…

单纯形法

单纯形法 如果目标函数中所有系数都非正&#xff0c;那么显然这些变量直接取0是最优的&#xff0c;所以此时答案为即为常数项。 我们要做的就是通过转化把目标函数的系数全部搞成非负。 思路就是用非基变量替换基变量。 先找到一个目标函数中系数为正的变量&#xff0c;在所有限…

分布式数据库数据一致性的原理、与技术实现方案

http://youzhixueyuan.com/the-principle-and-technology-realization-of-distributed-data-consistency.html 背景 可用性&#xff08;Availability&#xff09;和一致性&#xff08;Consistency&#xff09;是分布式系统的基本问题&#xff0c;先有著名的CAP理论定义过分布式…

模块之re模块 —— 正则

#‘match’只匹配从左向右第一个值是否在中括号的范围内&#xff0c;如果没有就返回None 如果有就直接打印一个对象&#xff0c;加上.group()就可以返回你要找的区间里面的值&#xff0c;如果没有找到对应的值&#xff0c;加上‘.group()’会报错 #‘search’ 默认是从整个st…