[机器学习笔记] 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,一经查实,立即删除!

相关文章

华为日历怎么显示一月_华为手机日历怎么设置

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。设置华为手机日历的方法&#xff1a;1、打开“时钟”&#xff0c;点击右下角的设置&#xff1b;2、点击“日期和时间”&#xff1b;3、关闭“自动确定日期和时间”和“自动确定时区”…

javascript中children和childNodes的区别

javascript中children和childNodes的区别 1、childNodes&#xff1a;它是标准属性&#xff0c;它返回指定元素的子元素集合&#xff0c;包括HTML节点&#xff0c;所有属性&#xff0c;文本节点。 可以通过nodeType来判断是哪种类型的节点&#xff0c;只有当nodeType1时才是元素…

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;即代价函数可能几乎…

学习使用按位取反.

#include <stdio.h>int main(){ /*学习使用按位取反 程序分析&#xff1a;0~1 1~0*/ unsigned int a, b; a3; b~a; printf("\40:the as 1 complement(decimal)is %d\n",b); a~b; printf("\40:the as 1 complement(he…

java 反射 框架_Java 反射,开发框架必备技能

通过反射技术我们将上面的统一资源定位付(URL) 映射到Class 相当于class: newsmethod: listparameter: 2差不多就是下面样子class News{public String list(String catagory_id){......}}我们只需要在框架核心中分析 url 然后调用对应的方法&#xff0c;于此同时将参数传递过去…

combobox的联动练习

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

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

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

《实用技巧》——让你的网站变成响应式的3个简单步骤

如今&#xff0c;一个网站只在桌面屏幕上好看是远远不够的&#xff0c;同时也要在平板电脑和智能手机中能够良好呈现。响应式的网站是指它能够适应客户端的屏幕尺寸&#xff0c;自动响应客户端尺寸变化。在这篇文章中&#xff0c;我将向您展示如何通过3个简单的步骤轻松地使网站…

hiveserver2 mysql_HiveServer2的配置使用

HiveServer2的配置和使用 hive-site.xml配置 hiveserver2的配置 property name hive.support.concurrency / name description Enable Hives TableLock Manager Service / description value true / value / property property name hive.zookeeper.quorum /HiveServer2的配置和…

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

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

spark插件剔除步骤

spark插件删除步骤当需要删除插件时&#xff0c;1.删除在../target/build/pulgins/**.jar&#xff0c;2.在运行../targer/build/bin/start.bat时&#xff0c;该start.bat文件默认&#xff0c;在C:\Documents and Settings\gty\&#xff08;gty电脑用户名&#xff09;下创建spar…

java json 修改字段_JSON文件-Java:编辑/更新字段值

我的工作流程中有一些JSONObject&#xff0c;并且通过将它们写入json文件来存储相同的JSONObject。我想要一种有效的方式来更新json文件&#xff0c; 仅 更新 需要的字段&#xff0c; 以及更新的JSONObjects实例的内容。例如&#xff1a;档案中我有ObjectOnFile {key1:val1, k…

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

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

Unity3d 手机屏幕自动适配

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