机器学习经典算法11-PCA

1.基本介绍

         我们人眼最多能看到3维的东西,但是现实生活中有很多大于3维的东西,那么如何对这些数据进行可视化?此外,对多维的数据是否可以压缩以减小存储空间?这都可以用降维的方式达到目的,其中使用广泛的就是PCA(Principle Component Analysis),PCA可以用来降低算法计算开销、去除噪声、使得结果易于展示和理解等。
        PCA可以看成在现有的n维上的数据点找到n-1维的平面,使得n维上的数据点到n-1维面上的投影距离之和最小。
        这里假设训练集中有m个样本或实例,每个样本的特征或属性数为n。

2.基本流程

       将数据抓换成前N个(即从n维变为N维)主成分的伪代码:
       1.数据预处理。这里预处理包含两个部分:均值归一化和属性范围调整。均值归一化是相应属性减去其平均值;而属性范围则在归一化基础上除以属性方差。
       2.计算特征之间的协方差矩阵。该矩阵是一个n*n的对称矩阵
       3.计算协方差矩阵的特征值和特征向量
       4.将特征值从大到小排序
       5.保留最上面的N个特征向量
       6.将原数据映射到由N个特征向量构成的新空间中

3.代码示例

         这里协方差矩阵covMat是n*n,而N个特征向量组成的矩阵为redEigVects为n*N维,降维后的数据为lowDDataMat为m*N维,reconMat是降维后还原为n维的数据
from numpy import *
import matplotlib.pyplot as plt
def loadDataSet(fileName, delim='\t'):
    fr = open(fileName)
    stringArr=[line.strip('\n').split(delim) for line in fr.readlines()]
    fr.close()
    datArr=[map(float,line) for line in stringArr]
    return mat(datArr)
def pca(dataMat, topNfeat=9999):
    meanVals = mean(dataMat, axis=0)
    meanRemoved = dataMat-meanVals
    covMat=cov(meanRemoved, rowvar=0)
    print covMat
    eigVals, eigVects=linalg.eig(mat(covMat))
    eigValInd=argsort(eigVals)
    eigValInd=eigValInd[:-(topNfeat+1):-1]
    redEigVects=eigVects[:,eigValInd]
    lowDDataMat=meanRemoved*redEigVects
    reconMat=(lowDDataMat*redEigVects.T)+meanVals
    return lowDDataMat, reconMat
dataMat=loadDataSet("testSet.txt")
low, rec=pca(dataMat,1)
i=0
while i<shape(dataMat)[0]:
    print dataMat[i,:],"_",rec[i,:]
    i=i+1

testSet.txt中的数据可以为如下:
1.658985 4.285136
-3.453687 3.424321
4.838138 -1.151539
-5.379713 -3.362104
0.972564 2.924086
-3.567919 1.531611
0.450614 -3.302219
-3.487105 -1.724432
2.668759 1.594842
-3.156485 3.191137
3.165506 -3.999838
-2.786837 -3.099354


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胖5566

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值