支持向量机(SVM)是当前非常流行的监督学习方法,其核心主要有两个:

  1. 构造一个极大边距分离器——与样例点具有最大可能距离的决策边界;
  2. 将在原输入空间中线性不可分的样例映射到高维空间中,从而进行线性分离。并且使用核技巧来避免高维度空间的运算所带来的巨大时间复杂度。

极大边距分离器

假设我们想构造一个线性分类器,如下图所示:

我们有无数的选择,那么哪个选择才是最优的呢?直观上观察,我们希望选择距离样例最远的分类器,因为分类器距离样例越近,那么当与该样例相近的真实样例很有可能就落在了直线的另一边,从而被错误分类。SVM把这样一个分类器叫做极大边距分离器

如上图中的中间的那条实线就是我们想要找的极大边距分离器

极大边距分离器的发现

分离器定义为点的集合{x:wx + b = 0},我们的任务就是找到w。这样当新样例x来的时候,我们带入y = w • x + b中,如果y >= 1则为正类;y <= -1则为负类;如果在(-1,1)之间则拒绝分类。
为了找到w,我们需要求解最大化下列公式的α:

并满足约束:

求得α后,通过下列公式可以求得w

核技巧

当样例在原输入空间线性不可分的时候,我们发现将样例映射到高维空间中就可以轻易将样例分离开来:

例如上图,我们把a)中的样例(x1, x2)映射成向量F(x) = (z1, z2, z3), 其中:

z1 = x12
z2 = x22
z3 = 2 x1x2

于是我们将F(xi) • F(xj) 取代下列公式中的xixj

从而求得在高维空间中的线性分离器。
但是我们可以发现:
   F(xi) • F(xj) = (xixj)2
因此我们可以先求xjxj,再平方求得F(xi) • F(xj)。我们称:
   K(xixj) = (xixj)2
为核函数。
因为在一些情况中xixj的维度可能会远远小于F(xi)和F(xj),因此使用核函数进行求解可以避免在高维度空间进行计算,从而大大减小时间复杂度。

总结

最后总结下SVM学习算法的基本步骤:

  1. 求解下列最优化问题:

    并满足约束:

  2. 计算最优权值w:
  3. 将真实样例x代入下列公式中对其进行分类。
    y = w • x + b

参考资料

SVM(支持向量机)详解
SVM速览

机器学习之SVM(支持向量机)的更多相关文章

  1. 机器学习 - 算法 - SVM 支持向量机

    SVM 原理引入 支持向量机( SVM,Support Vector Machine ) 背景 2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要 ...

  2. 机器学习进阶-svm支持向量机

    支持向量机需要解决的问题:找出一条最好的决策边界将两种类型的点进行分开 这个时候我们需要考虑一个问题,在找到一条直线将两种点分开时,是否具有其他的约束条件,这里我们在满足找到一条决策边界时,同时使得距 ...

  3. 机器学习之SVM支持向量机

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 简介 支持向量机(support vector machine),简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义 ...

  4. 机器学习 - 算法 - SVM 支持向量机 Py 实现 / 人脸识别案例

    SVM 代码实现展示 相关模块引入 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy i ...

  5. 机器学习(四) SVM 支持向量机

    svr_linear = SVR('linear') #基于直线 svr_rbf = SVR('rbf') #基于半径 svr_poly = SVR('poly') #基于多项式

  6. 机器学习实战 - 读书笔记(06) – SVM支持向量机

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...

  7. OpenCV机器学习库函数--SVM

    svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变. opencv中的svm分类代码,来源于libsvm. #include "o ...

  8. 6-11 SVM支持向量机2

    SVM支持向量机的核:线性核.进行预测的时候我们需要把正负样本的数据装载在一起,同时我们label标签也要把正负样本的数据全部打上一个label. 第四步,开始训练和预测.ml(machine lea ...

  9. 机器学习:SVM

    SVM 前言:支持向量机(Support Vector Machine, SVM),作为最富盛名的机器学习算法之一,其本身是一个二元分类算法,为了更好的了解SVM,首先需要一些前提知识,例如:梯度下降 ...

  10. Python实现SVM(支持向量机)

    Python实现SVM(支持向量机) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end ...

随机推荐

  1. HDU 5742 It's All In The Mind (贪心)

    It's All In The Mind 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5742 Description Professor Zhan ...

  2. android 脸部抠图

    原帖:http://www.eoeandroid.com/thread-205445-1-1.html package com.face; import android.app.Activity; i ...

  3. java操作redis之jedis篇

    首先来简单介绍一下jedis,其实一句话就可以概括的,就是java操作redis的一种api.我们知道redis提供了基本上所有常用编程语言的clients,大家可以到http://redis.io/ ...

  4. 下载Xml文件方法

    #region 下载Xml文件方法 //定义委托 private delegate void DownLoadDelegate(string url, string filename); privat ...

  5. 离散信号MATLAB频谱分析程序

    from http://blog.csdn.net/u012129372/article/details/26565611 %FFT变换,获得采样数据基本信息,时域图,频域图 %这里的向量都用行向量, ...

  6. [JS 基础] touchEvent中的changedTouches,targetTouches和touches的区别

    对于移动端开发中 touchEvent(触摸事件) 中changedTouches,targetTouches和touches的区别往往不容易弄清,故特意查询了 MDN相关资料 1. 其中,对 cha ...

  7. U3D中的协同等待函数

    WaitForSeconds.WaitForseconds等待函数; 创建一个yield指令,来等待给定的秒数; using UnityEngine; using System.Collections ...

  8. Squid 日志详解

    原文地址: http://www.php-oa.com/2008/01/17/squid-log-access-store.html access.log 日志 在squid中access访问日志最为 ...

  9. 【M22】考虑以操作符复合形式(op=)取代其独身形式(op)

    1.对于内置类型,x = x+y 与x+=y的结果相同. 2. x=x+y 与 x+=y的结果相同,但二者做的事情差别很大. a.x=x+y做的事情:方法内有个局部对象,值为x+y,返回局部对象,返回 ...

  10. iOS开发笔记系列-基础5(分类和协议)

    分类 在Objective-C中,除了通过新建子类的方式来向类添加新方法外,还可以通过分类的方式.分类提供了一种简单的方式,将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式, ...