关于支持向量机SVM,这里也只是简单地作个要点梳理,尤其是要注意的是SVM的SMO优化算法、核函数的选择以及参数调整。在此不作过多阐述,单从应用层面来讲,重点在于如何使用libsvm,但对其原理算法要理解。

SVM理论推导是有些复杂的,关键是怎么把目标函数在约束条件下,最终转化为一个凸二次优化问题。在这里推荐一个写的比较经典的文章,july的博客里的一篇文章《支持向量机通俗导论(理解SVM的三层境界)》,博文链接:http://blog.csdn.net/v_july_v/article/details/7624837

一、步骤

1.找最大分类间隔

2.定目标函数

3.计算α值(不断调整训练)与ω值

4.SMO(串行最小化)可以优化算法

5.核函数对高维数据处理

二、SVM要点

要学会如何使用libsvm以及一些参数的调节经验,另外需要理清楚svm算法的一些思路:

1.svm中最优分类面是对所有样本的几何裕量最大,即

经过一系列推导可得为优化下面原始目标:

注意:选择最大间隔分类器的原因:因为几何间隔与样本的误分次数存在关系:误分次数≤(2R/δ)^2,其中的分母就是样本到分类间隔距离,分子中的R是所有样本中的最长向量值。

2.拉格朗日理论:

  可以将1中的优化目标转换为拉格朗日的形式(通过各种对偶优化,KKD条件),最后目标函数为:

 我们只需要最小化上述目标函数,其中的α为原始优化问题中的不等式约束拉格朗日系数。

3. 对2中最后的式子分别w和b求导可得:

 由上面第1式子可以知道,如果我们优化出了α,则直接可以求出w了,即模型的参数搞定。而上面第2个式子可以作为后续优化的一个约束条件。

4. 对2中最后一个目标函数用对偶优化理论可以转换为优化下面的目标函数:

 而这个函数可以用常用的优化方法求得α,进而求得w和b。

5. 按照道理,svm简单理论应该到此结束。不过还是要补充一点,即在预测时有:

 那个尖括号我们可以用核函数代替,这也是svm经常和核函数扯在一起的原因。

6. 最后是关于松弛变量的引入,(因为之前的推导条件太苛刻,其实在分类过程中会出现噪声,如果对噪声零容忍,那么可能导致分类误解,为了解决此问题故引入松弛变量

因此原始的目标优化公式为:

 此时对应的对偶优化公式为:(对偶公式:就是同一值,目标函数倒过来,min化为max)

 与前面的相比只是α多了个上界。

三、算法流程

对于样本数很多时(几千个),SVM所需要的内存很大,对于此问题,目前的解决方法有2种:块算法和分解算法。

这里libsvm采用的是分解算法里的SMO(串行最小化),其每次训练都只选择2个样本,基本流程图如下:

这里有两个重要算法:一个是α的选择,一个是α的更新

(1) α的选择:选择2个和KKT条件违背最严中的两个αi,包含两层循环…

(2) α的更新:…

四、优缺点

优点:

1.可用于线性/非线性分类,也可用于回归

2.低泛化误差

3.容易解释,计算复杂度低

缺点:

1.对参数和核函数选择敏感

2.原始SVM只擅长处理二分类问题

【机器学习】支持向量机SVM的更多相关文章

  1. 机器学习——支持向量机SVM

    前言 学习本章节前需要先学习: <机器学习--最优化问题:拉格朗日乘子法.KKT条件以及对偶问题> <机器学习--感知机> 1 摘要: 支持向量机(SVM)是一种二类分类模型, ...

  2. 吴裕雄 python 机器学习——支持向量机SVM非线性分类SVC模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...

  3. 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析

    SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...

  4. coursera机器学习-支持向量机SVM

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  5. 机器学习-支持向量机SVM

    简介: 支持向量机(SVM)是一种二分类的监督学习模型,他的基本模型是定义在特征空间上的间隔最大的线性模型.他与感知机的区别是,感知机只要找到可以将数据正确划分的超平面即可,而SVM需要找到间隔最大的 ...

  6. 机器学习——支持向量机(SVM)

    支持向量机原理 支持向量机要解决的问题其实就是寻求最优分类边界.且最大化支持向量间距,用直线或者平面,分隔分隔超平面. 基于核函数的升维变换 通过名为核函数的特征变换,增加新的特征,使得低维度空间中的 ...

  7. 机器学习支持向量机SVM笔记

    SVM简述: SVM是一个线性二类分类器,当然通过选取特定的核函数也可也建立一个非线性支持向量机.SVM也可以做一些回归任务,但是它预测的时效性不是太长,他通过训练只能预测比较近的数据变化,至于再往后 ...

  8. 机器学习——支持向量机(SVM)之核函数(kernel)

    对于线性不可分的数据集,可以利用核函数(kernel)将数据转换成易于分类器理解的形式. 如下图,如果在x轴和y轴构成的坐标系中插入直线进行分类的话, 不能得到理想的结果,或许我们可以对圆中的数据进行 ...

  9. 机器学习——支持向量机(SVM)之Platt SMO算法

    Platt SMO算法是通过一个外循环来选择第一个alpha值的,并且其选择过程会在两种方式之间进行交替: 一种方式是在所有数据集上进行单遍扫描,另一种方式则是在非边界alpha中实现单遍扫描. 所谓 ...

  10. 机器学习:Python中如何使用支持向量机(SVM)算法

    (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...

随机推荐

  1. ios中实现对UItextField,UITextView等输入框的字数限制

    本文转载至 http://blog.sina.com.cn/s/blog_9bf272cf01013lsd.html 2011-10-05 16:48 533人阅读 评论(0) 收藏 举报 1.    ...

  2. 如何理解API,API 是如何工作的

    大神博客:https://blog.csdn.net/cumtdeyurenjie/article/details/80211896

  3. 【BZOJ2597】[Wc2007]剪刀石头布 最小费用流

    [BZOJ2597][Wc2007]剪刀石头布 Description 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之 ...

  4. 在调用Response.End()时,会执行Thread.CurrentThread.Abort()操作

    在调用Response.End()时,会执行Thread.CurrentThread.Abort()操作. 如果将Response.End()放在try...catch中,catch会捕捉Thread ...

  5. restlet验证

    1 restlet有无认证对比 无认证: 客户端发起请求 -----> 服务器路由 -----> 访问服务端资源 有认证: 客户端发起请求 -----> 认证 ----->服务 ...

  6. Netty聊天室-源码

    目录 Netty聊天室 源码工程 写在前面 [百万级流量 聊天室实战]: [分布式 聊天室] [Spring +Netty]: [Netty 原理] 死磕 系列 [提升篇]: [内力大增篇]: 疯狂创 ...

  7. Oracle | PL/SQL Check约束用法详解

    1. 目标 实例讲解在Oracle中如何使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表的列中增加额外的限制条件. 注: CHECK约束不能在VIEW中 ...

  8. Qt & MySQL

    Qt中如何进行MySQL连接与操作步骤: 1.向工程中的.pro文件增加QT += sql; 2.写一个通用的数据库连接类(Connect),一个static方法(CreateConnection), ...

  9. ubuntu16.04下安装wordpress

    安装过程 http://blog.topspeedsnail.com/archives/4635 http://blog.topspeedsnail.com/archives/4646 碰到的问题 1 ...

  10. debian下烧写stm32f429I discovery裸机程序

    需要安装openocd软件.如果已安装默认的openocd,需要先卸载系统默认的openocd(默认版本是0.5.0,版本太低),然后再安装. 在安装前需要安装libusb库文件: -dev libu ...