机器学习之SVM支持向量机
前言
以下内容是个人学习之后的感悟,转载请注明出处~
简介
支持向量机(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中的作用。下图是

- 当
时,
- 当
距离
很远时,
以上是全部内容,如果有什么地方不对,请在下面留言,谢谢~
机器学习之SVM支持向量机的更多相关文章
- 机器学习 - 算法 - SVM 支持向量机
SVM 原理引入 支持向量机( SVM,Support Vector Machine ) 背景 2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要 ...
- 机器学习进阶-svm支持向量机
支持向量机需要解决的问题:找出一条最好的决策边界将两种类型的点进行分开 这个时候我们需要考虑一个问题,在找到一条直线将两种点分开时,是否具有其他的约束条件,这里我们在满足找到一条决策边界时,同时使得距 ...
- 机器学习 - 算法 - SVM 支持向量机 Py 实现 / 人脸识别案例
SVM 代码实现展示 相关模块引入 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy i ...
- 机器学习(四) SVM 支持向量机
svr_linear = SVR('linear') #基于直线 svr_rbf = SVR('rbf') #基于半径 svr_poly = SVR('poly') #基于多项式
- 机器学习实战 - 读书笔记(06) – SVM支持向量机
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...
- OpenCV机器学习库函数--SVM
svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变. opencv中的svm分类代码,来源于libsvm. #include "o ...
- 6-11 SVM支持向量机2
SVM支持向量机的核:线性核.进行预测的时候我们需要把正负样本的数据装载在一起,同时我们label标签也要把正负样本的数据全部打上一个label. 第四步,开始训练和预测.ml(machine lea ...
- 机器学习:SVM
SVM 前言:支持向量机(Support Vector Machine, SVM),作为最富盛名的机器学习算法之一,其本身是一个二元分类算法,为了更好的了解SVM,首先需要一些前提知识,例如:梯度下降 ...
- Python实现SVM(支持向量机)
Python实现SVM(支持向量机) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end ...
随机推荐
- STL中各容器之函数总结
一.序列和关联非共同拥有函数 全部标准库共同拥有函数 (构造,相关属性,迭代器,插入与删除,比較.swap) 当中operator>,operator>=,operator<,op ...
- Python+Selenium框架 ---自动化测试报告的生成
本文来介绍如何生成自动化测试报告,前面文章尾部提到了利用HTMLTestRunner.py来生成自动化测试报告.关于HTMLTestRunner不过多介绍,只需要知道是一个能生成一个HTML格式的网页 ...
- redirect_uri 參数错误的解决的方法
我通过java代码去获得用户的openid,一直报redirect_uri. 我页面代码的链接为: https://open.weixin.qq.com/connect/oauth2/authoriz ...
- PC常用电源IC、MOS、三极管、二极管厂家
笔记本常用MOS.三极管.二极管厂家: 1.EMC 杰力电子(台湾)官方网站:http://www.excelliancemos.com/tw/solution.php 2.UBIQ(台湾电源厂家UP ...
- Django中的模板和分页
模板 在Templates中添加母版: - 母版...html 母版(master.html)中可变化的地方加入: {%block content%}{%endblock%} 在子版 (usermg. ...
- JS 常用字符串操作
Js字符串操作函数大全 /******************************************* 字符串函数扩充 ...
- JS中小数如何转化为百分数并能四舍五入
<script type="text/javascript">//n表示百分数保留的位数 function toPercent(n){ n = n || 2; retu ...
- C/C++笔记之char *与wchar_t *的相互转换
char *和wchar_t *的相互转换,可使用标准库函数 size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count)和size ...
- indexDB操作(部分方法不太会使用)
<script type="text/javascript"> //打开数据库 function openDB(name,version){ var version = ...
- CSS Overflow 属性清除浮动
清除浮动 设置overflow的一个更流行的用处是,说也奇怪,清除浮动.设置overflow并不会在该元素上清除浮动,它将清除自己(self-clear).意思就是,应用了overflow(auto或 ...