[机器学习笔记] Note4--逻辑回归

继续是机器学习课程的笔记,这节课会介绍逻辑回归。

分类问题

这节课会介绍的是分类问题,其结果是离散值。分类问题的例子有判断电子邮件是否是垃圾邮件;判断肿瘤是良性还是恶性;判断一次金融交易是否是欺诈等等。
首先从二元的分类问题说起,我们将因变量可能属于的两个类分别称为负类(Negative Class)正类(Positive Class),则因变量

y{0,1}

其中0表示负类,而1表示正类。

分类问题建模

回到初始的乳腺癌分类问题,我们可以用线性回归的方法求出适合数据的一条直线,如下图所示:
这里写图片描述

根据线性回归模型,我们只能预测连续值,但对于分类问题,我们需要输出的是0或1,我们可以如此预测:

  • hθ0.5,预测y=1
  • hθ<0.5,预测y=0

那么通过这样的预测,上图所示的数据是可以根据一个线性模型就能很好地完成分类任务的。
但是,此时假设增加了一个非常大尺寸的恶性肿瘤,将其作为实例加入到训练集中,这使得我们获得一条新的直线,如下图所示,
这里写图片描述

这个时候使用阈值为0.5来预测是否是恶性肿瘤就不合适了,因为会将原来预测为恶性肿瘤的数据预测为良性肿瘤了。可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。

所以,我们就引入一个新的模型–逻辑回归(Logistic Regression)0htheta(x)1,即其输出变量范围始终在[0,1]。

逻辑回归简介

逻辑回归模型的假设是:

hθ(x)=g(θTX)

其中:
* X代表特征向量
* g代表逻辑函数(logistic function),是一个常用的 S形函数(Sigmoid function),其公式为 g(z)=11+ez,其图像如下所示:
这里写图片描述

所以,我们可以得到逻辑回归模型的假设是:

hθ(x)=11+eθTX

对于这个模型,可以理解为:

hθ(x)就是对于给定的输入变量x,根据选择的参数计算输出变量y=1的可能性,也就是概率值,即hθ(x)=P(y=1|x;θ)

举个例子,如果对于给定的x,通过已经确定的参数计算得到hθ(x)=0.7,则表示有70%的几率可以判定y是正类,相应地y是负类的几率是30%。

决策边界

在之前的逻辑回归中,我们是如此预测的:

  • hθ0.5,预测y=1
  • hθ<0.5,预测y=0

根据上面的S形函数图象,我们可以知道:

  • z=0时,g(z)=0.5
  • z>0时,g(z)>0.5
  • z<0时,g(z)<0.5

又因为z=θTX,则有:

  • θT0,预测y=1
  • θT<0,预测y=0
线性边界

现在假设有一个模型hθ(x)=g(θ0+θ1x1+θ2x2),且参数θ=311

那么当3+x1+x20时,可以预测y=1,所以我们可以绘制直线x1+x2=3,这条线便是我们模型的分界线,将预测为1和预测为0的区域分隔开,如下图所示。
这里写图片描述

非线性边界

上述例子中的决策边界是一个线性边界,但是并非所有数据都可以通过逻辑回归模型得到一个线性边界的,是存在有非线性边界的,如下图所示
这里写图片描述

看得出来这个例子中需要使用一个曲线,所以需要二次方特征:

hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x22)

假设参数是θ=10011,这样我们得到的决策边界恰好是一个圆心在原点,半径是1的圆形。

除了上述例子,还可以有更复杂的模型来适合非常复杂形状的决策边界,比如使用到三次方特征等。

代价函数

在线性回归模型中,我们定义的代价函数是所有建模误差的平方和函数。也就是J(θ)=12mmi=1(hθ(x(i))y(i))2
在逻辑回归模型中可以沿用这个定义,并且我们假设Cost(hθ(x(i)),y(i))=12(hθ(x(i))y(i))2,但是,这里就会产生一个问题:我们得到的代价函数将是一个(nonconvex function)。非凸函数和凸函数的图像如下所示:
这里写图片描述

这意味着代价函数将有许多局部最小值,会影响梯度下降算法寻找全局最小值。
因此我们重新定义逻辑回归的代价函数为J(θ)=1mmi=1Cost(hθ(x(i)),y(i)),其中

Cost(hθ(x(i)),y(i))={log(hθ(x))if y=1log(1hθ(x))if y=0

也就是hθ(x)Cost(hθ(x),y)的关系如下图所示:
这里写图片描述

这样构建的Cost(hθ(x),y)函数的特点是:

当实际的y=1hθ=1时,误差为0,但如果hθ1时,误差会随着hθ的变小而变大;
当实际的y=0hθ=0时,误差为0,但如果hθ0时,误差会随着hθ的变大而变大;

简化代价函数

接下来是简化代价函数,将代价函数用一行来表示,由于y总是0或1中的一个值,所以,我们可以简化代价函数成如下所示:

Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))

那么代价函数是:

J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i)log(1hθ(x(i)))]

梯度下降法

得到上述简化后的代价函数后,我们就可以使用梯度下降算法来求得能使得代价函数最小的参数了。
算法如下所示:

Repeat

θj := θjαθjJ(θ)

同时更新所有的参数θ

求导后得到:

Repeat

θj := θjαi=1m(hθ(x(i))y(i))x(i)j

同时更新所有的参数θ

注意:这里虽然得到的梯度下降算法的公式表面上和线性回归得到的梯度下降算法一样,但是两者的模型hθ(x)是不一样的,线性回归的是hθ(x)=θTx,而逻辑回归的是hθ(x)=11+eθTx,因此两者是不一样的,同时在运行梯度下降算法之前,进行进行特征缩放依旧是必要的

高级优化方法

目前介绍的让代价函数最小的算法是有使用梯度下降算法以及正规方程方法,但除此之外还有其他算法,它们更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。

这些算法有:共轭梯度(Conjugate gradient)局部优化法(Broyden fletcher goldfarb shann,BFGS),有限局部优化法(L-BFGS)

但是这些算法的最大缺点也就是非常复杂了,所以一般是建议直接使用现有的第三方库中实现好的函数来直接运行这些算法,而不是自己写代码来实现。

多类分类

在多类分类问题中,我们的训练集有多个类,此时就无法仅仅用一个二元变量(0或1)来做判断依据。例如,我们要预测天气情况,分四种类型:晴天、多云、下雨或下雪。
下面是一个多类分类问题可能的情况:
这里写图片描述

一种解决这类问题的方法是采用一对多(One-vs-All)方法。在一对多方法中,我们可以将多类分类问题转换成二元分类问题。
为了能实现这样的转变,我们将多个类中的一个类标记为正类(y=1),然后将其他所有类标记为负类,这个模型记作h(1)θx。接着,我们可以同样选择另一个类标记为正类(y=2),再将其他类标记为负类,这个模型记作h(2)θx,依次类推,也就是可以如下图所示。
这里写图片描述

最后我们得到一系列的模型简记为:h(i)θ=p(y=i |x;θ)i=(1,2,3,,k),也就是对于k个类的分类问题,使用一对多方法,会得到k个分类器。

然后在预测的时候,对于输入变量x,我们会将所有的分类器都运行一遍,然后选择一个类别i使得maxih(i)θ(x),也就是选择输出最大可能性的分类器所代表的类别。

小结

本节内容是介绍逻辑回归问题,对应的就是监督学习中的分类问题。这里之所以有回归二字,是因为其使用的模型形式是类似于线性回归的。当然这里介绍的模型函数是一个S形函数,用来解决一个二元分类问题。

接下来就是介绍代价函数,由于直接套用线性回归的代价函数,会得到一个非凸函数,不利于使用梯度下降法来寻找局部最小值,所以这里是使用了一个新的代价函数来达到同样的效果,因此也就顺利得到需要的代价函数以及梯度下降算法的公式。

最后就介绍了除了梯度下降法之外的一些优化方法,但是这些方法会比梯度下降法要复杂得多。然后还有就是对于多类分类问题可以使用一对多的方法来转换成二元分类问题。

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

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

相关文章

java容器集合类的区别用法_Java容器笔记(二):不同集合实现类的特点与区别...

package java.util包中的Collection相关接口和类如下图&#xff1a;Collection.png仅讨论Java.util包中的常见集合类&#xff0c;不涉及java.util的子包concurrent中的并发集合类。可以这样简单的来对待容器中集合&#xff1a;Collection_common.png1、 List、Set、Queue三个接…

[机器学习笔记]Note5--归一化

继续是机器学习课程的笔记&#xff0c;这节课会介绍归一化的内容。 过拟合问题 这节课会介绍一个在机器学习过程中经常会遇到的问题–过拟合。通常&#xff0c;当我们有非常多的特征&#xff0c;我们可以学习得到的假设可能非常好地适应训练集&#xff0c;即代价函数可能几乎…

combobox的联动练习

老师的项目中&#xff0c;网站右上有四个联动的combobox&#xff0c;今天第一次尝试解决。外观如图&#xff1a; 首先第一次登陆系统时&#xff0c;需要分别载入4个框中的数据。通过easyui-combobox的url 属性请求php返回json数据即可&#xff0c;json中的value是名称&#xff…

[机器学习笔记]Note6--神经网络:表达

继续是机器学习课程的笔记&#xff0c;这节课会介绍神经网络的内容。 非线性假设 在之前的课程中&#xff0c;我们看到使用非线性的多项式能够帮助我们建立更好的分类模型。假设我们有非常多的特征&#xff0c;例如100个变量&#xff0c;我们希望用这100个特征来构建一个非线…

[机器学习笔记]Note7--神经网络:学习

继续是机器学习课程的笔记&#xff0c;这节课会继续介绍神经网络的内容&#xff0c;上一节主要是基本的介绍&#xff0c;以及模型表示&#xff0c;而本节会介绍代价函数&#xff0c;反向传播算法等。 神经网络代价函数 首先是有如下一个神经网络&#xff0c;这里将首先介绍一些…

[机器学习笔记]Note8--机器学习应用建议

继续是机器学习课程的笔记&#xff0c;本节课的内容主要是一些机器学习应用的建议&#xff0c;包括对假设的评估&#xff0c;如何处理过拟合和欠拟合等。 觉得下一步做什么 到目前为止&#xff0c;我们已经学习了线性回归&#xff0c;逻辑回归以及神经网络&#xff0c;梯度下…

Unity3d 手机屏幕自动适配

现在&#xff0c;市场上的手机分辨率多样化。带给开放人员一个很大的“跨界问题”。本人&#xff0c;昨晚突发奇想。手机分辨率多样化&#xff0c;但手机开放人员&#xff0c;制作UI时&#xff0c;最为重要的两个因素就是Position(位置)、Scale(大小)&#xff1b; 我引入一个“…

[机器学习笔记]Note9--机器学习系统设计

继续是机器学习课程的笔记&#xff0c;本节课的内容主要是介绍如何设计一个机器学习系统。 首先要做什么 这节课将介绍如何设计一个机器学习系统&#xff0c;首先是以设计一个垃圾邮件分类器算法作为例子。 为了解决这个问题&#xff0c;首先要决定的是如何选择并表达特征向…

java 图片阴影_Java 为 PPT 中的图形添加阴影效果

在PowerPoint文档中&#xff0c;给图形添加阴影效果能增强图形的立体感&#xff0c;使其贴近现实效果&#xff0c;提升文档的美观度。 本文将展示如何使用Free Spire.Presentation for Java为PPT中的图形添加阴影效果。除了文中展示的预设阴影效果&#xff0c;还可以添加内部阴…

nyoj 21 三个水杯 BFS

三个水杯 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述给出三个水杯&#xff0c;大小不一&#xff0c;并且只有最大的水杯的水是装满的&#xff0c;其余两个为空杯子。三个水杯之间相互倒水&#xff0c;并且水杯没有标识&#xff0c;只…

论文阅读(1)--Fine-grained Image Classification by Exploring Bipartite-Graph Labels

这是阅读《Fine-grained Image Classification by Exploring Bipartite-Graph Labels》这篇论文所做的笔记。 这篇论文是来自NEC实验室&#xff0c;是一篇有关细粒度分类/精细分类方面的论文。 0. 摘要 首先提出一个问题&#xff0c;给定一张食物的图片&#xff0c;对于一个…

java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

Java 注解(Annotation)又称 Java 标注&#xff0c;是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。注解可以看作是一种特殊的标记&#xff0c;在程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。本文对 Annotation 进行了…