PCA降维的python实现

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

from numpy import *

import matplotlib.pyplot as plt
def pca(data):
    # 减去均值
    m = mean(data,axis=0)
    data -= m
    print m
    # 协方差矩阵
    C = cov(transpose(data))
    # 计算特征值特征向量,按降序排序
    evals,evecs = linalg.eig(C)
    print evals,evecs
    indices = argsort(evals) #得到的是索引值
    indices = indices[::-1]#降序
    print 'indices',indices
    evecs = evecs[:,indices]
    print evecs
    evals = evals[indices]
    print evals
    # 产生新的数据矩阵
    x = dot(transpose(evecs),transpose(data))
    print x
    # 重新计算原数据
    y=transpose(dot(evecs,x))+m
    return x,y,evals,evecs

x = random.normal(5,.5,1000)
y = random.normal(3,1,1000)

a = x*cos(pi/4) + y*sin(pi/4)
b = -x*sin(pi/4) + y*cos(pi/4)
print a

plt.plot(a,b,'r.')
plt.xlabel('x')
plt.ylabel('y')

plt.title('raw dataset')

data = zeros((1000,2))
data[:,0] = a
data[:,1] = b
x,y,evals,evecs = pca(data)
print evecs

plt.figure()
plt.plot(y[:,0],y[:,1],'.')
plt.xlabel('x')
plt.ylabel('y')
plt.title('new dataset')
plt.show()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值