2006-12-3
SVM及其他
最近忙于模式识别的作业--SVM,调了一整天就是不行。后发现是讲义的公式有个地方+-号反了......在截止前4分钟把程序交了过去。
正好做完了NN和SVM两个分类器,小小总结一下。
1、相关知识
什么是模式分类(模式识别)?举个简单的例子:工厂对打上来的鱼进行分类,不同种类的鱼处理方式不同。可是鱼的数量过大,人工分类不现实,怎么让计算机帮我们分类?你可能需要机器测量鱼的重量、尺寸、颜色等信息,然后将这些参数输入计算机,计算机会通过这些特征,判断鱼的种类。
关键在于,怎么通过特征得到鱼的分类?开始,计算机一无所知,我们需要给它一定的样本数据,告诉它这些样本分别属于什么类别,计算机通过学习掌握每种鱼的特征,最后应用到实际中去。这种分类应用面很广,比如书写识别、语音识别、邮政编码识别等等。
我们怎么找到一种计算机学习的方法,使得分类错误率尽量的小。
2、NN--神经网络模型
神经网络源于人们希望模拟人脑构造的设想。将一个神经元抽象为一种多输入,加权求和后输出的模型。只有当加权求和的值到达某个限度,神经元才会“兴奋”。反复的“兴奋”可以增强输入的权重,从而达到学习的目的。
单层神经模型实际很早就提出了,不过自从牛人证明其只能线性分类时,人们就失望的把它扔到垃圾堆。直到80年代,多层感知机的研究兴起,有人证明只要神经元足够多,多层感知机可以逼近任意连续函数。这个结论实际是激动人心的,而反向传播算法(BP)又成功解决了具体算法问题。神经网络的研究,再次走向高潮。
个人感觉,虽然每个神经元的构造十分简单,但是BP算法的仍旧实现复杂,庞大的网络使得学习速度缓慢。难道人脑也是通过BP算法构造的么?似乎,神经网络已渐渐背离发明时的初衷。
3、SVM--支持向量机
如果说神经网络来源于“仿生”灵感,那么SVM则有着纯数学血统,它的兴起只是近几年的事。
为什么分类困难?因为特征的提取是复杂的。相当多时候,并不是“长度小于10的鱼是热带鱼,大于10的就是带鱼”这么简单。
分类的本质,实际是我们在测量数据的空间内,试图找到一个面将空间中的2类隔离开。但是事实证明,即使存在这样的分类平面,它也很可能是弯曲复杂到不可想象的。所以,在原始数据空间内分类,是自寻烦恼。SVM方法将数据映射到一个高维空间,在这个空间中,也许一个“平”面就能轻易把两类分开。如果这种平面有很多,我们就选择能把2类分的最远的作为分类面。
这种分类方法有很多优良性质,比如分类平面仅取决于那些分类边沿的数据(即支持向量),这保证了稍改换样本数据不会对分类面有很大影响,似乎更符合我们的直觉,并且不易造成对样本的过分依赖。
写程序的感觉是,SVM的实现反而比NN简单,而且有了SMO算法学习速度更是惊人,实验结果非常好。这也是SVM最近成为研究主流的原因吧。
ps.我尽量用最通俗的话叙述了,各位看官是不是看明白了-_-...
