#!/usr/bin/env python

# -*- coding: utf-8 -*-

from numpy import *

#参数1:特征值向量,

#参数2:比率

#返回值:k(符合指定比率的topK k值)

def setK(eigVals,rate = 0.9):

eigValInd = argsort(eigVals) #对特征值进行排序

for i in range(1,eigVals.size+1):

topK = eigValInd[:-(i + 1):-1]

eigVal = eigVals[:, topK]

a = eigVal.sum()

b = eigVals.sum()

print a/b

if a/b >= rate:

break;

return i

#功能:给定一个矩阵,返回 经PCA算法降过维的 矩阵(降维的程度由rate决定)

# 如果要指定k,可直接修改这条语句“ k = setK(eigVals,rate)”

#参数1:矩阵

#参数2:要取特征值的比率(rate = sum(topK特征值)/sum(特征值总和))

#返回值:经PCA算法降过维的 矩阵

def pca(dataMat, rate=0.9):

meanVals = mean(dataMat, axis=0)

meanRemoved = dataMat - meanVals #减去均值

stded = meanRemoved / std(dataMat) #用标准差归一化

covMat = cov(stded, rowvar=0) #求协方差方阵

eigVals, eigVects = linalg.eig(mat(covMat)) #求特征值和特征向量

k = setK(eigVals,rate) #get the topNfeat

eigValInd = argsort(eigVals) #对特征值进行排序

eigValInd = eigValInd[:-(k + 1):-1] #get topNfeat

redEigVects = eigVects[:, eigValInd] # 除去不需要的特征向量

lowDDataMat = stded * redEigVects #求新的数据矩阵

#reconMat = (lowDDataMat * redEigVects.T) * std(dataMat) + meanVals #对矩阵还原

return lowDDataMat

a = array([[2.5,2.4],[0.5,0.7],[2.2,2.9],[1.9,2.2],[3.1,3.0],[2.3,2.7],[2,1.6],[1,1.1],[1.5,1.6],[1.1,0.9]])

print "a:"

print a

print pca(a,0.9)

#eigVals = array([3.735,1.133,0.457,0.323,0.199,0.153])

#print setK(eigVals,0.6)

下面的链接把PCA的原理解释地非常好:

投影:某一点在某个向量上的投影等于 这点的坐标 点乘 向量的单位向量。

python中pca算法_使用python的numpy库实现PCA算法相关推荐

  1. 在python中设置密码登录_在python中生成密码

    在python中生成密码 我想在python中生成一些字母数字密码. 一些可能的方法是: import string from random import sample, choice chars = ...

  2. python中 什么意思_请问python中%代表什么意思?

    婷婷同学_ 1.格式符例如:a = 'test'print 'it is a %s' %(a)打印的结果就是 it is a test2.单独看%,是一个运算符号,求余数.例如:求模运算,相当于mod ...

  3. lambda在python中的用法_在python中对lambda使用.assign()方法

    我在Python中运行以下代码:#Declaring these now for later use in the plots TOP_CAP_TITLE = 'Top 10 market capit ...

  4. python中matrix函数_使用python解线性矩阵方程(numpy中的matrix类)

    这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...

  5. python中的帮助_在Python中使用help帮助

    原博文 2014-10-18 23:21 − 在Python中使用help帮助 >>> import numpy >>> help(numpy.argsort) H ...

  6. python中class变量_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  7. python中__init__方法_关于python中__init__方法理解

    在理解__init__方法之前,我们需要搞明白,什么时候才需要用到的这个方法 什么是__init__? __init__方法在python中是类的初始化,通俗来讲,就是每次只要你去创建一个类的实例对象 ...

  8. python中if控制语句_了解Python控制流语句——if语句

    控制流 截止到现在,在我们所看过的程序中,总是有一系列语句从上到下精确排列,并交由 Python 忠实地执行.如果你想改变这一工作流程,应该怎么做?就像这样的情况:你需要程序作出一些决定,并依据不同的 ...

  9. python中合并列表_关于python:如何将两个列表合并到一个列表中?

    我有 a = [1, 2] b = ['a', 'b'] 我想要 c = [1, 'a', 2, 'b'] 号 @cdleary's answer stackoverflow.com/question ...

  10. python中select模块_基于python select.select模块通信的实例讲解 如何用python写个串口通信的程序...

    python socket怎么利用select实现双工通信 方法: Before : 0000000000000000000000000000000000000000 After pack: 0100 ...

最新文章

  1. Android入门——电话拨号器和4种点击事件
  2. 中业科技机器人价格_协作机器人售价持续走低 本土厂商该如何发力
  3. j - 数据结构实验:哈希表_一看就懂的数据结构基础「哈希表」
  4. linux测量某个ip的网速,linux下测网速
  5. hrtimer的简单使用 + 原理和实现【转】
  6. html:(35):缩进和行高
  7. 计算机在线问答,网络信息安全知识:公安机关发现影响计算机信息系统安全的隐患时,()。...
  8. 敏捷开发一千零一问系列之十八:长期受制于强势客户怎么办?(下)
  9. c++大作业--学籍管理系统--
  10. MDT批量部署服务搭建
  11. 2.12 Excel软件各工作区的显示和隐藏 [原创Excel教程]
  12. JDK安装 Java环境配置
  13. dell更换硬盘识别不了新的硬盘
  14. 通俗易懂的Kafka零拷贝机制
  15. Ural1671-Anansi's Cobweb
  16. 计算多列迭代次数的一种平均列近似方法
  17. docker Swarm容器编排工具
  18. 【牛客网华为机试】HJ89 24点运算
  19. 【案例】云卷云舒,ArcGIS成就时空交错的新闻播报
  20. 王者荣耀高并发背后的故事

热门文章

  1. bool(布尔类型)
  2. 数据库课程设计超市信息管理系统
  3. 2021安徽舒城中学高考成绩查询,舒城:乘胜前进!舒中吹响2021年高考集结号!...
  4. 如何使用腾讯云做博客
  5. 如何让你的 App 的聊天气泡丰富多彩
  6. 习题10.3 分别定义Teacher类和Cadre类,采用多重继承方式由这两个类派生出新类Teacher_Cadre类。
  7. openmpi雅可比迭代法_雅可比迭代和高斯赛德尔迭代
  8. 涂抹MySQL--第1章 开源运动与开源软件MySQL - 1.1开源软件的故事(3)
  9. CNN网络中卷积层的正向传播与反向传播理解
  10. IT创业见闻04-创业需具备最重要的资源是什么