从Loagistic 到 SVM算法

       SVM(支持向量机),一种二类分类器,之所以称之为向量机,是因为它本身就产生一个二值决策结果,即使一种决策“机”,支持向量机的泛化错误低(具有结构风险最小),具有很强的学习能力,因此很多人认为它是最好的监督学习算法。

SVM与Logistic回归的联系:

       logistic回归的目的就是从特征值中学习出一个0/1分类模型。而这个模型的输入是将特征的线性组合作为自变量,由于sigmod函数的自变量具有从负无穷到正无穷的输入范围,因此它可以把任何一个输入映射到0/1

sigmod函数的形式化表示: Hθ(x) = g(θTx) = 1/(1 + e-θTx  ),x代表n为特征向量,函数g就是logistic函数

假设函数就是特征属于y = 1 的概率

P(y=1|x;θ) = Hθ(x) ;

p(y =0|x;θ) = 1 -  Hθ(x)

当需要判断一个输入特征向量输入那个类时,只需要求θTx,如果θTx> 0,P(y=1|x;θ)  > 0.5 ,则表示属于类1.否则就是类0,所以logistic也可以看做一个概率估计问题。

因此在logistic回归求解过程中,关键是通过训练样本求解出θ,

          假设 θ = θ0 * x0+ θ1*x1 + θ2 * x2.......+ θn * xn

对于θ的求解,可以使用梯度上升法,梯度上升法基于的思想就是要找到某函数的最大值,最好的方法就是沿着函数梯度方向探寻。(求解最大值使用梯度上升法,而梯度下降法用来求解函数的最小值)

梯度上升法的伪代码如下:

每个回归系数初始化为1

重复R次:

  计算整个数据集的梯度

  使用alpha * gradient更新回归系数的向量

返回回归系数。

使用logistic回归判决时,决定权在意θTx,当θTx >>0使,则H(θTx) = 1,反正H(θTx) = 0,如果我们只是从θT出发

希望模型的达到的目的无非就是让训练样本数据中y = 1 的特征θTx >> 0,而y = 0 的的特征

θTx <<0,logistic的目标就是学习θ,使得y = 1 的特征远大于1, y = 0的特征远小于0,

强调在全部的训练实例上达到这个目标。

假设中间就是那条曲线θTx = 0,logistic回归就是强调所有点尽可能的远离中间那条线,学习出的结过也是θTx = 0 这条曲线

考虑上面3个点A,B,C,从图中可以看到A是确定的X类,然而C是不大确定的,这样就可以得到一个结论,我们应该找到那么一条直接,使得靠近曲线

的分割点,让他们尽可能的远离中间的那条线,而不是所有的点都必须远离中间的曲线。因为那样的话,就等于使得一部分的点靠近中间的曲线,

而另一部分的点,更加远离分割线,这需要权衡两部分的点。这也是logistic回归和SVM的一个重要的区别,SVM考虑的是应该使得那些靠近分割线的点(支持向量)

远离分割面,所以可以这么说,logistic是全局考虑所有的点距离最大化,而SVM则是局部考虑支持向量的距离最大化。

 SVM

SVM 的目的就是找出一个超平面尽可能的把两类数据分开,希望找到离分割面的距离最近的点,确保它们离超平面尽可能的远,这里把点到分割面的距离称为间隔,所以把SVM称为最大间隔法。支持向量就是指离超平面最近的那些点。所以,SVM的目标就是最大化支持向量到分割面的距离,

假设超平面的形式可以写成 WTx + b ,要计算点A到分割面的距离,必须先找出点到分割面的法线或垂线的距离,根据点到直线的距离公式

有 |WTA + b/|W||。这里的b理解为截距。把向量W和常数b一起描述了所给数据的分割线。

 现在的目标就是要找到W和b,为此,我们必须找到具有最小间隔的数据点,而这些点就是支持向量。一旦找到这些支持向量,就需要对该间隔进行最大化,所以

方程可以写成 

        arg maxw,b {minn(yi *(wTx + b)}/||w||}  (1)

令r = yi *(wTx + b),定义几何距离,假设令所有支持向量的距离等于1.那么就可以求解||w||-1最大值得到最终的结果,但是,本非所以的点到超平面的距离都等于1,只要那些

距离最近的点才是1,那些远离超平面的点的距离大于。公式中的最小值就是找出那些支持向量,最大值就是使得那些支持向量离超平面的距离最大化,所以求||w||-1最大值,是在约束条件 yi *(wTx + b)  >= 1的条件,这是一个极值优化问题,可以利用拉格朗日乘子去求解

所以 minn(yi *(wTx + b)}/||w||    => 等价于  {   min{1/2 * ||w||},   ( yi *(wTx + b)  >= 1) 

 (2)

转为极值问题之后,对w求导 dL/dw = 0. 有 w = sumi αi  * yi * xi。   且 sumi αi  * yi = 0;

 对公式1的最小问题可以 转换为  (3)

公式3中的内

这里得到最大化相对于 求解 max{L(w,b,a)},所以求解w和b相对于求解alphas的值,求最大化L(w,b,a),这是一个二次规划的问题,使用SMO(sequential Minimal Optimization)算法来快速的求解alpha的值。

  SMO算法的目标就是求解出一系列的alpha值和b,一旦求解这些alpha,就很容易求解w,从而构造出超平面。SMO算法的原理:每次循环中选择两个alpha进行优化处理,一点找到一对合适的alpha,那么就会有其中一个增大,例外一个减少,这里所谓的合适,就是指两个alpha必须符合条件,条件满足KKT条件。就是这两个alpha必须都在间隔边界之外,而第二个条件就是这两个alpha还咩有进行过区间化处理或者不在边界上。

  从公式3 可以到,有个两个特征向量的内积形式,这里用到了核技巧。因为我们知道不是所有的数据都是线性可分的,当数据在低维不可分或者分割面不明显时,可以把低维特征值映射到高维,核函数的作用就是把一个特征空间映射到另一个特征空间,通常情况下都是低维映射到高维空间。通常应用最广泛的就是径向基函数(radial basis function) ,核函数的选择必须满足核函数矩阵式半正定的。那么任意一个核函数就会对于一个特征映函数Φ(x)TΦ(y)相乘。

核函数的而一个优势在于不需要知道具体的空间变化函数Φ(x),当计算两个Φ(x)TΦ(y)相乘时,可以直接利用核函数求解,SVM 优化中一个特别好的地方就是可以把所以的运算都可以写成内积形式,这样我们就可以把内积运算转换为核函数的方法,称为核技巧(kernel trick)。这样,一般在低维不可分的数据在映射到高维上,都具有较好的分割效果。

支持向量的数目存在一个最优值,SVM的优点就是它能对数据进行高效分类,如果支持向量太少,就可能得到一个很差的决策边界,如果支持向量过多,也就相当于每次都利用整个数据集来进行分类,这种方法称为K邻近。

    本质上来说,SVM是一个两类分类器,其分类结果不是1就是-1,可以使用SVM两类分类器扩展到多类分类器(参考:A Comparison of Methods for Muticlass Support Vector Machines)。

SVM 算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。

a.一对多法(one-versus-rest,简称OVR SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

假如我有四类要划分(也就是4个Label),他们是A、B、C、D。于是我在抽取训练集的时候,分别抽取A所对应的向量作为正集,B,C,D所对应的向量作为负集;B所对应的向量作为正集,A,C,D所对应的向量作为负集;C所对应的向量作为正集, A,B,D所对应的向量作为负集;D所对应的向量作为正集,A,B,C所对应的向量作为负集,这四个训练集分别进行训练,然后的得到四个训练结果文件,在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试,最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x).于是最终的结果便是这四个值中最大的一个。

note:这种方法有种缺陷,因为训练集是1:M,这种情况下存在biased.因而不是很实用.

b.一对一法(one-versus-one,简称OVO SVMs或者pairwise)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。

还是假设有四类A,B,C,D四类。在训练的时候我选择A,B; A,C; A,D; B,C; B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。

投票是这样的.
A=B=C=D=0;
(A, B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
(A,C)-classifer 如果是A win,则A=A+1;otherwise, C=C+1;
...
(C,D)-classifer 如果是A win,则C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)

notw:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的.

c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。

 

 

转载于:https://www.cnblogs.com/fartherfuture/p/3734631.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据有序_Redis实战(3)-数据结构List实战一之商品信息的有序存储

摘要电商平台的管理后端一般有两大角色的用户可以使用,一个是系统管理员,一个是平台的卖家/商家,对于商家而言,管理自个儿的商品是日常工作中再为普通不过的事情了,本文我们将以"有序存储并展示电商平台中商家上传…

c单链表

#include <stdio.h>#include <stdlib.h>#define T 1#define F -1typedef int Type;struct Node{Type value;struct Node *next;};int init(struct Node **head); //初始化int insert_head(struct Node *head, Type value); // 头插法int in…

和redis_Redis 缓存

使用场景#Redis 通常用作web应用的内存缓存&#xff0c;和Django&#xff0c;Ruby-on-Rails&#xff0c;Node.js以及Flask框架结合Redis在存储新的数据的过程中可以清除陈旧的数据。Redis使用Less Recently Used(LRU)策略,可以为每个健设置过期时间Redis 存储指标数据用于量化网…

invalid floating point operation什么意思_Point-MVSNet:基于多视角的点云重建网络

Point-Based Multi-View Stereo Network是一篇点云重建领域的文章&#xff0c;其工作内容为通过输入多张不同角度的图片&#xff0c;提取不同的点云特征&#xff0c;再进行融合&#xff0c;从而生成最终的点云。1.介绍Point-MVSNet的大致流程如下&#xff1a;首先生成一个粗略的…

Nonblocking I/O 与 Asynchronous I/O

2019独角兽企业重金招聘Python工程师标准>>> Nonblocking IO 使用的是 polling &#xff08;轮询&#xff09;的方法&#xff08;主动去问&#xff09;&#xff0c; 而 异步IO 使用的是信号机制&#xff08;等待系统通知&#xff09; 转载于:https://my.oschina.ne…

极大似然估计 摘自维基百科

最大似然估计[编辑] 原文地址&#xff1a; http://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1 最大似然估计&#xff0c;也称为最大概似估计&#xff0c;是一种统计方法&#xff0c;它用来求一个样本集的相关概率密度函数的参数。这个方…

unity改变图片像素大小_类动森像素画反向转换 (xBR)

起因前阵子沉迷动森&#xff0c;DIY 样式的画风真的超萌(&#xff9f;д&#xff9f;)&#xff89;&#xff0c;恰巧在推上看到有个小姐姐在讨论这个像素画转换的算法&#xff0c;就想在 Unity 里整整。最后实现的镜头特效效果如下图。像素缩放算法常见的像素缩放算法对比图如下…

99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?

网工圈网络工程师阿龙圈内最早的公益公众号,本号已认证&#xff01;学网络关注我一个就够了(关注近5w)关注听说99%的网工都来这里充电吖关注我&#xff0c;一个老HCIE(编号3558)带你轻松玩网络技术&#xff01; 交个朋友&#xff0c;一起和一个技术狂热者相互交流&#xff0c;共…

[原创]windows server 2012 AD架构试验系列 – 12 配置操作主机

[原创]windows server 2012 AD架构试验系列 – 12 配置操作主机ActiveDirectory支持域中所有域控制器之间的目录数据存储的多主机复制&#xff0c;因此域中的所有域控制器实质上都是对等的。ActiveDirectory支持域中所有域控制器之间的目录数据存储的多主机复制&#xff0c;因此…

笔记本换内存条

步骤一 拆除护盖 笔记本内存插槽上都有护盖保护&#xff0c;首先第一步就是先将护盖拆掉。大多数笔记本的护盖上都有标识&#xff0c;有的是内凹的内存图形&#xff0c;而且从护盖的大小也能看出来&#xff0c;一般内存护盖的大小&#xff0c;就比内存条大一点。当然有不少笔记…

angularJS 指令实践

AngularJS 指令&#xff08;Directives&#xff09;实践指南(1) 2014-03-12 10:22 陈鑫伟 编译 伯乐在线我要评论(0)字号&#xff1a;T|T一个指令用来引入新的HTML语法。指令是DOM元素上的标记&#xff0c;使元素拥有特定的行为。举例来说&#xff0c;静态的HTML不知道如何来创…

数据结构四双向链表

双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c;从双向链表中的任意一个结点开始&#xff0c;都可以很方便地访问它的前驱结点和后继结点。而之前的单链表为单向链表&#xf…

Linux服务器的初步配置流程

开发网站的时候&#xff0c;常常需要自己配置Linux服务器。 本文记录配置Linux服务器的初步流程&#xff0c;也就是系统安装完成后&#xff0c;下一步要做的事情。这主要是我自己的总结和备忘&#xff0c;如果有遗漏&#xff0c;欢迎大家补充。 下面的操作针对Debian/Ubuntu系统…

不要学习代码,要学会思考(转)

英文原文&#xff1a;Dont learn to code, learn to think 译/赖信涛 这是一个人人都在学习编程的时代&#xff1a;Code.org请了比尔盖茨&#xff0c;马克扎克伯格和克里斯波什等这些名人&#xff0c;来告诉你&#xff0c;每个人都可以编程&#xff1b;CoderDojo’s在各个国家悄…

Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

声明&#xff1a; 1&#xff09;本文由我bitpeach原创撰写&#xff0c;转载时请注明出处&#xff0c;侵权必究。 2&#xff09;本小实验工作环境为Windows系统下的百度云&#xff08;联网&#xff09;&#xff0c;和Ubuntu系统的hadoop1-2-1&#xff08;自己提前配好&#xff0…

旋转函数_【视频课】:一次函数拓展应用(图象的平移、旋转、轴对称及5种解题方法)...

请点击上方“出彩数学”可以免费订阅哦停课不停学★ 特别关注&#xff1a;今日头条、西瓜视频——初三中考解题方法与技巧、初一、初二的同步讲解视频&#xff0c;正在陆续上传&#xff0c;请关注今天头条或西瓜视频(下载APP&#xff0c;搜索“出彩数学”&#xff0c;关注即可…

c语言中,关于延迟函数的理解

对于延迟&#xff0c;有些c基础的人都能够做到用for或while来实现 例如&#xff1a; #include <stdio.h>int main() {int i, j, k;for (i 1; i < 1000; i){for (j 1; j < 1000; j){for (k 1; k < 1000; k){}}}printf("hello\n");return 0; }1234…

火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...

不管是做自媒体还是做电商或是工作素材采集&#xff0c;都离不开视频&#xff0c;视频比文字更好展示出产品、细节内容&#xff0c;就好比我们经常看的抖音、快手、火山、皮皮虾之类的短视频里面就有很多优秀的素材&#xff0c;相信有采集过的朋友都会遇到平台水印这个问题吧&a…

php CI 实战教程:如何去掉index.php目录

Windows下自由创建.htaccess文件的N种方法.htaccess是apache的访问控制文件&#xff0c;apache中httpd.conf的选项配合此文件&#xff0c;完美实现了目录、站点的访问控制&#xff0c;当然最多的还是rewrite功能&#xff0c;即URL重写&#xff0c;PHP中实现伪静态的一个重要途径…

十字连接焊盘_你应该知道的焊盘基础知识

PADSTACK&#xff1a;就是一组PAD的总称。Copper pad&#xff1a;在布线层(routing layer),注意不是内层&#xff0c;任何孔都会带有一个尺寸大于钻孔的铜盘(copper pad)。对内布线层这个铜盘大概14 mils&#xff0c;外布线层更大。如果这里需要导线连接,那么这个可以提供一个可…