利用PCA来简化数据
来源:互联网 发布:物流软件制作 编辑:程序博客网 时间:2024/05/16 11:50
协方差矩阵的特征向量为数据传播的方向,特征值为该方向上的幅度。
第二大特征向量正交于最大特征向量,指向第二大数据传播方向。
pca.py
#!/usr/bin/python # -*- coding: utf-8 -*- #coding=utf-8from numpy import *def loadDataSet(fileName, delim='\t'): fr = open(fileName) stringArr = [line.strip().split(delim) for line in fr.readlines()] datArr = [map(float, line) for line in stringArr] return mat(datArr)#PCA算法def pca(dataMat, topNfeat=9999999): meanVals = mean(dataMat, axis = 0) meanRemoved = dataMat - meanVals #去除平均值 covMat = cov(meanRemoved, rowvar = 0) #计算协方差矩阵 eigVals, eigVects = linalg.eig(mat(covMat))#计算协方差矩阵的特征值和特征向量 eigValInd = argsort(eigVals) #将特征值从小到大排序 eigValInd = eigValInd[: -(topNfeat+1): -1] #保留最大的N个特征向量 redEigVects = eigVects[:, eigValInd] #将数据转换到上述N个特征向量构建的新空间中 lowDataMat = meanRemoved * redEigVects reconMat = (lowDataMat * redEigVects.T) + meanVals return lowDataMat, reconMat
测试:
>>> import pca>>> dataMat = loadDataSet('testSet.txt')>>> shape(dataMat)(1000, 2) #原始数据为二维矩阵 >>> lowDMat, reconMat = pca.pca(dataMat, 1)>>> shape(lowDMat)(1000, 1) #降为一维#绘制图像>>> import matplotlib>>> import matplotlib.pyplot as plt>>> fig = plt.figure()>>> ax = fig.add_subplot(111)>>> ax.scatter(dataMat[:,0].flatten().A[0], dataMat[:,1].flatten().A[0], marker='^', s=90)<matplotlib.collections.PathCollection object at 0x049DBFB0>>>> ax.scatter(reconMat[:,0].flatten().A[0], reconMat[:,1].flatten().A[0], marker='^', s=50, c='red')<matplotlib.collections.PathCollection object at 0x04B4AB70>>>> fig.show()
参考
http://www.cnblogs.com/nsnow/p/4758202.html
0 0
- 利用PCA来简化数据
- 利用 PCA来简化数据
- 利用PCA简化数据
- 机器学习第十三章:利用PCA来简化数据
- 《机器学习实战》利用PCA来简化数据
- 《机器学习实战》读书笔记之利用PCA来简化数据
- py2.7《机器学习实战》利用PCA来简化数据
- 机器学习之利用PCA来简化数据
- 机器学习实战-利用PCA来简化数据
- 机器学习实战-13利用PCA来简化数据
- 机器学习实战笔记-利用PCA来简化数据
- 机器学习实战——第十三/十四章:利用PCA和SVD来简化数据
- 《机器学习实战》笔记之十三——利用PCA来简化数据
- [完]机器学习实战 第十三章 利用PCA来简化数据
- 【机器学习实战】第13章 利用 PCA 来简化数据
- 【机器学习实战】第13章 利用 PCA 来简化数据
- chapter13 机器学习之利用PCA简化数据
- 【机器学习实战-python3】利用PCA简化数据
- [PHP] - Laravel - CSRF token禁用方法
- 自然数与自然数的五个公理
- 【SpringMVC学习04】Spring、MyBatis和SpringMVC的整合
- linux多线程编程中用到的函数和类型
- 调试器工作原理(1):基础篇
- 利用PCA来简化数据
- iOS大神牛人的博客集合
- BroadCast两种实现方式
- Oracle备份与恢复案例
- UML图详解(九)——包图
- java技术论文
- hdu 5461 Largest Point 2015 ACM/ICPC Asia Regional Shenyang Online
- 跳转应用商店过滤
- java技术论文