吴恩达(Andrew Ng)《机器学习》课程笔记(3) 第3周——逻辑回归_2.吴恩达(andrew ng)的机器学习课程里介绍过一种用 logistic回归训练图像二分 类(-程序员宅基地

技术标签: 吴恩达  机器学习  人工智能  吴恩达 机器学习笔记  

第3周 课程内容有点多,分两个博客。  

吴恩达(Andrew Ng)《机器学习》课程笔记(4)第3周——正则化

目录

六、逻辑回归(Logistic Regression)

6.1 分类(Classification)

6.2 假设表示(Hypothesis Representation)

6.3 决策边界(Decision Boundary)

6.4 代价函数(Cost Function)

6.5 简化的代价函数和梯度下降(Simplified Cost Function and Gradient Descent)

6.6 高级优化(Advanced Optimization)

6.7 多元分类:一对多(Multiclass Classification: One-Vs-All)


六、逻辑回归(Logistic Regression)

6.1 分类(Classification)

 

分类问题(Classification problems),也就是你想预测的值是一个离散的值。

我们会使用逻辑回归(Logistic Regression)算法来解决分类问题。

 

之前,我们讨论的垃圾邮件分类实际上就是一个分类问题。类似的例子还有很多,例如一个在线交易网站判断一次交易是否带有欺诈性。再如,之前判断一个肿瘤是良性的还是恶性的,也是一个分类问题。

在以上的这些例子中,属于二元分类,我们想预测的是一个二值的变量,或者为0,或者为1;或者是一封垃圾邮件,或者不是;或者是带有欺诈性的交易,或者不是;或者是一个恶性肿瘤,或者不是。

 

我们可以将因变量可能属于的两个类分别称为负向类(Negative Class)和正向类(Positive Class)。可以使用“0”来代表负向类,“1”来代表正向类。现在,我们的分类问题仅仅局限在两类上:0或者1。之后会讨论多分类问题,也就是说,预测的变量可以取多个值,例如0,1,2,3。

 

那么,我们如何来解决一个分类问题呢?首先从二元分类问题开始讨论,看以下例子:

现在有一个分类任务,需要根据肿瘤大小来判断肿瘤的良性与否。训练集如上图所示,横轴代表肿瘤大小,纵轴表示肿瘤的良性与否,注意,纵轴只有两个取值,“1”(代表恶性肿瘤)和“0”(代表良性肿瘤)。

对于以上数据集使用线性回归来处理,实际上就是用一条直线去拟合这些数据。因此,你得到的 直线可能如下图所示:

根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们只需要离散值“0”或“1”。我们可以这样预测:

对于上面的数据,我们使用一个线性回归模型做出了预测分类,似乎很好地完成了分类任务。难道真的就这么简单吗? 现在,我们对以上问题稍作一些改动。将横轴向右扩展,并且增加一个训练样本,如下图所示:

那么,使用刚才的线性回归模型,会得到一条新的直线:

此时,我们再用刚才所用的0.5作为阈值来预测肿瘤的良性还是恶性,就不合适了。可以看出,线性回归模型,因为其预测的值可以超过[0,1]的范围,并不适合解决分类问题。

所以,针对分类问题,我们将使用新的模型:逻辑回归(Logistic Regression)。下一节我们将展开叙述。

 

6.2 假设表示(Hypothesis Representation)

对于分类问题,我们引入新的模型:逻辑回归(Logistic Regression) 该模型的输出变量范围始终在[0,1]之间。

           我们在之前的线性回归模型的假设表示(Hypothesis Representation):{h_\theta }(x) = {\theta ^T}x

           而现在的逻辑回归模型的假设表示(Hypothesis Representation) :{h_\theta }(x) = g({\theta ^T}x)    ,其中:x表示特征向量;

g(.)表示逻辑函数(Logistic function):是一个常用的逻辑函数:S形函数(Sigmoid function),一般逻辑函数就等同于S形函数。

这里的逻辑回归(Logistic function)是一种分类算法,不要与线性回归弄混淆。

 

S形函数(Sigmoid function)表达式和曲线如下:

                                                                                      g(z) = \frac{1}{​{1 + {e^z}}}

则逻辑回归模型为:

                                                                            {h_\theta }(x) = \frac{1}{​{1 + {e^{​{\theta ^T}x}}}}

           可以看出预测值y的取值范围是[0,1],对于{h_\theta }(x) \ge 0.5,模型预测值输出y=1;{h_\theta }(x) < 0.5 ,模型预测值输出y=0。

值得注意的是:{h_\theta }(x)属于y=1分类的概率,即:

此外由于y只能取“0”或“1”两个值,换句话说,一个数据要么属于0分类要么属于1分类,假设已经知道了属于1分类的概率是p,那么当然其属于0分类的概率则为1-p,这样我们有以下结论:

          例如:如果对于给定的x,通过已经确定的参数计算得到{h_\theta }(x) = 0.7,则表示70%的概率y=1,则{h_\theta }(x) \ge 0.5,所以y=1。相应的y=0的概率为0.3。

 

6.3 决策边界(Decision Boundary)

在逻辑回归中,我们预测:

{h_\theta }(x) \ge 0.5,模型预测值输出y=1;{h_\theta }(x) < 0.5,模型预测值输出y=0。

那么:

现在举个例子方便我们理解:

已知下图的数据,现要将其分类,需要用到逻辑回归模型。

假设现在有一个逻辑回归模型:

          ,并且参数θ为:向量:[-3 1 1]。

          将参数θ带入到假设模型中得到:{h_\theta }(x) = g( - 3 + {x_1} + {x_2})

那么,根据上面的式子:

         

得到上面的参数,现在可以绘制{x_1} + {x_2} = 3的图像了,如下图所示:

从上图可以看出,合适的参数θ将数据成功的分开,这条绿色线就是模型的分界线,就是决策边界(Decision Boundary),将预测为1的区域和预测为0 的区域分开。

下面再看一个例子:如下图的数据,用逻辑回归模型,参数怎样设置,才能适应决策边界?

因为要用曲线才能分开y=0的区域和y=1的区域,我们需要借助二次方参数特征:假设参数:

, 其中,参数θ为:向量[-1 0 0 1 1]。

根据以上参数,我们得到决策边界恰好是以原点为中心,半径为1的圆。如下图所示:

           则,这个问题就转化为:

这只是一个例子,恰好可以简单地求出决策边界,并且我们对决策的边界是非常熟悉的曲线方程。

当然,我们参数θ设置越复杂,得到的决策边界会变得复杂。

 

6.4 代价函数(Cost Function)

对于线性回归问题,使用线性回归模型,我么定义代价函数是误差的平方和。同样的,理论上说,我们对分类问题,使用逻辑回归模型的也定义代价函数的误差的平方和,但是这里有个问题出现了。

          我们将假设(Hypothesis) :{h_\theta }(x) = \frac{1}{​{1 + {e^{​{\theta ^T}x}}}}  ,带入到代价函数中,我们得到的代价函数是一个非凸函数(non-convex function),其曲线图下图所示,这意味着我们的代价函数有许多局部最小值,这将对在使用梯度下降法求全局最小值影响很大。

凸函数(convex function),只有一个最小值,也是我们最想要得到的,在梯度下降法中,将很快的寻找到全局最小值,凸函数曲线如下图所示:

因此,要是能使代价函数转化为凸函数,问题就迎刃而解了。那么问题来了,用什么方法将非凸函数转化为凸函数呢?   

 

现在,我们重新定义逻辑回归模型的代价函数(Cost Function):

如下图所示,使用对数函数,对数函数是一个单调函数,并且:

           可以看到,当y=1,时,则代价函数为0;

           反之,y=0,时,则代价函数为无穷大,符合我们的预期想要的结果(在[0,1]区间内可以找到全局最小值,这个最小值就是0)。

 

6.5 简化的代价函数和梯度下降(Simplified Cost Function and Gradient Descent)

前面,我们构建了逻辑回归代价函数,其表达式为:

这样构建的代价函数特点是:

           当y=1且 时,代价函数为0;当y=0且时,代价函数随着增大而减小;

           当y=0且时,代价函数为0;当当y=0且时,代价函数随着增大而增大。

前面的代价函数是分段函数,为了使得计算起来更加方便,可以将分段函数写成一个函数的形式,即:

           根据代价函数,我们的目的是找到使得代价函数取得全局最小值时的参数θ,最后根据这个参数,在逻辑回归预测模型中,预测得到 {h_\theta }(x) = \frac{1}{​{1 + {e^{​{\theta ^T}x}}}} 的值。值得注意的是:得到的值就是y=1出现的概率,即:

所以,最关键的一步就是如何找到最小值,前面说过,用梯度下降法求最小值。

求导,化简得到:

           注意:这里的求解方法和线性回归求解方法看起来类似。其实这里的{h_\theta }(x) = {\theta ^T}x与线性回归中不同。所以与线性回归不同。另外,在使用梯度下降法前,特征缩放(归一化)是非常重要的。

 

6.6 高级优化(Advanced Optimization)

当然,求出代价函数的最小值的方法有很多,不仅仅只有梯度下降法一个。 除了梯度下降算法,可以采用高级优化算法,例如:共轭梯度(Conjugate Gradient),局部优化法(BFGS),有限内存局部优化法(L-BFGS)等。这些算法优点是不需要手动选择α,比梯度下降算法更快;缺点是算法更加复杂。这些算法Matlab中都有。下面举例进行说明:

 

6.7 多元分类:一对多(Multiclass Classification: One-Vs-All)

多分类例子,例如:

(1)邮箱自动将邮件进行,分组类别有:同事,朋友,家人,同学等,可以用数字1,2,3,4…分类;

(2)去诊所看病,其分类可以有:正常,感冒,流感等,可以用数字1,2,3,…分类;

(3)预测天气情况,其分类可以有:晴天,多云,下雨,下雪等,可以用数字1,2,3,4…分类;

下图是一个二分类和多分类的数据,多分类可以借助二分类的思想依次做分类。

将数据分别进行两两分类,使用二元分类方法得到3个训练好的模型。最后将测试数据输入到模型中去,分别计算其预测值,选择预测值最大的作为其预测分类即可。

一般的:

Logistic回归可以用于多元分类,采用所谓的One-Vs-All方法,具体来说,假设有K个分类{1,2,3,...,K},我们首先训练一个逻辑回归模型将数据分为属于1类的和不属于1类的,接着训练第二个逻辑回归模型,将数据分为属于2类的和不属于2类的,一次类推,直到训练完K个逻辑回归模型。

对于新的数据,我们将其带入K个训练好的模型中,分别其计算其预测值(预测值的大小表示属于某分类的概率),选择预测值最大的那个分类作为其预测分类即可。

 

参考资料

[1] Andrew Ng Coursera 机器学习 第三周 PPT

[2] https://blog.csdn.net/mydear_11000/article/details/50865094

[3] https://www.cnblogs.com/python27/p/MachineLearningWeek03.html

 

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

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签