前言

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

简介

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

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

原理

SVM代价函数

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

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

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

果呢?

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

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

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

SVM最大间隔超平面

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

  那么,如何将上面这个数学原理用到SVM中呢?其实很简单,将u,v分别替换为θ、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. python(16)- python内置函数

    python内置了一系列的常用函数,以便于我们使用,python英文官方文档详细说明:https://docs.python.org/3/library/functions.html     Buil ...

  2. JSP 随记

    jstl <c:forEach> 遍历,多个<option>时显示"全部".单个 option时,默认选中! 引入:<%@ taglib prefix ...

  3. memcache及其telnet命令使用详解

    1.启动Memcache 常用参数memcached 1.4.3-p <num>      设置端口号(默认不设置为: 11211)-U <num>      UDP监听端口 ...

  4. mvc 发送QQ邮件

    试图部分代码: @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } ...

  5. EasyPlayer iOS开源流媒体播放器中AAC解码PCM问题

    本文转自EasyDarwin开源团队成员Penggy的博客:http://www.jianshu.com/p/feeb107b6657 最近遇到在 iOS 平台上实时播放 AAC 音频数据流, 一开始 ...

  6. poj 2154 Color < 组合数学+数论>

    链接:http://poj.org/problem?id=2154 题意:给出两个整数 N 和 P,表示 N 个珠子,N种颜色,要求不同的项链数, 结果 %p ~ 思路: 利用polya定理解~定理内 ...

  7. c# 怎么获取自己的IP地址

    1.aspx页面,asp.net项目的页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehin ...

  8. ByteBuf(图解1)

    目录 源码工程 写在前面 Netty ByteBuf 优势 手动获取与释放ByteBuf 自动获取和释放 ByteBuf 方式一:TailHandler 自动释放 方式二:SimpleChannelI ...

  9. 对于pod导入第三方库文件终端语言记录

    //换成 pod install --verbose --no-repo-update //生成Podfile文件 touch Podfile 加上--verbose --no-repo-update ...

  10. 3个CCIE考官对一个高级工程师的面试题

    3个CCIE考官对一个高级工程师的面试题 转载 时间:2015-7-10 原文转载: 1.现在的6509及7609,SUP720交换带宽去到720G,是不是可以说7609/6509 可以取代一部分GS ...