机器学习基石 Lecture11: Linear Models for Classification_linear_classifier_无所知的博客-程序员秘密

技术标签: 机器学习  机器学习基石  

Linear Models for Binary Classification

目前学了三种线性模型,其中都包含了 w T x w^{T}x wTx的部分,他们之间的区别如下,能否使用线性回归或是逻辑回归的方法来帮助实现线性分类呢?

它们之间的区别主要是体现在error函数上面,对于一个二元分类的问题来说,这三种算法的error函数可以写为如下形式:
在这里插入图片描述
将这几种模型的error函数进行可视化,可以发现它们之间存在一定的大小关系:在这里插入图片描述
也就是,线性回归的平方误差,与逻辑回归的scaled交叉熵误差,都可以作为0/1误差的一个上界,而上界正是使用算法时需要的东西。因此如果将线性回归的平方误差与逻辑回归的scaled交叉熵误差作为线性分类问题的0/1误差的上界的话,依然能够保证线性分类问题的 E i n 0 / 1 ( w ) E_{in}^{0/1}(w) Ein0/1(w)误差上界与 E o u t 0 / 1 ( w ) E_{out}^{0/1}(w) Eout0/1(w)有较小的保证。这也就意味着能够使用线性回归和逻辑回归来做线性分类的问题:在这里插入图片描述
当然这三种方法都各自有各自的优缺点,后两种方法得到的上限都比较宽松:在这里插入图片描述
线性回归方法有时候会先用来得到一个结果作为PLA或pocket PLA或者逻辑回归方法的初始值 w 0 w_{0} w0。而且逻辑回归一般会相对于pocket PLA更优先使用。

Stochastic Gradient Descent

回顾一下两种迭代式求解的方法。PLA每次迭代只需要对一个样本进行计算,因此复杂度是 O ( 1 ) O(1) O(1)。而逻辑回归或者pocketPLA算法每一次对系数的更新都要遍历所有的样本,也就是复杂度为 O ( N ) O(N) O(N)。如果能够使得逻辑回归每次更新也是 O ( 1 ) O(1) O(1)复杂度就好了。确实有这样的方法,那就是使用一个样本点上的随机梯度来替代真实的梯度:在这里插入图片描述
而这种方法就叫做随机梯度下降法(stochastic gradient descent)。这个方法的思路就是使用随机的梯度来替代真实的梯度值。这样做在足够多步骤之后,得到的结果期望是与使用真实梯度一样的。因此这样做的好处是能够极大减少计算量,对于大量数据和在线数据很有好处。不过坏处就是更不稳定。在这里插入图片描述
而去掉了平均之后的更新方式看起来很熟悉,和PLA里的更新公式很类似。只不过把判断是否与y不相等改为了不相等的概率。因此当步长 η = 1 \eta=1 η=1而乘积特别大的时候,两种算法很接近:在这里插入图片描述
而对于随机梯度下降法有两点需要注意,一个是不太好把握最终结束的条件,一般是使用迭代次数 t t t足够大。而 η \eta η的选择也很重要,经验值为0.1附近效果比较好。

Multiclass via Logistic Regression

如何将逻辑回归应用到多分类的问题上呢?假设现在有4类的点需要分类:
在这里插入图片描述
如果每一次只针对一个类别进行分类,那么可以使用多个线性分类器,组合起来得到最终的多分类结果,这时对于N个类别就需要有N个分类器:在这里插入图片描述
但是使用这样的分类器,可能会遇到一种情况就是对应不同类别的分类器都判断某个点属于它对应的类(+1),或者有可能有每个分类器都认为其不属于自身对应的类(-1)的情况。这样的事情就很难解决。而如果把对应的每个分类器改为逻辑回归的函数,每个分类器得到的是属于本类的概率,这样的话最终取不同分类器里概率最大的那个即可:
在这里插入图片描述
这样每次对多类别的数据只进行一个类别的判断的方法叫做One-vs-All(OVA)分解。算法如图:
在这里插入图片描述
这样做的好处是比较高效,并且可以利用类似逻辑回归的算法。但坏处是它对于类别K比较多,而数据比较不均衡的时候处理的不好。比如有100个点有100类,每次分类器得到的结果可能都是返回不属于本类(概率为0),因为这样做的error就已经非常小了。
不过OVA算法依然是一个适于使用的一类算法。

Multiclass via Binary Classification

为了解决上述OVA方式对于unbalanced数据表现较差的问题又有一个想法,那就是我们每次选择两个类别的数据进行分类而不管其它的数据。这样想是因为OVA里正负比例不平衡的原因在于负例里对应的类别太多也就导致样本太多。改为每次分类两种可以解决这个问题:在这里插入图片描述
因此这样最终就会有 C n 2 C_{n}^{2} Cn2个二分类器,应用所有的分类器,选择被分为正类次数最多的类型作为最终结果:
在这里插入图片描述
算法流程如图:
在这里插入图片描述
这个方法也有自己的优缺点。**优点:**更高效(每次针对的分类问题较小),更稳定,可以使用任意的二元分类方法。 **缺点:**使用了 O ( K 2 ) O(K^{2}) O(K2)级别数量的分类器。这会导致需要更多空间,更多时间,更多训练。不过这个算法同样也是一个可以应用的实际算法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25037903/article/details/83996895

智能推荐

MWC(Multiwii Copter) 飞行模式介绍_luckpl的博客-程序员秘密

1.首先介绍下MWC,以下内容来自网络: MWC是Multiwii Copter的缩写,Multiwii是控制多旋翼航模的开源固件。Multiwii最初由法国航模爱好者Alex创立,用于控制他自己做的三轴飞行器。后经全世界各大高手改造扩展,使得Multiwii不仅仅支持三轴飞行器、四轴、六轴等多轴系列,还支持固定翼和直升机等航模。功能强大而且简单易用。Multiwii支持的传感器类型极为丰富,而

数据结构经典算法集锦_Carrot_kexin的博客-程序员秘密

数据结构经典算法集锦第2章 线性表KMP算法//获得next数组void GetNext(char *t, int next[MAX]){ int i = 1, j = 0; next[1] = 0 //设t[0]中为字符串长度, 字符保存在t[1]之后 while(i < t[0]){ if(j == 0 || t[i] == t[j]){ i++; j++; next[i] = j; } else{ j = next[j]; } }}//ne

滴滴一下,小程序专车来了_极乐叔的博客-程序员秘密

最近时常感叹道:时间总是那么的快,转瞬即逝。对于像我这种刚入门的小生来讲,技术每天都在更新,框架也层出不穷,有时候还没弄懂这个知识大牛们又推出了更好的技术。当然学习好的技术也是十分重要的。但是在学习之后怎样才能够得到自己想要的呢,一个好的建议便是静下心来写点自己的东西,哪怕你完成不了也应该尽力去写,老大曾讲过要去实践要去独立思考,你才能掌握很多你看似懂了却又很难处理的知识点。学习小程序的我已经...

深拷贝和原型原型链和web api 和 this指向等(中初级前端面事题)持续更新中,建议收藏_暑假过期le的博客-程序员秘密

深拷贝值类型的赋值就是深拷贝:变量赋值时,拷贝的不是内存地址,而是将数据完整的在内存中复制了一份 const a = 10 const b = a console.log(b);浅拷贝引用类型(null 对象 数组)的赋值操作都不是深拷贝:拷贝的是内存地址,最终两个变量指向的是同一个地址const a = {name: 'jj',age: 20}const b = ab.age = 18console.log(a.age); // 18深拷贝和浅拷贝的区别浅拷

已知邻接距离 用Matlab求最短路程,Floyd算法_计算最短距离矩阵和路由矩阵_查询最短距离和路由_matlab实验报告..._weixin_39594439的博客-程序员秘密

实验四:Floyd 算法一、实验目的利用MATLAB 实现Floyd 算法,可对输入的邻接距离矩阵计算图中任意两点间的最短距离矩阵和路由矩阵,且能查询任意两点间的最短距离和路由。二、实验原理Floyd 算法适用于求解网络中的任意两点间的最短路径:通过图的权值矩阵求出任意两点间的最短距离矩阵和路由矩阵。优点是容易理解,可以算出任意两个节点之间最短距离的算法,且程序容易实现,缺点是复杂度达到,不适合计...

ios打包发布testflight_勉強続けてください的博客-程序员秘密

用flutter项目。首先在项目根目录命令行输入以下两个命令flutter cleanflutter build iOS接着在xcode的工具栏里点击product archivewindow organizer生成的包一路傻瓜next就行如果失败了,会给开发者邮箱发邮件,如果成功了就直接显示在appStoreConnect的testflight里面了...

随便推点

Vue 引入Echarts后,绘制地图无法显示报Cannot read property 'geoJson' of null"_昌杰的攻城狮之路的博客-程序员秘密

Vue项目中引入ECharts,绘制地图报错解决方案在vue项目中,各位伙伴按照官方文档引入ECharts后,发现使用很多拼图、折线图demo都没有任何问题,但是在绘制地图的时候,完全按照官方demo都会报错:Cannot read property 'geoJson' of null",如下错误提示:vue.esm.js?ff17:610 [Vue warn]: Error in mo...

C语言整数怎么转化为浮点数,C语言浮点数和整数转换的分析_和猫住的博客-程序员秘密

这里以C语言的浮点数为例,在IEEE浮点标准下,整数转换为浮点数的过程做一些直观的分析和具体的实现,IEEE浮点数的标准细节详见()。在C语言中,使用float和double类型数据分别对应单精度和双精度的浮点格式。以float为例,由于float是32位,int在32位机器上也是32位。因此,float必然不能对所有的int进行准确的表示。实际上,在数轴上,浮点数所能表示的数呈非均匀的分布。举例...

企业微信与微信相比的好处有有哪些?_一米&阳光的博客-程序员秘密

2020年5月Wetool被封,微信对第三方的应用把控越来越大,许多用该软件的用户群也陷入了困境,而且微信严厉打击营销外挂,一旦账号被封杀,个人微信上沉淀的所有客户都找不回来,那些即将成交的订单也跟着流失。为了净化微信的使用环境,腾讯此时开放了企业微信和微信的接口,让需要用微信维系客户的企业可以直接启用企业微信,企业微信应用服务成为了新一代运营的主要操盘点,那对于企业微信的操作大家又知道多少呢?1、个人微信使用的难点①原来用个人微信管理客户,员工是否有一些不正确的管理行为,比如拿回扣、恶劣的服务态度、而

Build an ETL Pipeline With Kafka Connect via JDBC Connectors_大数据从业者FelixZh的博客-程序员秘密

This article is an in-depth tutorial for using Kafka to move data from PostgreSQL to Hadoop HDFS via JDBC connections.Read this eGuide to discoverthe fundamental differences between iPaaS and dPaa...

android 开发日积月累_再见孙悟空_的博客-程序员秘密

版本管理工具常用的有SVN CVSGITMercurial目前Google Code支持SVN、Git、Mercurial三种方式Git与CVS 的区别分支更快、更容易。 支持离线工作;本地提交可以稍后提交到服务器上。 Git 提交都是原子的,且是整个项目范围的,而不像 CVS 中一样是对每个文件的。 Git 中的每个工作树都包含一个具有完整项目历史的仓库。 没有哪一个...

前端:如何解决项目中的跨域问题?_Ambition-do it的博客-程序员秘密

前端:如何解决项目中的跨域问题?一、为什么会出现跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)......

推荐文章

热门文章

相关标签