前言

           以下内容是个人学习之后的感悟,转载请注明出处~

简介

  支持向量机(support vector machine),简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特

征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

原理

SVM代价函数

  支持向量机的代价函数和逻辑回归的代价函数十分相似,因为前者可以从后者中衍化出来。如下图所示,其实,支

持向量机的代价函数只是把逻辑回归的代价函数里的项进行了项替换(这里是相似项,并不对等,从图中可以看出),

并且把1/m去掉了(因为这是无关紧要的)。这时,大家都会觉得奇怪,为什么要替换项呢?替换了之后达到了什么效

果呢?

  事实上,项替换了之后,我们可以在上图清晰地看到,cost1(z)和cost2(z)项的曲线图近似于原来逻辑回归中对应项的

曲线,但是这两项比原来更直观,从上图中可以看出,要想最小化代价函数,则:

  • 如果y=1,我们希望θTx≥1;
  • 如果y=0,我们希望θTx≤-1;

SVM最大间隔超平面

  首先,介绍一下向量内积,设有两个向量uv,则uTv=p·||u||,其中p为vu上映射的长度。如下图所示:

  那么,如何将上面这个数学原理用到SVM中呢?其实很简单,将uv分别替换为θx即可,则θTx=p·||θ||。既然要求

最大间隔,那么只需各个样本特征值的p的值越大,那么超平面(即下图中绿色线)与样本点的间隔越大,分类效果更好。不

过p不能无限制的大,还要满足下图中的约束公式,即p尽量大,θ尽量小,使得代价函数更小,得到最大间隔超平面。

  接下来,我们看一下SVM分类最大间隔超平面的效果图,下面右图是我们需要的效果,分类效果更加好。

核函数kernels

  上面都是讲解线性可分的问题,那么,对于线性不可分问题,SVM该如何做呢?对,就是引入核函数,将低维的数据映

射到高维来解决线性不可分问题。目前,常用的核函数有以下几种:

线性核函数(也称无核)

多项式核函数  

高斯核函数(RBF)  

sigmoid核函数   

  那么如何选择核函数呢?本文做以下概述:

  • 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
  • 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
  • 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

  本文将会以较为常见的高斯核函数来讲解核函数在SVM中的作用。下图是

  我们可以构造一个如上图中所写的多项式特征变量,来区分正负样本。这种多项式还可以写成上图中的:
其中除了这种表达,还能不能有更好的其他选择去表示特征。这就要引入核函数(kernels),
核函数是一种更好的表达。我们可以通过计算原始向量与landmark之间的相似度来表示特征,如下图所示:
 
                                                         
 
  当然还可以用其他的函数来计算相似度,只不过这个例子中使用的高斯核函数。我们来看上图中计算的公式,其中:
因此,我们能够发现:
  • 时,
  • 距离很远时,
  因此给定一个样本上图中landmark(标记点)会定义出新的特征变量 
  下面我们来看看根据计算出的特征怎样去分类样本。如下图所示:
 
                                                         
 
  假设当时,我们预测样本类别为“1”,假设我们已经求得,那
么对于图中给定的样本x,我们可以计算出,那么代入上式可得:
因此预测样本x的类别“1”。因此如果计算大量的样本,就能得出一个非线性的决策边界,如图所示:
 
                                                         
 
 
  那么现在有一个问题就是,我们是怎样选择得到的,下面来介绍是如何得到的。
  在刚开始,我们只需把训练集中的样本一一对应成即可,即给定
如下图所示:
                                         
 
  因此,若给定一个训练样本,能够得到如下特征:
                                          
  其中
  因此,带核函数的SVM(SVM with kernels)的代价函数变为:
 
                            
  关于SVM的核函数(kernels)就介绍到这,下面来看看SVM中参数的选择问题(主要是参数该如何选择):
 
                           
实践中使用SVM
  在实际使用SVM的时候,不建议大家自己实现SVM,因为SVM是一个特定的优化问题。目前已经有非常成熟并且
高度优化的软件包,如国立台湾大学林智仁教授开发的liblinear(http://www.csie.ntu.edu.tw/~cjlin/liblinear/)和LibSVM(http://www.csie.ntu.edu.tw/~cjlin/libsvm/),非常出名。但是我们依然需要做的是以下两点:
           
 

以上是全部内容,如果有什么地方不对,请在下面留言,谢谢~

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 机器学习:SVM

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

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

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

随机推荐

  1. java开始到熟悉105-107

    1,HashMap基本用法 package list; import java.util.HashMap; import java.util.Map; /** * 测试map的基本用法 * @auth ...

  2. CentOS Linux搭建独立SVN Server全套流程(转)

    环境为centos6.3 1.首先 看看机器上安装了svn了没有 rpm -qa |grep svn 2.如果没有安装 执行 yum -y install subversion 3.安装好了之后 新建 ...

  3. hdu5387(2015多校8)--Clock(模拟)

    题目链接:点击打开链接 题目大意:给出一个时间,问在钟表上这个时间的时候.时针和分针的角度,时针和秒针的角度.分针和秒针的角度.假设不是整数以分数的形式输出. 假设依照最小的格来算,那么: 1s对于秒 ...

  4. Windows下利用CMake和VS2013编译OpenCV

    转载自:http://www.chengxulvtu.com/2014/03/19/windows_build-opencv-with-cmake-and-vs2013.html   获取OpenCV ...

  5. Bootstrap Table 查询(服务器端)、刷新数据

    Refresh from url after use data option <!DOCTYPE html> <html> <head> <title> ...

  6. centos 在CentOS下编译FFmpeg

    所需软件 准备 yum install autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig zlib-devel  -y 新版还 ...

  7. File syncing and sharing software with file encryption and group sharing, emphasis on reliability and high performance.

    http://seafile.com/ showdoc haiwen/seafile: File syncing and sharing software with file encryption a ...

  8. Redis(一)基础数据结构

    1.目录 Redis 基础数据结构 string (字符串) list (列表) hash (字典) set (集合) zset (集合) 容器型数据结构的通用规则 过期时间 2.Redis 基础数据 ...

  9. MySQL常用语句汇总--持续更新(2017-08-10)

    修改表的字段结构: 表:mission_picture,新增字段:content,字段类型:text ALTER TABLE mission_picture ADD content text:

  10. [IR课程笔记]统计语言模型

    Basic idea 1.一个文档(document)只有一个主题(topic) 2.主题指的是这个主题下文档中词语是如何出现的 3.在某一主题下文档中经常出现的词语,这个词语在这个主题中也是经常出现 ...