PCV 学习笔记-ch1 主成分分析实现
模块名称: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 主成分分析实现的更多相关文章
- Neural Networks and Deep Learning学习笔记ch1 - 神经网络
近期開始看一些深度学习的资料.想学习一下深度学习的基础知识.找到了一个比較好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是非常多的. ...
- Go语言并发与并行学习笔记(一)
转:http://blog.csdn.net/kjfcpua/article/details/18265441 如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人. Go语言从语言层面上就 ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Hadoop学习笔记(5) ——编写HelloWorld(2)
Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...
- Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)
1.File类:对硬盘上的文件和目录进行操作的类. File类是文件和目录路径名抽象表现形式 构造函数: 1) File(String pathname) Creat ...
- Deep Learning深入研究整理学习笔记五
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记01--数据类型
java学习笔记01--数据类型 java数据类型划分 分为两大类型: 1)基本数据类型:类似于普通的值. 2)引用数据类型:传递的是内存的地址. 浮点类型实际上就是表示小数. java基本数据类型 ...
- 学习笔记(一)--->《Java 8编程官方参考教程(第9版).pdf》:第一章到六章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.违者本人不负法律责任.违法者自负一切法律责任. ...
随机推荐
- java之通过反射,来获得某对象的所有方法(类方法提取器)
参考Thinging in Java 在编程时, 如果不记得一个类是否有某个方法,或者不知道一个类究竟能做些什么,而又不想通过索引或 类的层次结构去查找jdk文档,这时通过反射的小工具能节省很多时间. ...
- [Js]JavaScript闭包和范围的快速测试
1. if (!("a" in window)) { var a = 1; } alert(a); [分析]代码含义:如果window不包含属性a,就声明一个变量a并赋值为1 ①J ...
- 牛场围栏(vijos 1054)
题目大意: 给出N种木棍(每种木棍数量无限)的长度(<=3000),每根木棍可以把它切掉[1,M]的长度来得到新的木棍. 求最大的不能被组合出来的长度. 如果任何长度都能组合出来或者最大值没有上 ...
- C++封装库
1.新建项目 -> Win32项目 选择DLL , 勾选 空项目 , 点击完成. 2.本例程,使用一个CPP文件 , 及一个头文件. 其中头文件包含函数声明,CPP文件实现函数声明. 3. ...
- SO从 \u 这样的字符串 构建对象
ShowMessage(SO('\u4F18\u8D28\u670D\u52A112').AsString); 正确 得到 优质服务12 ShowMessage(so( 个数字,后面的中文未能解析出.
- C- struct的使用
数组是二等公民,不能进行整体赋值,或者参数传递,或者作为返回值. But!如果封装在struct内部,就完全不一样了 #include <iostream> using namespace ...
- hadoop 8步走
1.1读取hdfs中的文件.每一行解析成一个<k,v>.每一个键值对调用一次map函数 解析成2个<k,v>,分别是<0, hello you>< ...
- 上架app 到app store 的出现: “The IPA is invalid. It does not inlude a Payload directory.”错误处理
今天打包上传app到app store上遇到的一个错误,在xcode6.2下提示: The IPA is invalid. It does not inlude a Payload director ...
- innerHTML..innerText..textContent
/* * innerText和textContent 都是设置文字内容的,如果设置的内容当中有标签,也会直接的以文本的方式显示(标签的<>都会按照转义的方式进行解析) * innerTex ...
- keychain 中的概念理解
kSecAttrAccessible 这个属性控制Keychain中的一个Item什么时候可以被访问,可选值有:kSecAttrAccessibleWhenUnlocked, kSecAttrAcce ...