从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,一经查实,立即删除!

相关文章

Scala.js:将Scala编译为JavaScript的编译器

Scala.js是一款将Scala代码编译为JavaScript代码的编译器,该编译器支持全部Scala语言特性。借助于Scala.js,开发者能够使用Scala开发从前端到后端的Web应用,而且Scala.js还带来了在服务器和客户端之间复用代码的可能性。Scala.js值得关注的特…

array

array_shift(使得第一个参数和后面的参数分开,先进先出) vsprintf格式化sql语句 $r substr($sql,0,6)从0个开始截取6位。这种写法在php5.4之前是不支持的 strcasecmp(a,b);如果ab就返回0,如果第一个大于第二个就返回1,否则返回-1 array_push…

c程序

题目&#xff1a;一个数如果恰好等于它的因子之和&#xff0c;这个数就称为“完数”。例如61&#xff0b;2&#xff0b;3.编程找出1000以内的所有完数。1. 程序分析&#xff1a;请参照程序<--上页程序14.2.程序源代码&#xff1a; #include "stdio.h" #include &q…

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

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

关于asp.net利用mono部署到Linux上的一些说明

linuxdot.net社区群&#xff1a;102732979&#xff08;如果你认为你已经在.NET跨平台方面有足够的经验&#xff0c;请参加这个群&#xff1a;103810355&#xff09;。 其中有各种大神&#xff0c;嘿嘿&#xff0c;如果你有问题可以来咨询&#xff0c;完全无偿的免费的。 mono的…

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 存储指标数据用于量化网…

你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数

6.2.4 拷贝构造函数 在C世界中&#xff0c;除了需要使用构造函数直接创建一个新的对象之外&#xff0c;有时还需要根据已经存在的某个对象创建它的一个副本&#xff0c;就像那只叫做多利的羊一样&#xff0c;我们希望根据一只羊创建出来另外一只一模一样的羊。例如&#xff1a…

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

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

在ubuntu 12.04上安装tomcat 7.40

因为源上的版本问题&#xff0c;所以没有使用源上的自动安装包&#xff0c;老规矩&#xff0c;Tomcat 7.0.40 Core下载地址&#xff1a;http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.40/bin /apache-tomcat-7.0.40.tar.gz 放入当前登录用户根目录: ~ 1、依旧是解压 t…

Nonblocking I/O 与 Asynchronous I/O

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

锐浪报表数据源access_kylin+SuperSet实现实时大数据报表的快速开发

最近我的团队将报表计算引擎从阿里的OLAP分析中间价迁移到了kylin上&#xff0c;解决了非常多的问题&#xff0c;将一些我们的解决方案分享出来&#xff0c;希望对读者或者在用kylin的人有所帮助。一、 之前现状和问题之前我们系统的报表都是基于阿里云的相关组件开发的&#x…

结构体定义的三钟方式

#include <stdio.h>#include <string.h>structStudent{ intid; charname[ 20 ]; intage;} s3; //定义方式3&#xff0c;不常用的一种方式intmain(){ structStudent s1; //定义方式1s1.id 0 ; strcpy (s1.name, "Zhang" ); s1.age 20 ; stru…

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

最大似然估计[编辑] 原文地址&#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 里整整。最后实现的镜头特效效果如下图。像素缩放算法常见的像素缩放算法对比图如下…

【记忆化搜索】bzoj3208 花神的秒题计划Ⅰ

暴力 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 701 const int dx[]{0,0,-1,1},dy[]{-1,1,0,0}; int n,mem[N][N],a[N][N],m; bool cant[N][N]; int f(int x,int y) {if(mem[x][y]) return mem[x][y];mem[x][…

c语言程序2

题目&#xff1a;有一分数序列&#xff1a;2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13...求出这个数列的前20项之和。1.程序分析&#xff1a;请抓住分子与分母的变化规律。2.程序源代码&#xff1a; #include "stdio.h" …

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;因此…

应用沙盒

应用沙盒结构&#xff1a; 应用程序包&#xff1a;包含了所有的资源文件和可执行文件&#xff0c;这个压缩包的内容是不可以修改的。 Documents:保存应用程序运行时生成的需要持久化的的数据&#xff0c;ITunes同步设备时会备份该目录。 Library/Caches:保存应用程序运行时生成…