[笔记]机器学习(Machine Learning) - 02.逻辑回归(Logistic Regression)
逻辑回归算法是分类算法,虽然这个算法的名字中出现了“回归”,但逻辑回归算法实际上是一种分类算法,我们将它作为分类算法使用。。
分类问题:对于每个样本,判断它属于N个类中的那个类或哪几个类。通常我们判定一个样本,若我们预测它的确属于这个类的可能性大于50%,则认为它属于这个类。当然具体选择50%还是70%还是其他要看具体情况,这里先默认50%。
线性回归的局限性在分类问题的例子中变得不可靠:这是一个用来预测肿瘤是否呈阴性的模型,当一个肿瘤的尺寸大于一个数,我们就认为这个肿瘤呈阴性。我们现在新增了一个数据,结果导致整个模型的参数变化很大。如下图,在新加入最右侧数据后,50%的分水岭右移了不止一点点。而根据常识这个数据本应对我们的预测没有什么影响。
对此类问题引入新模型:
对于g(z)=1/(1+e^(-z))这个模型,对国内读过高中的学生都能看懂都想得出它的函数图像,当z>0时g大于0.5,z<0时g小于0.5,z=0时g=0.5。我们以此判定样本属于一个类的几率。现在上图这个模型就是g(theta.T X)(“.T”代表转置矩阵),即我们需要找到参数区分出50%这一边界。
对于下图的数据,我们只需使用一条直线分出0.5的交界处即可。
而对于下面的数据,我们觉得得使用曲线来适应才能分割y=0与y=1的区域。h(x)如图所示,最终得到一个类似圆形的形状。
对于更复杂的形状,我们可以使用更为复杂的模型。
不过以上的分类问题只有两个类(叫做二元分类问题),只需回答一个数据属于A还是B即可。后面还有复杂些的多类别分类,后面会讲,先仅仅分析叫做二元分类。
1.二元分类问题的代价函数
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们
也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将h(x)
带入到线性回归模型适用的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convex function)。
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值(是的即将讲的新模型能够确保找到全局最小值,因为它是凸函数(convex),只有一个极小值,那就是最小值。具体下面讲)。
于是重新定义逻辑回归的代价函数:
其中
简化上式得:
Cost带入J最终得到的代价函数:
h(x)与 Cost(h(x),y)之间的关系如下图所示:
这样构建的Cost(h θ (x),y)函数的特点是:当实际的y=1且 h也为1时误差为0,当y=1但h不为1时误差随着h的变小而变大;当实际的y=0且h也为0时代价为0,当y=0但h不为0时误差随着h的变大而变大。
2.对二元分类问题使用梯度下降
知道了代价函数然后像对线性回归一样使用梯度下降算法:
求导后得到:
(原视频少了1/m!我用红色补上了。)
于是乎我们惊奇的发现,这个式子的样子和之前用在线性回归的一样!而他们的J(θ)显然是不一样的。那么,线性回归和逻辑回归是同一个算法吗?
显然不是,要知道,我们是对x求导,而不是对h(x)求导,而两者的h(x)完全不同,所以求导的过程中要展开h(x)对x进行求导,所以结果其实是完全不同的。只不过这两个求导结果刚好可以重新用h(x)包装起来表示。所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
特征缩放
与线性回归一样的是,别忘记特征缩放。这很重要,特征缩放后可以更快地到达最优解,并防止反复的震荡。具体不再展开讲了。
梯度下降必能找到该代价函数的全局最小值
In this video, we will define the cost function for a single train example. The topic of convexity analysis is now beyond the scope of this course, but it is possible to show that with a particular choice of cost function, this will give a convex optimization problem. Overall cost function j of theta will be convex and local optima free.
在这个视频中,我们定义了单训练样本的代价函数,凸性分析的内容是超出这门课的范围的,但是可以证明我们所选的代价值函数会给我们一个凸优化问题。代价函数 J(θ)会是一个凸函数,并且没有局部最优值。
吴恩达老师的视频这里说了这个新的代价函数是凸函数,所以使用梯度下降一定能达到全局最小值。证明我也暂时不管它了。
3.多类别分类(Multiclass Classification)
上面讲了二元分类问题的计算方法,但是如果问题有很多个类,要你预测样本属于这么多类里的哪一个,要怎么做呢?通常我们使用“一对余”方法。
“一对余”方法:将“n类别问题”转换成“n个二元分类问题”。
比如现在有3个类ABC要划分,我们对每个类单独进行分析。比如对于类B,把所有数据划分成两类,属于B的(正样本)和不属于B的(负样本),我们不需要知道它是属于A还是C的,只需知道它不是B即可。于是对于每个类都变成了一个二元问题,一共3个二元问题。我们要做的就是训练这三个分类器。当预测一个新数据的分类时,我们选择3个h(x)里值最高的那个。
4.最小化代价函数的其他算法
一些梯度下降算法之外的选择:除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletchergoldfarb shann,BFGS,或叫变尺度法)和有限内存局部优化法(L-BFGS,或叫限制变尺度法)。虽然我暂时不打算看,但Mark一下。
[笔记]机器学习(Machine Learning) - 02.逻辑回归(Logistic Regression)的更多相关文章
- Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!
原文:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D ...
- 机器学习(四)--------逻辑回归(Logistic Regression)
逻辑回归(Logistic Regression) 线性回归用来预测,逻辑回归用来分类. 线性回归是拟合函数,逻辑回归是预测函数 逻辑回归就是分类. 分类问题用线性方程是不行的 线性方程拟合的是连 ...
- 【机器学习】Octave 实现逻辑回归 Logistic Regression
ex2data1.txt ex2data2.txt 本次算法的背景是,假如你是一个大学的管理者,你需要根据学生之前的成绩(两门科目)来预测该学生是否能进入该大学. 根据题意,我们不难分辨出这是一种二分 ...
- 机器学习 (三) 逻辑回归 Logistic Regression
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...
- 机器学习总结之逻辑回归Logistic Regression
机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问 ...
- 机器学习入门11 - 逻辑回归 (Logistic Regression)
原文链接:https://developers.google.com/machine-learning/crash-course/logistic-regression/ 逻辑回归会生成一个介于 0 ...
- ML 逻辑回归 Logistic Regression
逻辑回归 Logistic Regression 1 分类 Classification 首先我们来看看使用线性回归来解决分类会出现的问题.下图中,我们加入了一个训练集,产生的新的假设函数使得我们进行 ...
- 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...
- 逻辑回归(Logistic Regression)详解,公式推导及代码实现
逻辑回归(Logistic Regression) 什么是逻辑回归: 逻辑回归(Logistic Regression)是一种基于概率的模式识别算法,虽然名字中带"回归",但实际上 ...
随机推荐
- Python可视化学习(1):Matplotlib的配置
Matplotlib是一个优秀的可视化库,它提供了丰富的接口,让Python的可视化落地显得非常容易上手.本系列是本人学习python可视化的学习笔记,主要用于监督自己的学习进度,同时也希望和相关的博 ...
- libcrypto.so.1.0.0内容丢失导致sshd无法运行解决方案
libcrypto.so.10丢失导致sshd无法运行解决方案 服务器由于掉电开启系统后无法远程ssh,重启sshd服务弹如下图的错误: /usr/sbin/sshd:error while load ...
- 20. Valid Parentheses - 括号匹配验证
Description: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determin ...
- javaWEB与JSP指令
JSP三大指令 一个jsp页面中,可以有0~N个指令的定义!1. page --> 最复杂:<%@page language="java" info="xx ...
- 关于commonjs,AMD,CMD之间的异同
1.简介 随着前端业务复杂度的增加,模块化成为一个大的趋势.而在ES6还未被浏览器所支持的情况下,commonjs作为ES6中标准模块加载方案,在客服端中的支持情况并不好,现在在客服端中有2中模块化的 ...
- 微信小程序-实战巩固(二)
刚刚写了小程序入门没几天,小程序就开放个人开发者资格,感觉为我而来啊 \(≧▽≦)/.迫不及待的去注册,准备将之前的处女作传上去体验一把,结果卡在了服务器配置上:免费的果然不靠谱/(ㄒoㄒ)/~~,后 ...
- js动弹特效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- iOS项目之模拟请求数据
如何在iOS开发中更好的做假数据? 当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望.所以在开发中,我们常常自己做些假数据,以方便开发和UI ...
- Java反射理解
序言 一般而言,动态语言是指程序运行时,允许改变程序结构或变量类型的语言. 从这个观点来看,Perl.Python.Ruby是动态语言,C++.Java.C#不是动态语言. 但是Java有动态相关机制 ...
- reids数据类型
今天第一次开通,写的不好,请谅解 redis并不是简单的key-value存储,实际上它是一个数据结构服务器,支持不同类型的值,也就是说,我们不仅仅把字符串当作键所指向的值, 如下这些数据 ...