PCA作用:

降维,PCA试图在力保数据信息丢失最少的原则下,用较少的综合变量代替原本较多的变量,而且综合变量间互不相关,减少冗余以及尽量消除噪声.

PCA的计算步骤:

假设样本观测数据矩阵为:


为n个样本在第i个属性上的观测值,是一个列向量
1.对原始数据标准化处理(0均值化处理)
2.计算样本相关系数矩阵
3.计算协方差矩阵的特征值和特征向量
4.选择重要的主成分,并写出主成分表达式

5.计算主成分得分


6.
根据主成分得分的数据,做进一步的统计分析.

最大方差理论:

(1)、在信号处理中认为信号具有较大的方差,噪声具有较小的方差,信噪比就是信号与噪声的方差比,越大越好.因此,选择具有较大方差的特征值维度.

(2)、最小特征根接近于零,说明存在多重共线性问题

判断主成分的个数:

最常见的是基于特征值的方法,每个主成分都与相关系数矩阵的特征值
关联,第一主成分与最大的特征值相关联,第二主成分与第二大的特征值相关联,依此类推.

1、Kaiser-Harris准则建议保留特征值大于1的主成分,特征值小于1的成分所解释的方差比包含在单个变量中的方差更少.

2、Cattell碎石检验则绘制了特征值与主成分数的图形,这类图形可以展示图形弯曲状况,在图形变化最大处之上的主成分都保留.

3、可以进行模拟,依据与初始矩阵相同大小的随机数矩阵来判断要提取的特征值.若基于真实数据的某个特征值大于一组随机数据矩阵相应的平均特征值,那么该主成分可以保留.该方法称作平行分析.

优缺点:

优点:首先它利用降维技术用少数几个综合变量来代替原始多个变量,这些综合变量集中了原始变量的大部分信息.其次它通过计算综合主成分函数得分,对客观经济现象进行科学评价.再次它在应用上侧重于信息贡献影响力综合评价.
缺点:

1、在PCA中,首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平(即变量降维后的信息量须保持在一个较高水平上),其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释(否则主成分将空有信息量而无实际含义).
2、主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价.因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则维数降低的“利”可能抵不过主成分含义不如原始变量清楚的“弊”.

#################R语言########################

法1:

data=USArrests

data<-scale(data)

#prcomp()####:主成分分析,通过奇异值分解做主成分分析,而不使用协方差矩阵的特征根;

dt<-princomp(data)####主成分分析   可以从相关阵或者从协方差阵做主成分分析;

summary(dt)####提取主成分信息 loadings=T显示主成分分析或因子分析中载荷的内容,提取主成分对应的特征向量;

loadings(dt)####载荷矩阵,查看每个变量对主成分的贡献度;

#predict()############3预测主成分的值;

screeplot(dt,type="lines")####画出主成分的碎石图;

biplot(dt)#######画出数据关于主成分的散点图和原坐标在主成分下的方向,双重信息图#################biplot,查看各个变量的表现.

法2(细节过程):

d=read.table("clipboard",header=T) #从剪贴板读取数据

sd=scale(d)  #对数据进行标准化处理

d=read.table("clipboard",header=T)  #从剪贴板读取标准化数据

pca=princomp(d,cor=T)  #PCA函数

screeplot(pca,type="line",mian="碎石图",lwd=2)  #画出碎石图

dcor=cor(d) #求相关矩阵

deig=eigen(dcor)  #求相关矩阵的特征值和特征向量

deig$values #输出特征值

sumeigv=sum(deig$values)

sum(deig$values[1:2])/k #求前两个主成分的累积方差贡献率

pca$loadings[,1:2]  #输出前2个主成分的载荷系数

deig$values[1]/k;deig$values[2]/k; #计算主成分C1、C2的系数b1、b2

C=(b1*C1+b2*C2)/(b1+b2)=q1*C1+q2*C2

s=pca$scores[,1:2] #输出前两个主成分的得分

c=s[1:评价对象的个数,1]*q1+s[1:评价对象的个数,2]*q2

cbind(s,c)

####################Python#########################

from 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) 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]
    redEigVects=eigVects[:,eigValInd]
    lowDDataMat=meanRemoved*redEigVects
    reconMat=(lowDDataMat*redEigVects.T)+meanVals
    return lowDDataMat,reconMat

PCA理论与实践的更多相关文章

  1. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

  2. Java 理论与实践: 处理 InterruptedException

    捕捉到它,然后怎么处理它? 很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException.您不能忽略这个异常,因为 ...

  3. Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)

    简介: Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能.非阻塞算法属于并发算法,它们可以安全地派生它们的线程, ...

  4. Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)

    简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...

  5. Java 理论和实践: 了解泛型

    转载自 : http://www.ibm.com/developerworks/cn/java/j-jtp01255.html 表面上看起来,无论语法还是应用的环境(比如容器类),泛型类型(或者泛型) ...

  6. Java 理论与实践: 处理 InterruptedException(转)

    很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException.您不能忽略这个异常,因为它是一个检查异常(check ...

  7. DDD(领域驱动设计)理论结合实践

    DDD(领域驱动设计)理论结合实践   写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听 ...

  8. Java 理论与实践: 并发集合类

    Java 理论与实践: 并发集合类 DougLea的 util.concurrent 包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型 List 和 Map 的高性能的.线程安全的实现 ...

  9. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

    下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...

随机推荐

  1. elasticsearch使用操作部分

    本片文章记录了elasticsearch概念.特点.集群.插件.API使用方法. 1.elasticsearch的概念及特点.概念:elasticsearch是一个基于lucene的搜索服务器.luc ...

  2. Sql Server Express连接字符串

    data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\ASPNETDB.MDF;User ...

  3. LaTeX插入图表方法 Lists of tables and figures

    Lists of tables and figures A list of the tables and figures keep the information organized and prov ...

  4. Leetcode: All O`one Data Structure

    Implement a data structure supporting the following operations: Inc(Key) - Inserts a new key with va ...

  5. JSP-14- 常用集合类和接口

    List接口 List接口与实现类是容量可变的列表,可按索引访问集合中的元素,是有序的集合. Arraylist是以 array方式实现的List,允许快速随机存取,相当于LinkedList 不适合 ...

  6. install cygwin

    make clean

  7. spring框架IoC

    IoC反转控制, 举个反例: //数据操作类 public class DataBase { //向数据库中存储数据 public void saveDB() { } } //业务逻辑类 public ...

  8. 关于silverlight打印模糊的问题

         今天做silverlight打印实现时,发现一个问题,就是sl打印处理的文字很模糊          这样肯定不行撒,于是开始找解决办法,首先想到的是silverlight中文显示的问题,好 ...

  9. c++中endl的函义

    c++中endl的函义是回车的函义,Enter

  10. 远程读取json数据并写入数据库

    参考:http://www.jb51.net/article/39937.htm $curlPost = 'a=1&b=2';//模拟POST数据$ch = curl_init();curl_ ...