设输入为$x$,表示训练集的特征向量,输出为$y=\{1,-1\}$,这些向量都属于两类中的其中一类,假设这些向量是线性可分的,现在要找一个最优的平面(在二维的时候为一条直线),将这些特征向量正确分类,除此之外,能够将新的输入分到合适的类。

设中间直线方程为
$$\hat \omega x+\hat b=0$$
好了,svm中不是还有另外两条边界线吗?他们就是中间这条直线的左膀右臂,而且到中间这条直线的距离是一样的,这两条边界线正好和两侧的特征向量紧挨着,他们的方程就可以表示为
$$\hat \omega x+\hat b=k\\
\hat \omega x+\hat b=-k$$
为什么等号右边一个是$k$,一个是$-k$呢,因为他们到中间直线的距离都一样啊,只是方向不一样而已,好了,下面做个简单的变换,将等号两边同时除以$k$,则得到
$$\frac {\hat \omega x}{k}+\frac{\hat b}{k}=1\\
\frac {\hat \omega x}{k}+\frac{\hat b}{k}=-1$$
好了,此时再设
$$
\omega=\frac {\hat \omega}{k} \\
b=\frac{\hat b}{k}
$$
那么,两条边界直线就变成了
$$\omega x+b=1\\
\omega x+b=-1$$
而且将两式相加,就得到中间的直线方程了
$$\omega x+b=0$$

看到了吧,很多文章都在讲什么函数间隔,几何间隔,我不讲这些概念,我只讲距离,免得绕来绕去绕到死胡同里。

这个时候,如何求两条边界线之间的距离呢?

简单,因为两条边界到中间直线的距离相等,所以只需要求出一条边界线到中间直线的距离,再乘以2,就得到结果了。那怎么求一条边界线到中间直线的距离呢?

这个简单,运用高中数学空间几何的知识就搞定了,设点P在中间直线上,点Q在边界直线上,那么$$\overrightarrow{PQ} \cdot \omega = |\overrightarrow{PQ}|\cdot cos(\theta) \cdot |\omega|=d\cdot|\omega|$$
好了,$\overrightarrow{PQ} \cdot \omega$等于多少呢?就等于1啦,因为$\omega$是法向量,点P在中间直线上,点Q在边界直线上,将两条直线方程相减,等号左边就是$\overrightarrow{PQ} \cdot \omega$,等号右边就是1.

所以一条边界线到中间直线的距离$d$等于多少呢?

$$d=\frac{1}{|\omega|}$$

那么,两条边界线之间的距离也就是$\frac{2}{|\omega|}$了

好了,只要能够求出$d$取最大值时的$\omega,b$值,就可以得到最优的分类直线了,当然,在高维空间,就可以得到最优的分类超平面了!

要知道,只有紧挨着边界线的向量到中间直线的距离才是$d$,边界线以外的向量到中间直线的距离都要大于$d$,因为两类分别为$\{1,-1\}$,所以必须要满足
$$
y_i (\omega x_i + b) \ge 1
$$

要求$\frac{1}{|\omega|}$的最大值,也就等价于求$\frac{1}{2}{||\omega||}^2$的最小值,这样写的目的是为了转换成凸优化问题,方便求解。好了,此时问题已经很明确了,可用数学语言表示为
$$
\begin{align*}
&\min \limits_{\omega, b} && \frac{1}{2}{\Vert \omega \Vert}^2 \\
&s.t. && y_i (\omega x_i + b) \ge 1,i=1,2,\ldots,N
\end{align*}
$$
其中$N$为样本点的个数

漫步支持向量机(svm)之一的更多相关文章

  1. 【IUML】支持向量机SVM

    从1995年Vapnik等人提出一种机器学习的新方法支持向量机(SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多.支持向量机方法是建立在统计学习理论的VC维理论和结构风险最 ...

  2. 机器学习:Python中如何使用支持向量机(SVM)算法

    (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...

  3. 以图像分割为例浅谈支持向量机(SVM)

    1. 什么是支持向量机?   在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...

  4. 机器学习算法 - 支持向量机SVM

    在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM. SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果. [案 ...

  5. 机器学习之支持向量机—SVM原理代码实现

    支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...

  6. 支持向量机SVM——专治线性不可分

    SVM原理 线性可分与线性不可分 线性可分 线性不可分-------[无论用哪条直线都无法将女生情绪正确分类] SVM的核函数可以帮助我们: 假设‘开心’是轻飘飘的,“不开心”是沉重的 将三维视图还原 ...

  7. 一步步教你轻松学支持向量机SVM算法之案例篇2

    一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  8. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  9. OpenCV 学习笔记 07 支持向量机SVM(flag)

    1 SVM 基本概念 本章节主要从文字层面来概括性理解 SVM. 支持向量机(support vector machine,简SVM)是二类分类模型. 在机器学习中,它在分类与回归分析中分析数据的监督 ...

随机推荐

  1. 在O(1)时间删除链表结点

    //给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 1 struct ListNode //结点结构 { int m_nValue; ListNode* m_pNext; ...

  2. Direct 2D实现界面库 (2)

    Direct 2D实现界面库 (1) http://www.cnblogs.com/mmc1206x/p/3924580.html 上篇说完了每个 LNode 的绘制过程. 也就是 onDraw 的实 ...

  3. php学习小技巧

    1.print_r可打印数组 <?php echo '<p class="ajax">This paragraph was loaded with AJAX.&l ...

  4. jQuery api 学习笔记(1)

      之前自己的jquery知识库一直停留在1.4的版本,而目前jquery的版本已经更新到了1.10.2了,前天看到1.10中css()竟然扩充了那么多用法,这2天就迫不及待的更新一下自己的jquer ...

  5. Ubuntu使用Xming和Putty

    运行个复杂的,比如 gnome-session,这个是 GNOME 的启动命令,如果想打开 KDE 就是 startkde root@carlo-cloud:~# xlogoThe program ' ...

  6. JQuery树形目录制作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...

  7. 导出Excel后其他按钮失效

    在SharePoint中,当在页面上点击Export to Excel按钮后,第一次它能实现该功能,当再次点击该按钮时,页面上的所有按钮将失效,仅仅再次刷新该页面时按钮才会有效,首先想到出现该问题肯定 ...

  8. Recovery和Charger模式下屏幕旋转180度[转]

    如何让Recovery (系统固件升级),charger(关机充电动画)时屏幕旋转180度 解决方法: 1.在bootable\recovery\minui\Graphics.c 文件找到gr_fli ...

  9. 转:FIFO和DMA

    FIFO SPI端口增加了FIFO,使得传输数据有了缓冲区间. FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口.主要有三 ...

  10. 劫持Disucz系列密码

    目标文件:/source/class/class_member.php 找到: if($result['status'] > 0) 前面加入: $log_file = "./data/ ...