机器学习笔记(三)Logistic回归模型
Logistic回归模型
1. 模型简介:
线性回归往往并不能很好地解决分类问题,所以我们引出Logistic回归算法,算法的输出值或者说预测值一直介于0和1,虽然算法的名字有“回归”二字,但实际上Logistic回归是一种分类算法(classification y = 0 or 1)。
Logistic回归模型:
课堂记录(函数图像):
函数h(x)的输出值,我们把它看做,对于一个输入值x,y = 1的概率估计。比如说肿瘤分类的例子,我们有一个特征向量x,似的h(x)的输出为0.7,我们的假设将这样解释:这个具有特征向量x的患者,患有恶性肿瘤(y=1)的概率为0.7。
进一步理解假设函数:
如上推导过程由y = 0/y = 1,的结论出发,转化成为对的取值范围要求。下面引入一个简单的例子,并介绍决策边界的概念。
决策边界:
在上图例中,我们假设已经拟合出参数,满足
时,
,我们将图中标为绿色的这条直线
称为决策边界,这条直线上的点满足
。【注:决策边界是假设函数
的属性,决定于其参数,不是数据集的属性。只要给定了假设函数参数,决策边界(形状)就确定了。】
在logistic回归中,应用更复杂的假设函数,我们就可能得到具有更复杂形状的决策边界。
2. 如何拟合Logistic回归(假设函数参数):
具体来说,我要来定义用来拟合参数的代价函数,这便是监督学习问题中Logistic回归模型的拟合问题。
我们有一个训练集,里面有m个训练样本,每个训练样本用n+1维的特征向量表示,特征。由于是一个分类问题,所以具有这样的特征:所有的标签y不是0就是1。
对于这个代价函数Cost的理解是这样的,它是在输出的预测值是时,而实际标签是y的情况下,我们希望学习算法付出的代价。由于在Logistic回归中我们的假设函数是非线性的,所以我们得到的代价函数
可能会是一个非凸函数,如左边的图像,很显然如果我们对这样的使用梯度下降法是无法保证得到全局最优的。因此我们需要找到一种新的Cost函数形式,使我们得到右侧的凸函数图像,以便使用我们比较好的算法如梯度下降算法。
凸优化问题:
y = 1的情况
我们对函数的左右两端(0,1)进行分析可知此代价函数合理(y = 1时,如果,将会获得巨大的代价;如果
,则预测正确,代价为0)。
y = 0的情况
同理我们可对其合理性进行分析。
我们可以将代价函数优化后写成如下更加紧凑的等价形式:
课堂记录:
Conclusion:
有了代价函数,我们要寻找使其最小的一组参数 。Logistic回归整体思路如下:
3. 梯度下降过程:
尽管蓝色框中更新参数的规则看起来和线性回归的梯度下降参数更新规则基本相同,但实际上由于假设的定义发生变化,它和线性回归中的梯度下降实际上是完全不同的。同时,在实现的过程中记得要注意特征缩放带来的优化效果。
4. 高级优化:
实际上完全有可能成功使用这些算法并应用于许多不同的学习问题,而不需要真正理解这些算法的内循环在做什么。同时除非你的研究方向即数值计算,否则都不推荐自己实现这些算法去应用,因为它们比梯度下降要复杂得多。
下面以一个例子解释这些高级算法如何应用。
我们实现一个代价函数costFounction(theta),它返回两个参数,其中jVal是我们要计算的代价函数,gradient是一个n*1维向量,其值与偏导数项一一对应。运行这个costFounction函数,完成以上两部分值的计算后,我们就可以调用高级的优化函数,这个函数叫fminunc(in Octave 表示无约束最小化函数)。(首先需要设置一些options:此处设置梯度目标参数为“on”、100次迭代)@costFunction指向我们刚定义的costFunction函数的指针,如果你调用它,就会使用高级优化算法其中的一个,当然你可以把它当做是梯度下降,只不过它能自动选择学习速率
(注:此处使用fminunc时
)。
实现代码:
有了这些高级优化的概念,并将它们很好的应用于较大规模的机器学习问题。我们就能将Logistic回归和线性回归模型应用于解决更多的学习问题。
5. 多类别分类问题:
其实我们也可以将二元分类问题的思想用在多分类问题中,称为一对多的思想。
如上图左侧是我们解决二元分类问题的过程。一对多分类的思想如下图:
我们拟合出三个分类器,每一个分类器都针对其中一种情况进行训练,最终我们训练了逻辑回归的分类器
,预测i类别y=i的概率。最后为了做出预测,我们对每个分类器输入一个x,最后取h最大的类别。
机器学习笔记(三)Logistic回归模型的更多相关文章
- 吴恩达机器学习笔记 —— 7 Logistic回归
http://www.cnblogs.com/xing901022/p/9332529.html 本章主要讲解了逻辑回归相关的问题,比如什么是分类?逻辑回归如何定义损失函数?逻辑回归如何求最优解?如何 ...
- 机器学习笔记(四)Logistic回归模型实现
一.Logistic回归实现 (一)特征值较少的情况 1. 实验数据 吴恩达<机器学习>第二课时作业提供数据1.判断一个学生能否被一个大学录取,给出的数据集为学生两门课的成绩和是否被录取 ...
- 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归
机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...
- 机器学习实战读书笔记(五)Logistic回归
Logistic回归的一般过程 1.收集数据:采用任意方法收集 2.准备数据:由于需要进行距离计算,因此要求数据类型为数值型.另外,结构化数据格式则最佳 3.分析数据:采用任意方法对数据进行分析 4. ...
- 机器学习(4)之Logistic回归
机器学习(4)之Logistic回归 1. 算法推导 与之前学过的梯度下降等不同,Logistic回归是一类分类问题,而前者是回归问题.回归问题中,尝试预测的变量y是连续的变量,而在分类问题中,y是一 ...
- 机器学习之线性回归---logistic回归---softmax回归
在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题 ...
- 如何在R语言中使用Logistic回归模型
在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价.身高.GDP.学生成绩等,发现这些被预测的变量都属于连续型变量.然而有些情况下,被预测变量可能是二元变量,即成功或失败.流失或 ...
- SPSS数据分析—多分类Logistic回归模型
前面我们说过二分类Logistic回归模型,但分类变量并不只是二分类一种,还有多分类,本次我们介绍当因变量为多分类时的Logistic回归模型. 多分类Logistic回归模型又分为有序多分类Logi ...
- logistic回归模型
一.模型简介 线性回归默认因变量为连续变量,而实际分析中,有时候会遇到因变量为分类变量的情况,例如阴性阳性.性别.血型等.此时如果还使用前面介绍的线性回归模型进行拟合的话,会出现问题,以二分类变量为例 ...
随机推荐
- Inception部署
Inception是集审核.执行.回滚于一体的一个SQL自动化运维系统,基于MySQL代码修改,官方文档地址:https://mysql-inception.github.io/inception-d ...
- Android 项目配置 gitlab-ci 持续集成
一.项目根目录下创建一个 .gitlab-ci.yml 文件 然后在 .gitlab-ci.yml 中配置持续集成的脚本: 脚本配置详细可以看: Configuration of your jobs ...
- C#实现基于ffmpeg加虹软的人脸识别demo及开发分享
对开发库的C#封装,屏蔽使用细节,可以快速安全的调用人脸识别相关API.具体见github地址.新增对.NET Core的支持,在Linux(Ubuntu下)测试通过.具体的使用例子和Demo详解,参 ...
- [大数据面试题]storm核心知识点
1.storm基本架构 storm的主从分别为Nimbus.Supervisor,工作进程为Worker. 2.计算模型 Storm的计算模型分为Spout和Bolt,Spout作为管口.Bolt作为 ...
- LeetCode--030--串联所有单词的字串(java)
给定一个字符串 s 和一些长度相同的单词 words.找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要 ...
- github隐藏文件&删除文件
一.隐藏文件不提交至github 例如:需隐藏node_modules文件夹 1.找到.gitignore文件,一般这个是隐藏文件,需要显示隐藏文件 2.编辑.gitignore文件,加入下面这一句话 ...
- js 取整 取余
1.取整//保留整数部分parseInt(3/2) // 1 2.向上取整// 向上取整,有小数就整数部分加1Math.ceil(3/2) // 2 3.四舍五入// 四舍五入Math.round(3 ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- DOM 操作成本究竟有多高,HTML、CSS构建过程 ,从什么方向出发避免重绘重排)
前言: 2019年!我准备好了 正文:从我接触前端到现在,一直听到的一句话:操作DOM的成本很高,不要轻易去操作DOM.尤其是React.vue等MV*框架的出现,数据驱动视图的模式越发深入人心,jQ ...
- 安装 yaml-cpp,MP4V2
一.在ubuntu上安装yaml-cpp的过程: git clone https://github.com/jbeder/yaml-cpp.git进入yaml-cpp目录后,mkdir buildcd ...