PCA降维 python实现

主成分分析,Principal Component Analysis

计算协方差矩阵,由于是hermitian的,所以100%可正交对角化而且特征值一定非负

求出特征值特征向量以后,取特征值比较大的那几个方向构成线性空间,把数据投影上去就OK了

补详细公式推导:

http://blog.csdn.net/u013648367/article/details/73824049

import os
import numpy as np
import matplotlib.pylab as plt

def dataLoader(file):
    return np.array([ i.split() for i in open(file)],dtype="float")
 

def pca(dataSet,rank=0):
    means = np.mean(dataSet,axis=0)
    dataSet = dataSet - means #去中心化 ,使得E(X),E(Y),... =0, 方便求方差
    #plt.scatter(*dataSet.T)
    lenth = dataSet.shape[0]
    if rank == 0:
        rank = dataSet.shape[1]+1
    dataSet = np.matrix(dataSet)
    covMat = dataSet.T*dataSet/(lenth-1)
    eigenVals, eigenVec = np.linalg.eigh(covMat)
    pick_id = eigenVals.argsort()[::-1][:rank] #从小到大排序,返回数组序号,然后倒着取,取前r个
    eigenVec_picked = eigenVec[:,pick_id]#取出排序后的特征向量
    #print(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值