一点PCA与LDA的理解

目标:为提高速度,需要对SVM的训练数据进行降维,训练后的model要继续处理与训练数据同样大小的测试数据。因此必须保留PCA之后的映射矩阵,用于对测试数据进行降维预处理。并且,我所需要的PCA要含有一个解释程度的阈值,以表达降维后的数据对原始数据的解释程度。

经wu同学提醒,测试数据必须经过与训练数据完全一致的预处理过程,也就是说,测试数据不仅要PCA降维,还要去均值化,这个均值是训练数据的均值!!


1. PCA

【数学原理】写的很好:http://blog.codinglabs.org/articles/pca-tutorial.html

我试图调用MATLAB自己的pca处理函数(pca.m/princomp.m),但搞不清坨他的输出和映射矩阵到底是什么关系,而且也没有解释程度阈值设定。。。

时间紧迫,直接用最基础的办法——自己写代码来实现了。(另外,faruto优化后的libsvm内含pcaForSVM.m,有解释程度阈值,研究研究应该也可以直接用于我的实验。)

主要就是三步:去均值化、求协方差矩阵、特征值、特征向量,最后根据解释程度提取前k维。

输入:data,threshold;输出:映射矩阵U、均值mean、pca_data

(网上可以找到PCA实现的很多帖子,都可以借鉴)。


新的测试数据x:U‘*x-mean——就是预处理之后的数据了……

从我的实验来看,1024维的原始数据,解释程度设为95%,降维过后大概是200维左右。对我的svm结果没有太大影响,似乎还有所提高。(之后再做具体对比实验吧。。。)


说到这里,回到本文第一句话,我的目标是……提高速度啊。。。

实验证明,PCA本身占用的时间资源+降维后的训练过程 比 未降维的SVM 只有非常微小的速度优势……雅蠛蝶!(跑其中一个序列,0.599ps VS. 0.478ps,哭)


2. LDA

之前粗略的看了一下降维工具性drtoolbox的一些介绍,包含很多种降维处理方法。

博文 http://blog.csdn.net/xiaowei_cqu/article/details/7522368  做了几个主流方法的对比试验,我对LDA的速度很心动啊。。。

加上LDA是最大化两类间距,最小类内距离,为分类而生!决定试一试。

看了《机器学习》周志华老师的书,发现LDA对于二分类只能投影到一维

原理解读 http://blog.csdn.net/jojozhangju/article/details/19616481 这篇说的更加具体了。

结论:LDA降维适用于降维后直接分类,而不是再通过训练分类……


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值