本文出处:http://blog.csdn.net/xizhibei

=============================

PCA,也就是PrincipalComponents Analysis,主成份分析,是个非常优秀的算法,依照书上的说法:

寻找最小均方意义下,最能代表原始数据的投影方法

然后自己的说法就是:主要用于特征的降维

另外,这个算法也有一个经典的应用:人脸识别。这里略微扯一下,无非是把处理好的人脸图片的每一行凑一起作为特征向量,然后用PAC算法降维搞定之。

PCA的主要思想是寻找到数据的主轴方向,由主轴构成一个新的坐标系,这里的维数能够比原维数低,然后数据由原坐标系向新的坐标系投影,这个投影的过程就能够是降维的过程。

推导过程神马的就不扯了,推荐一个课件:http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf,讲得挺具体的

然后说下算法的步骤

1.计算全部样本的均值m和散布矩阵S,所谓散布矩阵同协方差矩阵;
2.计算S的特征值,然后由大到小排序;
3.选择前n'个特征值相应的特征矢量作成一个变换矩阵E=[e1, e2, …, en’];
4.最后,对于之前每个n维的特征矢量x能够转换为n’维的新特征矢量y:

y = transpose(E)(x-m)

最后还得亲自做下才干记得住:用Python的numpy做的,用C做的话那就是没事找事,太费事了,由于对numpy不熟,以下可能有错误,望各位大大指正

mat = np.load("data.npy")#每一行一个类别数字标记与一个特征向量
data = np.matrix(mat[:,1:])
avg = np.average(data,0)
means = data - avg tmp = np.transpose(means) * means / N #N为特征数量
D,V = np.linalg.eig(tmp)#DV分别相应特征值与特征向量组成的向量,须要注意下的是,结果是自己主动排好序的,再次膜拜numpy OTL
#print V
#print D
E = V[0:100,:]#这里仅仅是简单取前100维数据,实际情况能够考虑取前80%之类的
y = np.matrix(E) * np.transpose(means)#得到降维后的特征向量 np.save("final",y)

另外,须要提一下的是OpenCV(无所不能的OpenCV啊OTL)中有PCA的实现:

void cvCalcPCA( const CvArr* data,//输入数据
CvArr* avg, //平均(输出)
CvArr* eigenvalues, //特征值(输出)
CvArr* eigenvectors, //特征向量(输出)
int flags );//输入数据中的特征向量是怎么放的,比方CV_PCA_DATA_AS_ROW

最后,说下PCA的缺点:PCA将全部的样本(特征向量集合)作为一个总体对待,去寻找一个均方误差最小意义下的最优线性映射投影,而忽略了类别属性,而它所忽略的投影方向有可能刚好包括了重要的可分性信息

嗯,最后的最后——好了,没了,的确是最后了

强烈推荐:一篇能把PAC说得非常透彻的文章《特征向量物理意义》:http://blog.sina.com.cn/s/blog_49a1f42e0100fvdu.html

关于PCA算法的一点学习总结的更多相关文章

  1. PCA算法学习(Matlab实现)

    PCA(主成分分析)算法,主要用于数据降维,保留了数据集中对方差贡献最大的若干个特征来达到简化数据集的目的. 实现数据降维的步骤: 1.将原始数据中的每一个样本用向量表示,把所有样本组合起来构成一个矩 ...

  2. OpenCV学习(35) OpenCV中的PCA算法

    PCA算法的基本原理可以参考:http://www.cnblogs.com/mikewolf2002/p/3429711.html     对一副宽p.高q的二维灰度图,要完整表示该图像,需要m = ...

  3. PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击!

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第27文章,我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法. 我们都知道,图片 ...

  4. PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?

    PCA, Principle Component Analysis, 主成份分析, 是使用最广泛的降维算法. ...... (关于PCA的算法步骤和应用场景随便一搜就能找到了, 所以这里就不说了. ) ...

  5. Netflix工程总监眼中的分类算法:深度学习优先级最低

    Netflix工程总监眼中的分类算法:深度学习优先级最低 摘要:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain根据奥卡姆剃刀原理依次推荐了逻辑回归.SVM.决策树 ...

  6. 用Python实现随机森林算法,深度学习

    用Python实现随机森林算法,深度学习 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩 ...

  7. 关联规则算法Apriori的学习与实现

    转自关联规则算法Apriori的学习与实现 首先我们来看,什么是规则?规则形如"如果-那么-(If-Then-)",前者为条件,后者为结果.关联规则挖掘用于寻找给定数据集中项之间的 ...

  8. Raft算法,从学习到忘记

    Raft算法,从学习到忘记 --Raft算法阅读笔记. --Github 概述 说到分布式一致性算法,可能大多数人的第一反应是paxos算法.但是paxos算法一直以来都被认为是难以理解,难以实现.S ...

  9. 模式识别(1)——PCA算法

    作者:桂. 时间:2017-02-26  19:54:26 链接:http://www.cnblogs.com/xingshansi/articles/6445625.html 声明:转载请注明出处, ...

随机推荐

  1. 关于反射的一个小问题---.NetFrameWork版本不一样导致不同的系统的问题

    背景: 近期项目中用到发射,本人的电脑上是安装了.NetFrameWork 4.5,然后用着发射蛮顺溜的,啪啪,三下五除二,项目完成了,然后提交测试了,测试的电脑是虚拟机上安装了xp系统,然后.Net ...

  2. subversion和客户端的应用

    1.安装svn的服务器端subversion.以及windows客户端TortoiseSVN: 2 cmd 建立库,名字为svnpro ----- svnadmin create F:\svnpro, ...

  3. Java Socket编程 标准范例(多线程)

    链接地址:http://blog.csdn.net/benweizhu/article/details/6615542 服务器端(Server)非多线程 package com.zeph.server ...

  4. 覆盖与重载与隐藏——SAP电面(3)

    参考:http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520634042 8.2.1 重载与覆盖 成员函数被重载的特征: (1)相同的范围 ...

  5. 【Cocos2D-x 3.5实战】坦克大战(2)游戏开始界面

    关于游戏的素材都是在网上到处搜集到的,然后自己再用二流的ps技术修修改改的,所以有可能混在一起有点不搭调(没有办法啊,没有美工Orz.. 项目已经建立好了,然后我们需要把我们下载的素材放到Resour ...

  6. Hibernate学习之延迟加载

    转自:http://www.cnblogs.com/xiaoluo501395377/p/3371776.html 在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通 ...

  7. win7系统无线 VirtualBox rehat 32位linux 下 host-only模式相互通信及上网 配置

    虚拟机环境:virtualBox虚拟环境 redhat 32位 主机环境 : win7 无线路由 模式: host-only win7下nat模式原先的设置基于 有网线连接的情形下,在使用了无线路由之 ...

  8. delphi webbrowser 经常用法演示样例

    var Form : IHTMLFormElement ; D:IHTMLDocument2 ; begin with WebBrowser1 do begin D := Document as IH ...

  9. Android蓝牙开发深入解析

    1. 使用蓝牙的响应权限  代码如下: <uses-permission android:name="android.permission.BLUETOOTH" /> ...

  10. xls与csv文件区别?

    xls 文件就是Microsoft excel电子表格的文件格式.CSV是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中. 此文件,一行即为数据表的一行.生成数据表字段用半角逗号隔 ...