zoukankan      html  css  js  c++  java
  • SVM支持向量机的基本原理

    SVM支持向量机的基本原理

    对于很多分类问题,例如最简单的,一个平面上的两类不同的点,如何将它用一条直线分开?在平面上我们可能无法实现,但是如果通过某种映射,将这些点映射到其它空间(比如说球面上等),我们有可能在另外一个空间中很容易找到这样一条所谓的“分隔线”,将这些点分开。
    SVM基本上就是这样的原理,但是SVM本身比较复杂,因为它不仅仅是应用于平面内点的分类问题。SVM的一般做法是:将所有待分类的点映射到“高维空间”,然后在高维空间中找到一个能将这些点分开的“超平面”,这在理论上是被完全证明了是成立的,而且在实际计算中也是可行的。
    但是仅仅找到超平面是不够的,因为在通常的情况下,满足条件的“超平面”的个数不是唯一的。SVM需要的是利用这些超平面,找到这两类点之间的“最大间隔”。为什么要找到最大间隔呢?我想这与SVM的“推广能力”有关,因为分类间隔越大,对于未知点的判断会越准确,也可以说是“最大分类间隔”决定了“期望风险”,总结起来就是:SVM要求分类间隔最大,实际上是对推广能力的控制。
    我想说到SVM的基本原理,有两个概念不能不提到,一个就是上面说到的“最大分类间隔面”,另一个是关于“VC”的概念。最大分类间隔面比较好懂,从字面上也能知道它的大致含义。但是VC维的概念,我有必要在这里着重说一下。
    VC维(Vapnik-Chervonenkis Dimension)的概念是为了研究学习过程一致收敛的速度和推广性,由统计学习理论定义的有关函数集学习性能的一个重要指标。
    传统的定义是:对一个指标函数集,如果存在H个样本能够被函数集中的函数按所有可能的2的K次方种形式分开,则称函数集能够把H个样本打散;函数集的VC维就是它能打散的最大样本数目H。若对任意数目的样本都有函数能将它们打散,则函数集的VC维是无穷大,有界实函数的VC维可以通过用一定的阀值将它转化成指示函数来定义。
    VC维反映了函数集的学习能力,VC维越大则学习机器越复杂(容量越大),遗憾的是,目前尚没有通用的关于任意函数集VC维计算的理论,只对一些特殊的函数集知道其VC维。例如在N维空间中线形分类器和线形实函数的VC维是n+1。
    好了,说了很多关于支持向量机的东东,我想如果要想对它有比较全面的认识的话,必须花大量的时间去深入研究。不过正是因为SVM在应用方面有很广阔的前景,所以目前有很多人在关注着这个问题。我是抱着一种学习的心态,希望能够和更多的人共同交流。
    经过大概一个多月的努力,我用MATLAB实现了SVM的基本功能,做出了软件的雏形,不过因为公司网站建设的缘故,所以对SVM的应用研究也暂时告以段落。不过在不远的将来,公司将在这方面会有更大的投入,研发部门将对这个新的课题进行深入的研究。
  • 相关阅读:
    Java 和 DynamoDB
    关于Mongodb的全面总结
    utf8mb4 使用注意
    mysql 事务隔离讲的比较好的文章收藏。
    [mysql] 常用命令总结
    [JTA] Java事务api
    [Hibernate] Hibernate 参数设置一览表(转)
    Spring配置sessionFactory的几种常用方式
    [前端] org.apache.jasper.JasperException 页面有空引用
    [Hibernate] JPA与Hibernate的优缺点
  • 原文地址:https://www.cnblogs.com/mazg/p/6171437.html
Copyright © 2011-2022 走看看