模块名称:pca.py

PCA原理与紧致技巧原理待补。。。

#-*-coding:UTF-8-*-
'''
Created on 2015年3月2日
@author: Ayumi Phoenix ch01 p-14 图像的主成分分析
''' from PIL import Image
import numpy def pca(X):
"""主成分分析:
输入;矩阵X 每一行为一条训练数据
返回:投影矩阵(按照维度重要性排序),方差,和均值"""
X = numpy.asarray(X)
n_data,dim = X.shape # axis_0, axis_1 mean_X = X.mean(axis=0)
X -= mean_X if n_data < dim:
# 维数大于样本数,使用紧致技巧
R_sigma = numpy.dot(X,X.T) # m x m
eign_values, eign_vectors = numpy.linalg.eigh(R_sigma) # 返回H矩阵或对称阵的特征值和特征向量(递增顺序)
tmp = numpy.dot(X.T,eign_vectors) # (n2,m) x (m,m)
V = tmp[::-1] # 矩阵V每行向量都是正交的
S = numpy.sqrt(eign_values)
for i in xrange(V.shape[1]):
V[:,i] /= S
else:
# PCA - SVD
U,S,V = numpy.linalg.svd(X)
V = V[:n_data] # 仅仅返回前n_data维数据才合理 # 返回投影向量矩阵, 特征值开方, 均值
return V, S, mean_X if __name__=="__main__":
from PIL import Image
import numpy
import pylab
import imtools as imt path = r"E:\dataset lib\PCV_data\fontimages\a_thumbs"
imlist = imt.get_imlist(path)
im = numpy.array(Image.open(imlist[0]))
m,n = im.shape[0:2]
n_im = len(imlist) im_matrix = numpy.array([numpy.array(Image.open(each_im)).flatten()
for each_im in imlist],'f') V,S,im_mean = pca(im_matrix)
# 显示均值图像与前七个特征图
pylab.figure()
pylab.gray()
pylab.subplot(2,4,1)
pylab.imshow(im_mean.reshape(m,n))
for i in xrange(7):
pylab.subplot(2,4,i+2)
pylab.imshow(V[i].reshape(m,n)) # 从新投影为新样本
k = 10
print im_matrix.shape,V.shape
# 取V前k个特征向量
y = numpy.dot(im_matrix,V[0:k,:].T) # (m,n2) * ((k,n2).T) = [m,k]
print y.shape
# 显示还原图像
im_matrix_tidle = numpy.dot(y,V[0:k,:]) + im_mean
pylab.figure()
pylab.gray()
for i in xrange(8):
pylab.subplot(2,4,i+1)
pylab.imshow(im_matrix_tidle[i].reshape(m,n)) pylab.show() # 保存均值和主成分数据
import pickle
f = open('font_pca_models.pkl','wb')
pickle.dump(im_mean, f)
pickle.dump(V, f)
f.close() # 载入均值和主成分数据
import pickle
f = open('font_pca_models.pkl','rb')
im_mean = f.load(f) # 载入对象顺序必须和保存顺序一样
V = f.load(f)
f.close()

均值图片与前7个特征向量:

前7张图片降维后的还原图像

PCV 学习笔记-ch1 主成分分析实现的更多相关文章

  1. Neural Networks and Deep Learning学习笔记ch1 - 神经网络

    近期開始看一些深度学习的资料.想学习一下深度学习的基础知识.找到了一个比較好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是非常多的. ...

  2. Go语言并发与并行学习笔记(一)

    转:http://blog.csdn.net/kjfcpua/article/details/18265441 如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人. Go语言从语言层面上就 ...

  3. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  4. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  5. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  6. Deep Learning深入研究整理学习笔记五

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  8. java学习笔记01--数据类型

    java学习笔记01--数据类型 java数据类型划分 分为两大类型: 1)基本数据类型:类似于普通的值. 2)引用数据类型:传递的是内存的地址. 浮点类型实际上就是表示小数. java基本数据类型 ...

  9. 学习笔记(一)--->《Java 8编程官方参考教程(第9版).pdf》:第一章到六章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.违者本人不负法律责任.违法者自负一切法律责任. ...

随机推荐

  1. iOS8 针对开发者所拥有的新特性汇总如下

    iOS8 针对开发者所拥有的新特性汇总如下 1.支持第三方键盘 2.自带网页翻译功能(即在线翻译) 3.指纹识别功能开放:第三方软件可以调用 4.Safari浏览器可直接添加新的插件. 5.可以把一个 ...

  2. 修改PE文件的入口函数OEP

    修改入口函数地址.这个是最省事的办法,在原PE文件中新增加一个节,计算新节的RVA,然后修改入口代码,使其指向新增加的节.当然,如果.text节空隙足够大的话,不用添加新节也可以. BOOL Chan ...

  3. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

    在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2 ...

  4. tomcat http 文件下载

    tomcat作为http的下载服务器,网上有很多办法 但我认为最简单的是: 1.直接把文件放在 tomcat6/webapps/ROOT 目录下, 2.然后在网址中访问: http://120.194 ...

  5. 'NSInteger' (aka 'long') to 'int32

    怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32 ...

  6. mybatis 的 resulttype 和resultMap

    resultType适合返回值比较简单的,比如一个数据类型,或者一个对象.比如对象的情况,是将表的列名和对象的属性一一对应的. 但是resultType无法处理返回值比较复杂的,特别是连接查询,需要用 ...

  7. python文件打包格式,pip包管理

    1..whl是python文件的一种打包格式, 在有些情况下,可以将文件的后缀名改为.zip并解压 2.cmd中,提示pip版本太低,先升级pip   pip install --upgrade pi ...

  8. 获取一个 app 的 URL Scheme 的方法:

    获取一个 app 的 URL Scheme 的方法: 上这个网站 URL Schemes 查一下相应的 app 的 URL Scheme 是否有被收录 第一种方法没找到的话,把相应的 app 的 ip ...

  9. keil(持续更新)

    1函数格式提示 2  cording时有警告和错误提示 3 类的成员 提示

  10. Java(JVM运行时)各种内存区域详解及扩展

    本文整理于  Java内存与垃圾回收调优 Java 堆内存 从几个sample来学习Java堆,方法区,Java栈和本地方法栈 首先来一张图让我们理清楚java运行时状态: 诚然,如上图所示:java ...