ML_Review_SVM(Ch9)
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)的更多相关文章
- Mongodb Manual阅读笔记:CH9 Sharding
9.分片(Sharding) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb ...
- 《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周
<代码整洁之道>ch5~ch9读书笔记 本周我阅读了本书的第5~9章节,进一步了解整洁代码需要注意的几个方面:格式.对象与数据结构.错误处理.边界测试.单元测试和类的规范.以下我将分别记录 ...
- 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 压 ...
- CH9 顺序容器
本章主要介绍了标准库顺序容器,包括 顺序容器的公共接口,如构造函数,添加/删除操作等 利用迭代器访问容器 不同顺序容器的差异 string的特殊操作 容器适配器,如栈,队列等 9.1 “按字典序插入到 ...
- JavaWeb监听器的使用(一)监听上下文和会话信息
1.监听上下文的类 package com.examp.ch9; import java.io.FileOutputStream; import java.io.PrintWriter; import ...
- Vue.js学习笔记(8)拖放
小颖在目前负责的项目中,负责给同事提供所需组件,在这期间,我们家大颖姐姐让我 写个拖拽组件,一开始我是用click实现,先将你要拖拽的dom点一下,然后再点你要放的位置,这个dom再通过小颖写的方法, ...
- 如何基于OM模型使用C#在程序中给SharePoint的BCS外部数据类型的字段赋值
概述: 外部内容类型和数据,SharePoint从2010这个版本开始就对BCS提供非常强大的支持,点点鼠标就可以取代以前直接编辑XML的方式来设置SharePoint到SQL数据库的连接.非常方便地 ...
- EditBox问题的实现以及Junit测试框架的简要说明
一.这周的EditBox由一个框改为三个框,同时进行测试,下面给出程序及截图 1 import java.util.regex.Matcher; 2 import java.util.regex.Pa ...
- Discrete.Differential.Geometry-An.Applied.Introduction(sig2008)笔记
-------------------------------------------------------------- Chapter 1: Introduction to Discrete D ...
随机推荐
- css 边框上如何写入文字?
方法一: 1.首先,打开html编辑器,新建html文件,例如:index.html. 2.在index.html中的<body>标签中,输入html代码:. <div style= ...
- UI5-技术篇-SEGW DEEP ENTITY测试
参考:http://blog.sina.com.cn/s/blog_a7d67d810102xgms.html 一般调用后端的OData服务需要同时传输多个记录表对业务逻辑进行处理(例如BAPI),今 ...
- flask之蓝图BulePrint使用
之前flask启用程序代码和逻辑代码都是在一个页面,这样代码多了很自然不利于关于,如果要将逻辑代码和进行分离,这里需要用到Falsk的蓝图(Blueprint) 项目结构 app文件夹为项目最外层文件 ...
- Android笔记 (二) Android的核心---Activity
什么是Activity Activity是Android应用程序核心组件中最基本的一个,是用户和程序交互的窗口,一个activity通常对应一个单独的视图,一个APP由一个或者多个activity构成 ...
- JAVA 判断给定目录的大小
题目:给定一个目录,判断该目录的大小,单位为G 思路: 递归拿到目录的子文件,然后取长度,累加 public class FileDemo02 { public static void main(St ...
- 分布式session的几种实现方式
在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Nginx通过 ...
- C++——inline function
前言 当代码写复杂后,一定会封装出大量的函数,这会导致两个问题: ①函数越多,栈的消耗也越厉害 疑问:为什么代码复杂了.函数变多了,栈消耗的就很厉害? 答:因为这会导致函数的调用深度可能会很深,比如: ...
- 浅析 array_map array_walk
map 主要是为了得到你的回调函数处理后的新数组,要的是结果. walk 主要是对每个参数都使用一次你的回调函数,要的是处理的过程. walk 可以认为提供额外参数给回调函数,map不可 ...
- linux服务器上安装jenkins
nkins常用的有两种安装方式: 1.直接下载war包jenkins.war,下载地址https://jenkins.io/download 直接下载 1.1.可以把war包直接部署到servlet容 ...
- 洛谷P1050 循环【java大数】
题目:https://www.luogu.org/problemnew/show/P1050 题意:给定一个数$n$,问$n$的幂次的最低$k$位的循环节是多少. 思路:这真是我做过最难的java大数 ...