Note sth about SVM(Support Vector Machine)

支持向量机(SVM)从入门到放弃再到掌握这篇博客讲得挺仔细。
动机:
  SVM的中文名字——支持向量机。本质是一种线性的二分类器。如果涉及多分类问题,一般有两种方法(假设一共有k类):1、训练k个svm,每次训练时,把某个类设为+,而其余为-。2、训练$C{k \choose 2}$,即两两之间都训练一个svm。以上两种方法各有优劣,具体可移步SVM多分类的两种方式

SVM算法:
考虑下图(图是偷拿老师ppt的)。

  如果我们需要选择一条直线,将上述样本(TrainingData)分为两类,哪条直线是我们希望使用的?(显然,三条线都可以很好的完成样本(TrainingData)的分类)。
  但是,直观感觉告诉我们,绿色的会较优。因为什么?因为绿色的线对局部的扰动性容忍度更高,更抗扰动。而这直观感受就是,两类点都离这条线较远,或者说两类点中离这条线最近的点,到这条线的距离较远。而这些最近的点,到线的映射点,两点的连线就是所谓的支持向量,和我们找到的直线平行的分别过两类点中离该直线最近的点的两条直线之间的距离就是间隔,我们需要间隔最大。不妨假设这两条直线为:
  a($w^Tx+b \leq -1$)
  c($w^Tx+b \geq 1$)
  而中间的直线为b($w^Tx+b=0$)。
  称a,b(或者b,c)之间的距离为间隔(margin)。

算法公式概述:
  首先,我们定义样本为两类,+1,-1(+100,-100;+20,-5000……其实都可以,只不过+1,-1写出来式子比较好看)那么我们的分类标准就是,若$w^Tx+b \geq 1$则该样本(TestData)为正类,若$w^Tx+b \leq -1$则该样本(TestData)为负类。
  其次,不难得出:
$$margin= \frac{1}{2} ( \frac{w}{||w||}x_{+} + \frac{b}{||w||} - \frac{w}{||w||}x_{-} - \frac{b}{||w||} ) $$
$$ \rightarrow \frac{1}{2||w||}(wx_{+} + b - wx_{-} - b) = \frac{1}{||w||} $$
  为什么?因为$x_{+}$是$w^Tx+b = 1$上的点,$x_{-}$是$w^Tx+b = -1$上的点,所以上式$ wx_{+}+b-wx_{-}-b = (wx_{+}+b) - (wx_{-}-b) = 1 - (-1) = 2 $就约去了$\frac{1}{2||w||}$的分母中的2。我们希望我们最大化$\frac{1}{||w||}$,并且我们找到的这条直线$ w^Tx+b=0$的直线满足:
$$ wx_i + b \geq +1, \quad y_i = +1 $$
$$ wx_i + b \leq -1, \quad y_i = -1 $$
  即可以表示为:$y_{i}(wx_{i}+b)-1 \geq 0$
  于是乎,我们需要做的就是下面的式子:
$$ max \qquad \frac{1}{||w||} \qquad (1) $$
$$ s.t. \qquad y_i((wx_i)+b) \geq 1, \quad i = 1,2,...,n \qquad (2) $$
  而在实作的时候我们通常做的是(1)的式子的对偶形式,即:$max \quad \frac{1}{2}||w||^2 $
  最后观察式子,发现为有约束的优化问题,可引入拉格朗日乘子法解决,在此并不赘述。

ML_Review_SVM(Ch9)的更多相关文章

  1. Mongodb Manual阅读笔记:CH9 Sharding

    9.分片(Sharding) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb ...

  2. 《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周

    <代码整洁之道>ch5~ch9读书笔记 本周我阅读了本书的第5~9章节,进一步了解整洁代码需要注意的几个方面:格式.对象与数据结构.错误处理.边界测试.单元测试和类的规范.以下我将分别记录 ...

  3. Mongodb 3.2 Manual阅读笔记:CH9 存储

    9. 存储 9. 存储 9.1 存储引擎 9.1.1 WiredTiger存储引擎 9.1.1.1 文档级别并发 9.1.1.2 快照和检查点 9.1.1.3 Journaling 9.1.1.4 压 ...

  4. CH9 顺序容器

    本章主要介绍了标准库顺序容器,包括 顺序容器的公共接口,如构造函数,添加/删除操作等 利用迭代器访问容器 不同顺序容器的差异 string的特殊操作 容器适配器,如栈,队列等 9.1 “按字典序插入到 ...

  5. JavaWeb监听器的使用(一)监听上下文和会话信息

    1.监听上下文的类 package com.examp.ch9; import java.io.FileOutputStream; import java.io.PrintWriter; import ...

  6. Vue.js学习笔记(8)拖放

    小颖在目前负责的项目中,负责给同事提供所需组件,在这期间,我们家大颖姐姐让我 写个拖拽组件,一开始我是用click实现,先将你要拖拽的dom点一下,然后再点你要放的位置,这个dom再通过小颖写的方法, ...

  7. 如何基于OM模型使用C#在程序中给SharePoint的BCS外部数据类型的字段赋值

    概述: 外部内容类型和数据,SharePoint从2010这个版本开始就对BCS提供非常强大的支持,点点鼠标就可以取代以前直接编辑XML的方式来设置SharePoint到SQL数据库的连接.非常方便地 ...

  8. EditBox问题的实现以及Junit测试框架的简要说明

    一.这周的EditBox由一个框改为三个框,同时进行测试,下面给出程序及截图 1 import java.util.regex.Matcher; 2 import java.util.regex.Pa ...

  9. Discrete.Differential.Geometry-An.Applied.Introduction(sig2008)笔记

    -------------------------------------------------------------- Chapter 1: Introduction to Discrete D ...

随机推荐

  1. 【实战】SQL注入小脚本

    1.ORACLE布尔型盲注 import urllib import urllib2 import requests payloads = '_ABCDEFGHIJKLMNOPQRSTUVWXYZ' ...

  2. 记一次bypass某场景GD库及拓展分析

    0x00 前言 gou楼兰师傅发来个站说是过不了gd库,问我有啥办法没有,给了他之前海贼师傅说的jpg_payload脚本,但是绕不过,问他拿了站点,写了个jpg_payload批量的fuzz脚本,f ...

  3. Linux VPS搭建蚂蚁笔记Leanote私有云笔记存储平台

    一.基础环境LNMP 安装nginx: yum install epel-release -y yum install nginx -y # 启动 nginx systemctl start ngin ...

  4. windows10下安装tensorflow2.0-GPU和Cupy(不用搞CUDA+cudnn)

    0.前言 今年暑假买了个1660ti的游戏本学python,后来发现跑一些数据量比较大的代码和深度学习的时候太慢了,遂想装一下GPU版本,看了网上的资料搞了好几天,又是CUDA又是cudnn的,网速慢 ...

  5. dt7.0自定义推送熊掌号功能插件

    因要推送较早的数据,所以写了一个自定义推送熊掌号的功能插件,因我自己站点是新站,推送的数据较少,所以程序比较简单,算是初始版本,凑合着用吧. <?php /* 百度当天主动推送熊掌功能 作者:6 ...

  6. Pthon操作Gitlab API----批量删除,创建,取消保护

    1.需求:大批量的应用上线后合并到Master,其他的分支develop/test/uat等需要同步最新代码的操作. 2.操作:可以通过传参 ,列表 的方式把每个项目的id值填入,才能对相关项目进行批 ...

  7. [bzoj 3701] Olympic Games (莫比乌斯反演)

    题目描述 给出n,m,l,r,modn,m,l,r,modn,m,l,r,mod 表示一个(n+1)∗(m+1)(n+1)*(m+1)(n+1)∗(m+1)的格点图,求能够互相看见的点对个数对modm ...

  8. 03_Tutorial 3: Class-based Views 基于类的视图(CBV)

    1.CBV 0.文档 https://q1mi.github.io/Django-REST-framework-documentation/tutorial/3-class-based-views_z ...

  9. list获取所有上级

    /// <summary> /// 获取所有上级 /// </summary> /// <param name="list"></para ...

  10. jQuery相关方法10

    一.链式编程的原理 <script> //构造函数 function Person(age){ this.age=age; this.sayHi=function(txt){ if(txt ...