利用PCA降维
参考:《机器学习实战》- Machine Learning in Action
一、 基本思想
PCA(Principal Component Analysis),主成分分析。是目前应用最为广泛的降维技术。
什么是降维?举个例子:假设我们正通过电视观看体育比赛,显示器大概包含了100万像素,而球则可能是由较少的像素组成的,比如一千个像素。大部分体育比赛中,我们关注的是给定时刻球的位置。这个过程,人们就已经将数据从一百万维降低到了三维。
考虑下图的大量数据点,如果要我们画一条直线,这条线要尽量可能覆盖这些点,很明显是直线B。

现在,我们将坐标轴旋转,使得X轴平行于B直线,接下来是进行降维操作,结果如下:

我们来分析下大致的流程:第一个主成分是从数据差异性最大的方向提取出来的,第二个主成分则来自于数据差异性次大的方向,并且该方向与第一个主成分方向正交。而通过数据集的协方差矩阵及其特征值分析,我们就可以求得这些主成分的值。
大致流程如下:
- 去除平均值
 - 计算协方差矩阵
 - 计算协方差矩阵的特征值和特征向量
 - 将特征值从大到小排序
 - 保留最上面的N个特征向量
 - 将数据转换到上述N个特征向量构建的新空间
 
二、 代码
# -*- coding:utf8 -*-
from numpy import *
def loadDataSet(fileName, delim='\t'):
	fr = open(fileName)
	stringArr = [line.strip().split(delim) for line in fr.readlines()]
	dataArr = [map(float, line) for line in stringArr]
	return mat(dataArr)
def pca(dataMat, topNfeet=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[:-(topNfeet+1):-1]
	redEigVects = eigVects[:,eigValInd]
    lowDDataMat = meanRemoved * redEigVects
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    return lowDDataMat, reconMat
												
											利用PCA降维的更多相关文章
- PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》—Jason niu
		
load spectra; temp = randperm(size(NIR, 1)); P_train = NIR(temp(1:50),:); T_train = octane(temp(1:50 ...
 - Python机器学习笔记  使用scikit-learn工具进行PCA降维
		
之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...
 - 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据
		
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...
 - 对于利用pca 和 cca 进行fmri激活区识别的理解
		
1.pca 抛开fmri研究这个范畴,我们有一个超长向量,这个超长向量在fmri研究中,就是体素数据.向量中的每个数值,都代表在相应坐标轴下的坐标值.这些坐标轴所组成的坐标系,其实是标准单位坐标系.向 ...
 - 【机器学习实战】第13章 利用 PCA 来简化数据
		
第13章 利用 PCA 来简化数据 降维技术 场景 我们正通过电视观看体育比赛,在电视的显示器上有一个球. 显示器大概包含了100万像素点,而球则可能是由较少的像素点组成,例如说一千个像素点. 人们实 ...
 - 一步步教你轻松学主成分分析PCA降维算法
		
一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...
 - PCA 降维
		
http://f.dataguru.cn/spark-751832-1-1.html 我们可以利用PCA算法将向量的维数降低,从而实现特征转化.具体原理在<机器学习>课程中有详细的讲述.故 ...
 - 第四章 PCA降维
		
目录 1. PCA降维 PCA:主成分分析(Principe conponents Analysis) 2. 维度的概念 一般认为时间的一维,而空间的维度,众说纷纭.霍金认为空间是10维的. 3. 为 ...
 - 机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据
		
机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据 关键字:PCA.主成分分析.降维作者:米仓山下时间:2018-11-15机器学习实战(Ma ...
 
随机推荐
- java用Kruskal实现最小生成树
			
今天更新这篇文章超级激动,因为我会最小生成树的算法了(其实昨天就开始研究了,只是昨天参加牛客网的算法比赛,结果又被虐了,好难过~) 最小生成树的算法,其实学了数据结构就会有一定的基础,Kruskal算 ...
 - Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警
			
前言 这次主要分享通过Metrics.net + influxdb + grafana 构建WebAPI的自动化监控和预警方案.通过执行耗时,定位哪些接口拖累了服务的性能:通过请求频次,设置适当的限流 ...
 - 【BZOJ2337】Xor和路径(高斯消元)
			
[BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...
 - Gulp-自动化编译sass和pug文件
			
突然发现在我博客文章中,缺少这一块的记录,那我就补一篇吧. gulp的环境配置和安装:http://www.cnblogs.com/padding1015/p/7162024.html 这里就补充一篇 ...
 - C#中的函数式编程:序言(一)
			
学了那么久的函数式编程语言,一直想写一些相关的文章.经过一段时间的考虑,我决定开这个坑. 至于为什么选择C#,在我看来,编程语言分三类:一类是难以进行函数式编程的语言,这类语言包括Java6.C语言等 ...
 - C# 登录 存Session ,cookie并且验证只能一个人登录以及清session并且Cache
			
string id = ConvertHelper.GetString(ds.Tables[0].Rows[0]["Uid"]);//用户ID string struserid = ...
 - Mac下安装FFmpeg教程
			
一.安装ffmpeg 分为两种安装方式: 1. 命令行安装 brew install ffmpeg 2. 下载压缩包安装 去 http://evermeet.cx/ffmpeg/ 下载7z压缩包,解压 ...
 - 使用Angular CLI从蓝本生成代码
			
第一篇文章是: "使用angular cli生成angular5项目" : http://www.cnblogs.com/cgzl/p/8594571.html 这篇文章主要是讲生 ...
 - S/4 HANA中的ACDOCT和FAGLFLEXT
			
最近的几个需求让我对ACDOCT和FAGLFLEXT这两个财务相关表(准确地说是视图)产生了一些了解,同时也发现某些开发同行和业务顾问并没有认识到这些东西.因此打算从技术角度来说明一下这两个视图在S4 ...
 - 背景新增属性和css渐变及倒影
			
背景新增属性和css渐变及倒影 一.background新增属性 background-size:指定对象的背景图像的尺寸大小. background:url() 0 0,url() 0 100%;多 ...