主要为第三周课程内容:逻辑回归与正则化

逻辑回归(Logistic Regression)

一、逻辑回归模型引入

分类问题是指尝试预测的是结果是否属于某一个类。

  • 维基百科的定义为:根据已知训练区提供的样本,通过计算选择特征参数,建立判别函数以对样本进行的分类(有监督分类)。
  • 统计学习方法中定义:在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题。这时,输入变量X可以是离散的,也可以是连续的。监督学习从数据中学习一个分类模型或分类决策函数,称为分类器(classifier)。分类器对新的输入进行输出的预测(prediction),称为分类(classification)。

典型的分类问题有:判断一封邮件是否为垃圾邮件、判断有没有的乳腺癌等等。

先只讨论二元分类问题。即y为0或者1。如判断乳腺癌分类问题,我们可以试着用线性回归的方法去拟合数据,得到一条直线:

由于线性回归模型只能预测连续的值,而对于分类问题需要判断y属于0,还是1。那么可以设置一个阈值(如:0.5)来判定:

这样线性回归也能用于分类。但是缺点是如果有个异常点,会影响拟合的直线,从而原来的阈值不再合适。如图

可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。

引入一个新的模型使得模型的输出变量范围在(0,1)之间,即逻辑斯蒂回归模型,简称为逻辑回归。

逻辑回归的假设为:h=g(θ'x),这里引入一个新函数g,g使得h由输出范围变为(0,1)。g 称为sigmoid function 和 logistic function,表达式为:

函数图像为:

则逻辑回顾的假设也可以写成:

回到最初,我们仍然还可以通过设置阈值来判断,如给定的阈值为0.5:

h=0.5时,z = 0,即θ'x = 0。则可以推出:

那么θ'x = 0时,可以看成是模型的判断分界线,称为判定边界,如图

二、代价函数及其梯度下降法

如果按照线性回归模型的代价函数:模型误差的平方和,那么逻辑回归得到代价函数将是非凸函数(non-convex function),会有很多局部最优解,将影响梯度下降法寻找全局最优解。所以需要重新定义代价函数。

重新定义的代价函数为:

其中:

代价函数可以简写成:

那么相应的梯度算法为:

三、优化和多分类问题

  寻找代价函数的最小值不仅仅只有梯度下降算法,还有其他的比如:共轭梯度( Conjugate Gradient ),局部优化法( Broyden fletcher goldfarb shann, BFGS) 和有限内存局部优化法(LBFGS)。

  多分类问题即训练集里有超过2个的类,因此无法用二元变量去判断。一种解决方法是一对多方法(One-vs-All)。

  一对多方法是将多分类转换为二元分类问题:将其中一个类标记为正类,其他类标记为分类,训练模型,得到参数,得到一个分类器。然后将第二个类标价为正类,其他类为负类,以此反复进行,得到一系列的模型参数。当需要预测时,运行所有分类器,选择其中最高值对应的模型所代表的正类。

四、正则化(Regularzation)

  当我们训练模型的时候,通常有这三种情况:

  • 得到的模型不能很好地适应训练集——低度拟合
  • 得到的模型完全适应训练集,但是新输入值时,预测效果不是很好——过度拟合
  • 较好地适应训练集,也能推广到新的数据。

如图:

低拟合对应的是高偏差,过拟合对应的是高方差。

  如果发生过拟合问题,应该如何处理?

    方法一:丢弃一些不需要的特征

  1. 人工选择
  2. 算法选择(PCA等)

    方法二:正则化

保留所有特征,减小参数的大小

正则化的方法是:对那些特征所需要减小的参数,在代价函数中增加相应的惩罚。如果我们有很多特征,不知道那些特征需要惩罚,那么我们可以对所有特征进行惩罚即

其中λ称为正则化参数,根据惯例不对进行惩罚。

如果λ过小,那么相当惩罚很小,造成过拟合;如果λ过大,则会所有参数都变小,导致模型接近直线,造成低度拟合;因此也需要选择适合的λ。

对线性回归正则化:

正则化后的梯度下降算法:

注意:θ0没有正则化项,其他都有。

对逻辑回归正则化:

正则化后的梯度下降算法:

注意:虽然和线性回归一样,但是hθ(x)的表达式不一样,与线性回归不同。

Coursera 机器学习笔记(二)的更多相关文章

  1. coursera机器学习笔记-建议,系统设计

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  2. coursera机器学习笔记-神经网络,学习篇

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  3. coursera机器学习笔记-神经网络,初识篇

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  4. coursera机器学习笔记-多元线性回归,normal equation

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  5. coursera机器学习笔记-机器学习概论,梯度下降法

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  6. Coursera 机器学习笔记(八)

    主要为第十周内容:大规模机器学习.案例.总结 (一)随机梯度下降法 如果有一个大规模的训练集,普通的批量梯度下降法需要计算整个训练集的误差的平方和,如果学习方法需要迭代20次,这已经是非常大的计算代价 ...

  7. Coursera 机器学习笔记(七)

    主要为第九周内容:异常检测.推荐系统 (一)异常检测(DENSITY ESTIMATION) 核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非 ...

  8. Coursera 机器学习笔记(六)

    主要为第八周内容:聚类(Clustering).降维 聚类是非监督学习中的重要的一类算法.相比之前监督学习中的有标签数据,非监督学习中的是无标签数据.非监督学习的任务是对这些无标签数据根据特征找到内在 ...

  9. Coursera 机器学习笔记(四)

    主要为第六周内容机器学习应用建议以及系统设计. 下一步做什么 当训练好一个模型,预测未知数据,发现结果不如人意,该如何提高呢? 1.获得更多的训练实例 2.尝试减少特征的数量 3.尝试获得更多的特征 ...

随机推荐

  1. CLR via C#中的一个多线程例子

    parallel的For和ForEach方法有一些重载版本允许传递三个委托 1.任务局部初始化委托(localInit),未参与工作的每一个任务都调用一次委托,在任务被要求处理前调用. 2.主体委托( ...

  2. C++学习笔记1(扩充:C++中的格式控制)

    前一章,我们了解了再C++中的标准的输入输出问题,那么肯能就有人会问了再C语言中我们可以灵活的控制输出和显示,那么再再C++中可以实现吗?我的回答是当然可以的,只不过再C++中的控制可能相比较而言要比 ...

  3. json数据渲染表单元素出现的问题

    解析页面表单元素 parseForm: function () { var data = {}; $(this).find('input').each(function () { switch ($( ...

  4. Python数据结构与循环语句

    # Python数据结构与循环语句:   首先编程是一项技能,类似跑步,期初不必在意细节,能使用起来就行,等学的游刃有余了再回过头来关注细节问题也不迟.  关于买书: 学会python之后,才需要买书 ...

  5. bzoj1798 [Ahoi2009]维护序列

    Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...

  6. 在C#中使用类golang信道编程(一)

    BusterWood.Channels是一个在C#上实现的信道的开源库.通过使用这个类库,我们可以在C#语言中实现类似golang和goroutine的信道编程方式.在这里我们介绍3个简单的信道的例子 ...

  7. webpack学习(三)之web-dev-server不能自动刷新问题

    使用webpack-dev-server中遇到不能浏览器无法自动刷新的问题:寻找多方答案后明白了一些: 下面有一些需要注意的点: 1.webpack-dev-server并不能读取你的webpack. ...

  8. 设计模式--MVC(C++版)

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型)-是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象 ...

  9. mybatis mapper.xml 写关联查询 运用 resultmap 结果集中 用 association 关联其他表 并且 用 association 的 select 查询值 报错 java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for mybatis.map

    用mybaits 写一个关联查询 查询商品表关联商品规格表,并查询规格表中的数量.价格等,为了sql重用性,利用 association 节点 查询 结果并赋值报错 商品表的mapper文件为Gooo ...

  10. Rxjava学习小记

    最近同事离职,接了个锅,里面的代码都是RxJava的味道,逼的自己不得不学习一波.看了网上的很多入门篇的博客,写的很不错.链接奉上: [Android]RxJava的使用(三)转换--map.flat ...