[笔记]机器学习(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终端中退格键,方向键不能使用
			
在安装Python的时候先安装 yum install readline-devel.x86_64 -y 如果python已经安装过了就重新安装 ./configure make all mak ...
 - 百度api的使用
			
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
 - Jmeter添加监控指标
			
需要监控的机器上安装Server-Agency(需要java环境支持)把ServerAgent-2.2.1.zip拷到需要监控的机器上,解压Linux启动如下2. Jmeter上添加监控最终有如下指标 ...
 - javascript 类型的判断
			
在平常写js代码,类型判断必不可少,那么我们常见有哪几种?看到了标题,先不看你会想到那些方法 ,常用呢些呢?那么今天我自己总结一些判断类型的判断,如有错,万望告知! 1:typeof 常用这种方法不错 ...
 - sql server 重命名列(字段)
			
调用系统存储过程sp_rename,直接看代码: EXEC sp_rename 'myTable.oldName','newName','COLUMN' 如果重命名表,则: EXEC sp_re ...
 - require.js学习笔记
			
使用require.js的好处? 1 有效的防止命名冲突(可以将变量封装在模块内,通过暴露出的接口解决命名冲突) 2 解决不同JS文件中的依赖 3 可以让我们的代码以模块化的方式组织 官方网站http ...
 - Elasticsearch搜索之most_fields分析
			
顾名思义,most_field就是匹配词干的字段数越多,分数越高,也可设置权重boost. 下面是简易公式(详细评分算法请参考:http://m.blog.csdn.net/article/detai ...
 - python之numpy的安装
			
这是我第一次写博客,我的第一次打算送给python的numpy库的安装指导,这是我看到一位大神的博客后产生的启发,真是控制不住自己,必须得写一下. 第一次安装numpy浪费了我一个下午,结果还没安装好 ...
 - java面试题—精选30道Java笔试题解答(二)
			
摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...
 - 探讨.NET Core数据加密和解密问题
			
前言 一直困扰着我关于数据加密这一块,24号晚上用了接近3个小时去完成一项任务,本以为立马能解决,但是为了保证数据的安全性,我们开始去对数据进行加密,然后接下来3个小时专门去研究加密这一块,然而用着用 ...