技术标签: 吴恩达 机器学习 人工智能 吴恩达 机器学习笔记
第3周 课程内容有点多,分两个博客。
吴恩达(Andrew Ng)《机器学习》课程笔记(4)第3周——正则化
目录
6.2 假设表示(Hypothesis Representation)
6.5 简化的代价函数和梯度下降(Simplified Cost Function and Gradient Descent)
6.6 高级优化(Advanced Optimization)
6.7 多元分类:一对多(Multiclass Classification: One-Vs-All)
分类问题(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)。下一节我们将展开叙述。
对于分类问题,我们引入新的模型:逻辑回归(Logistic Regression) 该模型的输出变量范围始终在[0,1]之间。
我们在之前的线性回归模型的假设表示(Hypothesis Representation):
而现在的逻辑回归模型的假设表示(Hypothesis Representation) : ,其中:x表示特征向量;
g(.)表示逻辑函数(Logistic function):是一个常用的逻辑函数:S形函数(Sigmoid function),一般逻辑函数就等同于S形函数。
这里的逻辑回归(Logistic function)是一种分类算法,不要与线性回归弄混淆。
S形函数(Sigmoid function)表达式和曲线如下:
则逻辑回归模型为:
可以看出预测值y的取值范围是[0,1],对于,模型预测值输出y=1; ,模型预测值输出y=0。
值得注意的是:属于y=1分类的概率,即:
此外由于y只能取“0”或“1”两个值,换句话说,一个数据要么属于0分类要么属于1分类,假设已经知道了属于1分类的概率是p,那么当然其属于0分类的概率则为1-p,这样我们有以下结论:
例如:如果对于给定的x,通过已经确定的参数计算得到,则表示70%的概率y=1,则,所以y=1。相应的y=0的概率为0.3。
在逻辑回归中,我们预测:
,模型预测值输出y=1;,模型预测值输出y=0。
那么:
现在举个例子方便我们理解:
已知下图的数据,现要将其分类,需要用到逻辑回归模型。
假设现在有一个逻辑回归模型:
,并且参数θ为:向量:[-3 1 1]。
将参数θ带入到假设模型中得到:
那么,根据上面的式子:
得到上面的参数,现在可以绘制的图像了,如下图所示:
从上图可以看出,合适的参数θ将数据成功的分开,这条绿色线就是模型的分界线,就是决策边界(Decision Boundary),将预测为1的区域和预测为0 的区域分开。
下面再看一个例子:如下图的数据,用逻辑回归模型,参数怎样设置,才能适应决策边界?
因为要用曲线才能分开y=0的区域和y=1的区域,我们需要借助二次方参数特征:假设参数:
, 其中,参数θ为:向量[-1 0 0 1 1]。
根据以上参数,我们得到决策边界恰好是以原点为中心,半径为1的圆。如下图所示:
则,这个问题就转化为:
这只是一个例子,恰好可以简单地求出决策边界,并且我们对决策的边界是非常熟悉的曲线方程。
当然,我们参数θ设置越复杂,得到的决策边界会变得复杂。
对于线性回归问题,使用线性回归模型,我么定义代价函数是误差的平方和。同样的,理论上说,我们对分类问题,使用逻辑回归模型的也定义代价函数的误差的平方和,但是这里有个问题出现了。
我们将假设(Hypothesis) : ,带入到代价函数中,我们得到的代价函数是一个非凸函数(non-convex function),其曲线图下图所示,这意味着我们的代价函数有许多局部最小值,这将对在使用梯度下降法求全局最小值影响很大。
凸函数(convex function),只有一个最小值,也是我们最想要得到的,在梯度下降法中,将很快的寻找到全局最小值,凸函数曲线如下图所示:
因此,要是能使代价函数转化为凸函数,问题就迎刃而解了。那么问题来了,用什么方法将非凸函数转化为凸函数呢?
现在,我们重新定义逻辑回归模型的代价函数(Cost Function):
如下图所示,使用对数函数,对数函数是一个单调函数,并且:
可以看到,当y=1,时,则代价函数为0;
反之,y=0,时,则代价函数为无穷大,符合我们的预期想要的结果(在[0,1]区间内可以找到全局最小值,这个最小值就是0)。
前面,我们构建了逻辑回归代价函数,其表达式为:
这样构建的代价函数特点是:
当y=1且 时,代价函数为0;当y=0且时,代价函数随着增大而减小;
当y=0且时,代价函数为0;当当y=0且时,代价函数随着增大而增大。
前面的代价函数是分段函数,为了使得计算起来更加方便,可以将分段函数写成一个函数的形式,即:
根据代价函数,我们的目的是找到使得代价函数取得全局最小值时的参数θ,最后根据这个参数,在逻辑回归预测模型中,预测得到 的值。值得注意的是:得到的值就是y=1出现的概率,即:。
所以,最关键的一步就是如何找到最小值,前面说过,用梯度下降法求最小值。
求导,化简得到:
注意:这里的求解方法和线性回归求解方法看起来类似。其实这里的与线性回归中不同。所以与线性回归不同。另外,在使用梯度下降法前,特征缩放(归一化)是非常重要的。
当然,求出代价函数的最小值的方法有很多,不仅仅只有梯度下降法一个。 除了梯度下降算法,可以采用高级优化算法,例如:共轭梯度(Conjugate Gradient),局部优化法(BFGS),有限内存局部优化法(L-BFGS)等。这些算法优点是不需要手动选择α,比梯度下降算法更快;缺点是算法更加复杂。这些算法Matlab中都有。下面举例进行说明:
多分类例子,例如:
(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
文章浏览阅读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..._达梦数据库导入导出
文章浏览阅读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
文章浏览阅读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
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读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...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读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++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读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怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf