#coding=utf-
from numpy import * '''通过方差的百分比来计算将数据降到多少维是比较合适的,
函数传入的参数是特征值和百分比percentage,返回需要降到的维度数num'''
def eigValPct(eigVals,percentage):
sortArray=sort(eigVals) #使用numpy中的sort()对特征值按照从小到大排序 sortArray=sortArray[::-] #特征值从大到小排序 arraySum=sum(sortArray) #数据全部的方差arraySum
#percentage 表示的是降为到所有方差和的多少.也就是保留数据的多少波动性.越大保留越多
#比如percentage写0.99那么就是num返回2 ,如果写0.7就返回1
tempSum=
num=
for i in sortArray:
tempSum+=i
num+=
if tempSum>=arraySum*percentage:
return num '''pca函数有两个参数,其中dataMat是已经转换成矩阵matrix形式的数据集,列表示特征;
其中的percentage表示取前多少个特征需要达到的方差占比,默认为0.'''
def pca(dataMat,percentage=0.9):
meanVals=mean(dataMat,axis=) #对每一列求平均值,因为协方差的计算中需要减去均值
meanRemoved=dataMat-meanVals covMat=cov(meanRemoved,rowvar=) #cov()计算方差
#是一个4*4的矩阵 即feature_size*feature_size
eigVals,eigVects=linalg.eig(mat(covMat)) #利用numpy中寻找特征值和特征向量的模块linalg中的eig()方法 k=eigValPct(eigVals,percentage) #要达到方差的百分比percentage,需要前k个向量 eigValInd=argsort(eigVals) #对特征值eigVals从小到大排序 eigValInd=eigValInd[:-(k+):-] #从排好序的特征值,从后往前取k个,这样就实现了特征值的从大到小排列 redEigVects=eigVects[:,eigValInd] #返回排序后特征值对应的特征向量redEigVects(主成分)
#投影就是直接矩阵乘法,两个向量做内机就是做投影,归结到矩阵就是矩阵乘法.
#其实不是投影,而是一个忽略了特征向量摸长的投影,所以这个做完了得到的是一个投影之后在主方向上再伸缩一下.
#这里周志华树里面给的特征向量组成的这个矩阵是u矩阵的. #重要性质:一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,证明显然.
#但是问题是直接通过numpy里面的eig得到的是正交的向量吗?只需要看下面的这个是不是除了对角线上全都是0
#经过实验还真不是.numpy给的是随便给的一个.
## print (redEigVects*redEigVects.T) lowDDataMat=meanRemoved*redEigVects #将原始数据投影到主成分上得到新的低维数据lowDDataMat
## print (redEigVects*redEigVects.T) #特征向量矩阵不是u矩阵
reconMat=(lowDDataMat*redEigVects.T)+meanVals #得到重构数据reconMat?没懂怎么重构的
#据我分析这里面乘以专职也就是一个近似的逆,然后得到后也是忽略方向的伸缩
#貌似这里面的专职就能达到乘以逆的效果,需要证明一下.这个证明也是显然的.
#总结一下就是直接做*redEigVects*redEigVects.T就达到了降为然后再你回去的效果.确实很方便.
return lowDDataMat,reconMat
a=pca(array([[,,,-],[,,,-],[,,,],[,,,],[,,,],[,,,]]))
print (a[])#这个输出的就是pca之后再变回去的数据 a=array([[,,,-],[,,,-],[,,,],[,,,],[,,,],[,,,]]) #下面是用库包来实现的,更少代码~~~~~~~~~~~~~~~~~~~~~~~~~
import numpy as np
from sklearn import decomposition
from sklearn import datasets
meanVals=mean(a,axis=)
pca = decomposition.PCA(n_components=)
pca.fit(a)
a = pca.transform(a) a = np.matrix(a)
b = np.matrix(pca.components_)
c = a * b c+=meanVals
print (c) #从结果看到完全一样.

pca总结,非常详细的更多相关文章

  1. PCA主成分分析Python实现

    作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/c ...

  2. t-SNE and PCA

    1.t-SNE 知乎 t-分布领域嵌入算法 虽然主打非线性高维数据降维,但是很少用,因为 比较适合应用于可视化,测试模型的效果 保证在低维上数据的分布与原始特征空间分布的相似性高 因此用来查看分类器的 ...

  3. 机器学习——主成分分析(PCA)

    1 前言 PCA(Principal Component Analysis)是一种常用的无监督学习方法,是一种常用的数据分析方法. PCA 通过利用 正交变换 把由 线性相关变量 表示的观测数据转换为 ...

  4. NLP 自然语言处理实战

    前言 自然语言处理 ( Natural Language Processing, NLP) 是计算机科学领域与人工智能领域中的一个重要方向.它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和 ...

  5. 详细且透彻的分析PCA原理

    前两天面试问到了PCA,感觉讲得不是很透彻,这里再次详细写一下. 首先定义如下变量的含义: X:Rn*m,n个样本m个属性,对于第i个样本xi:R1*m. W:Rm*k,k个正交的单位正交的列向量组成 ...

  6. PCA历程详细python代码(原创)

    #PCA主成分分析,原文为文末的链接,代码为自己亲自手码 def cov_out1(dx,dy): #第一步:求解x,y各自的均值 mean_x=0 mean_y=0 for i in range(l ...

  7. 机器学习基础与实践(三)----数据降维之PCA

    写在前面:本来这篇应该是上周四更新,但是上周四写了一篇深度学习的反向传播法的过程,就推迟更新了.本来想参考PRML来写,但是发现里面涉及到比较多的数学知识,写出来可能不好理解,我决定还是用最通俗的方法 ...

  8. 主成分分析 (PCA) 与其高维度下python实现(简单人脸识别)

    Introduction 主成分分析(Principal Components Analysis)是一种对特征进行降维的方法.由于观测指标间存在相关性,将导致信息的重叠与低效,我们倾向于用少量的.尽可 ...

  9. 主成分分析(principal components analysis, PCA)

    原理 计算方法 主要性质 有关统计量 主成分个数的选取 ------------------------------------------------------------------------ ...

随机推荐

  1. (3/24)轻松配置 webpack3.x入口、出口配置项

    在上一节中我们只是简单的尝了一下webpack的鲜,对其有了基本的了解,对于上一节当中的打包方式,在实际开发中并不使用,而是通过webpack的配置文件的方式进行设置的,所以该节就在上一节的基础上学一 ...

  2. xml转json的方法

    .第一种方法 使用JSON-JAVA提供的方法,之前一直使用json-lib提供的方法转json,后来发现了这个开源项目,觉得用起来很不错,并且可以修改XML.java中的parse方法满足自己的转换 ...

  3. Caused by: java.lang.IllegalStateException: Expected raw type form of org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$Match

    spring 4.0.2,mybatis 3.2.6,aspectjweaver 1.8.10 使用的时候,报错: Caused by: java.lang.IllegalStateException ...

  4. springVC + logback

    为什么用logback,而不是log4j? springmvc log只输出到console,不输出到文件 Spring MVC集成slf4j-logback springMVC如何配置logback ...

  5. Delphi Berlin 窗体代码分离风格 回到Delphi7传统风格

    回到Delphi7传统风格 Floating Form Designer You can now detach the form designer in both, VCL and FireMonke ...

  6. 前端-CSS-8-浮动与清楚浮动(重点)

    <!-- 浮动是css里面布局最多的一个属性 效果: 两个元素并排了,并且两个元素都能够设置宽度和高度 浮动想学好:一定要知道它的四个特性: 1.浮动的元素脱标 2.浮动的元素互相贴靠 3.浮动 ...

  7. 【337】Text Mining Using Twitter Streaming API and Python

    Reference: An Introduction to Text Mining using Twitter Streaming API and Python Reference: How to R ...

  8. hibernate 解决并发问题

    hibernate 解决并发问题的策略有 1)设置hibernate事务隔离级别 2)hibernate中乐观锁的实现 ps:版本号是由hibernate自己维护的,我们自己只需要做以上二步即可实现乐 ...

  9. js中对话框的使用

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)

    问题: python脚本涉及到复制文件,而我们需要兼容Windows.linux和mac环境 (Windows和linux的路径分隔符不同:通过os.path.sep查看分隔符)   如果用[路径名+ ...