Logistuc Regression相比,SVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化。比较容易理解的是,从决策边界到各个training example的距离越大,在分类操作的差错率就会越小。因此,SVM也叫作Large Margin Classifier。

最简单的情况是,在二维平面中的,线性可分情况,即我们的training set可以用一条直线来分割称为两个子集,如下图所示。而在图中我们可以看到,H2和H3都可以正确的将training set进行分类,但细细想来,使用H2进行分类的话,我们对于靠近蓝线的几个训练样例其实是不敢说100%的,但对于离蓝线最远的小球,我们却很有把握。这也是H3这条SVM红线出现的原因:尽量让两侧的训练样例远离决策边界,从而让我们的分类系统有把握对每个球Say Absolutely。

Logistic Regression中,我们将类别y定义为0和1,从而把h(x)看做p(y=1)的概率,而在SVM里,我们将其定义为-1和+1。而我们所需要在n维空间中寻找的超平面,则被定义为:

由此,分类函数可以定义为:

将training example的坐标带入可以得到三种结果:f(x)=0,则该点处于决策平面上;f(x)>0,属于y=1类;f(x)<0,属于y=-1类。而对于每个训练样例,我们可以通过计算如下定义的“函数间隔”(functional margin),来判断是否分类正确(数值为负则说明错误),以及通过数值大小看出测试点与决策平面的距离:

而真正表征SVM决策边界margin宽窄的,是上式中值最小的那个,也就是说,距离边界最近的点,其到边界的距离,决定了margin的大小。

而上式得出的函数间隔,实际上并不是该间隔真正的长度值,所以我们需要计算“几何间隔”(geometric margin),即点到平面距离公式:

带入SVM公式,的几何间隔计算公式:

此时,我们想要做的事情是,最大化这个几何距离:

那么,如此看来,我们已经ok了,如下图:

我们现在得到的三个hyperplane的方程为:

在这种情况下,margin是多少呢,根据平行线的距离公式:

在这里其实我纠结了很长时间,因为很多课程从此就说的不太详细了,也许是我个人的数学水平较差吧,所以就花了很久去思考。首先,我们考虑到这个几何距离gamma,肯定是一个常数,因为当我们的f(x)确定,数据集确定以后,它就是离f(x)最近的点到f(x)=0这条直线的距离。那么,我们上述的三个方程,同时除以一个常数,一切会改变吗?首先,可以确定,3个方程一点也不会变,2x+4=6与x+2=3,是一样的对吗?那么我当时就想了,这波操作后,margin肯定会变的!实际上,由于gamma和w之间的线性关系,margin也是不变的,所以相当于,我们修改了w,从而消去了gammar。

而单边的margin则等于总margin的一半:

则问题转化为:

求解w的过程请见:Support Vector Machine(2):求解线性可分SVM的最佳边界

Support Vector Machine(1):线性可分集的决策边界的更多相关文章

  1. Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界

    在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...

  2. 支持向量机(Support Vector Machine,SVM)—— 线性SVM

      支持向量机(Support Vector Machine,简称 SVM)于 1995 年正式发表,由于其在文本分类任务中的卓越性能,很快就成为机器学习的主流技术.尽管现在 Deep Learnin ...

  3. 支持向量机 support vector machine

    SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...

  4. A glimpse of Support Vector Machine

    支持向量机(support vector machine, 以下简称svm)是机器学习里的重要方法,特别适用于中小型样本.非线性.高维的分类和回归问题.本篇希望在正篇提供一个svm的简明阐述,附录则提 ...

  5. 支持向量机SVM(Support Vector Machine)

    支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...

  6. 机器学习算法 --- SVM (Support Vector Machine)

    一.SVM的简介 SVM(Support Vector Machine,中文名:支持向量机),是一种非常常用的机器学习分类算法,也是在传统机器学习(在以神经网络为主的深度学习出现以前)中一种非常牛X的 ...

  7. 机器学习之支持向量机(Support Vector Machine)

    转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 支持向量机 支持向量机(support vector machines,SVMs)是一种二类分类模型.它的基本模型是 ...

  8. 6. support vector machine

    1. 了解SVM 1. Logistic regression 与SVM超平面 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类.如果用x表示数据点,用y表示类别( ...

  9. 5. support vector machine

    1. 了解SVM 1. Logistic regression回顾 Logistic regression目的是从特征中学习出一个0/1二分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的 ...

随机推荐

  1. django信号相关

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 Model signals pre_in ...

  2. Storm简介——初始Storm

    一.什么是Storm Strom是由Twitter开源的类似于Hadoop的实时数据处理框架.Strom是分布式流式数据处理系统,强大的分布式集群管理.便捷的针对流式数据的编程模型.高容错保障这些都是 ...

  3. 下载-MS SQL Server 2005(大全版)含开发人员版、企业版、标准版【转】

    中文名称:微软SQL Server 2005 英文名称:MS SQL Server 2005资源类型:ISO版本:开发人员版.企业版.标准版发行时间:2006年制作发行:微软公司地区:大陆语言:普通话 ...

  4. Python基础入门一文通 | Python2 与Python3及VSCode下载和安装、PyCharm激活与安装、Python在线IDE、Python视频教程

    目录 1. 关键词 2. 推荐阅读 2.1. 视频教程 3. 本文按 4. 安装 4.1. 视频教程 4.2. 资源下载 4.3. 安装教程 1. 关键词 Python2 与Python3及VSCod ...

  5. iBatis.Net 语句 获取Identity ID

    <insert id="Table_Operate_Id" parameterClass="Entity" resultClass="Syste ...

  6. javaweb各种框架组合案例(七):springboot+jdbcTemplete+通用dao+restful

    一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...

  7. 11JSP基础

    1.Jsp基础 1.1 简介 Jsp,全称 Java Server Page java服务页面,能提供java服务的页面 jsp vs html html: 由html标签组成的,输出静态内容. js ...

  8. python3.7爬取墨菲定律保存在本地txt

    #!/usr/local/bin/python3.7 # -*- coding: utf-8 -*- # @Time: 2019/07/15 # @Function 获取在线文本内容 import r ...

  9. alert(1) to win 5

    function escape(s) { var text = s.replace(/</g, '<').replace(/"/g, '"'); // URLs tex ...

  10. springCloud 服务提供者应返回的统一的数据格式

    package com.zledu.commonentity.entity; import lombok.AllArgsConstructor;import lombok.Data; import j ...