Logistic Regression

摘要

主要是三方面的内容。

**逻辑回归。**分类问题的输出其实是逻辑离散的集合,比如{是,不是},{红,黑,白},能否让算法将结果统一到0和1之间呢,按照0.5的阈值进行分类预测呢?sigmoid函数可以做这种投射。于是改变了目标函数h(x),因为目标函数不再是线性回归,所以需要新的损失函数J,方便梯度下降求导全局最小值。

过拟合。增加特征这件事可以使得训练集拟合得更好,但是一方面,增加特征,需要比梯度下降更高效的实现(调库),另一方面,容易产生过拟合,于是本周第二个重点是如何处理过度拟合——损失函数引入theta,使其自动权衡的思想。

小结:机器学习的本质。本周主要是这两个方面的内容,其实本质上就是改变了一个模型,和上周内容基本一样,但产生了很多进阶型问题。两周下来,对机器学习有了更好理解,于是最后还有一个机器学习的总结。

逻辑归回

基本模型

目的,将函数输出,无穷大的取值投射到(0, 1)之间,意义在于,分类问题,典型的二分类问题,输出非黑即白,即所谓逻辑输出。

sigmoid函数,接上面,要做到这样的事其实非常简单,请看下方
hθ(x)=g(θTx)h_{\theta}(x)=g\left(\theta^{T} x\right) hθ​(x)=g(θTx)

g(z)=11+e−zg(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1​

修改目标函数,利用g函数进行投射,即可完成效果。

于是,目标函数不再是线性回归,导致图像上看,损失函数可能是完全不规则——有很多局域最值,所以需要新的损失函数。但此处为什么这么设计,并不清楚,只知道,从图像上看,对数函数取值确实符合目标函数的要求——当y=1,h(x)->0时,J(θ)趋近无穷大,即y=1这个结果误差非常大;反之,h(x)->1时,j(θ)趋近0,即此时y=1这个结果误差很小。——我们本来目标函数就是这么设计的。
J(θ)=1m∑i=1m[−y(i)log⁡(hθ(x(i)))−(1−y(i))log⁡(1−hθ(x(i)))]J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] J(θ)=m1​i=1∑m​[−y(i)log(hθ​(x(i)))−(1−y(i))log(1−hθ​(x(i)))]

损失函数看起来很复杂,但其实求导能证明还是以下形式。
∂J(θ)∂θj=1m∑i=1m(hθ(x(i))−y(i))xj(i)\frac{\partial J(\theta)}{\partial \theta_{j}}=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} ∂θj​∂J(θ)​=m1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

Decision Boundary,注意看以下图片,直线做分类界限,看起来和线性回归一样,但其实不是,直线不再是做预测作用,只作为分界线。仔细想想,此时真正的输出是分类的结果。

进阶——更加复杂的分界线

直线并不一定能分类,就比如下面的例子,这种明显需要更加复杂的图形。

Feature 增加,增加features数量,能够拟合更加复杂的问题,但其实并不是一定要增加数据,大多数时候,只需要对输入的features,比如两个特征进行处理,就可以增加特征。如下。
mapFeature⁡(x)=[1x1x2x12x1x2x12x13⋮x1x25x26]\operatorname{mapFeature}(x)=\left[\begin{array}{c}{1} \\ {x_{1}} \\ {x_{2}} \\ {x_{1}^{2}} \\ {x_{1} x_{2}} \\ {x_{1}^{2}} \\ {x_{1}^{3}} \\ {\vdots} \\ {x_{1} x_{2}^{5}} \\ {x_{2}^{6}}\end{array}\right] mapFeature(x)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​1x1​x2​x12​x1​x2​x12​x13​⋮x1​x25​x26​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​
但问题在于,太多维度容易出现过度拟合,如下。

此问题我们稍后讨论。另一个问题是,维度增加,像上面到6次方,则共有28维,梯度下降效率不够用,于是又了一些高效的求解损失函数最小值的方法。比如

fminunc,这是matlab中更加高效的求解最小值的方法,相对非常复杂,只需要调库即可,好处是,只需提供损失函数,不需要自己迭代,也不需要找Learning Rate。

% Set Options。'GradObj', 'on'打开梯度下降,后面则是迭代次数
options = optimset('GradObj', 'on', 'MaxIter', 400);% Optimize
[theta, J, exit_flag] = ...fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);

多分类问题

其实是拆成多逻辑分类问题。

过度拟合的处理

方法有三种:

  1. 减少features数量

  2. 修改算法

  3. θ看作features的权重的话,降低权重

3方法在特征很多的情况下特别有用,重点是关注它的思想

损失函数引入θ。这时是这样的,一方面,为了使得J取值小,θ必然会自动取小;另一方面,一旦θ太小,则误差就会变大,损失函数就会变大。这二者自动在一条公式中权衡,非常有意思。

新损失函数。
J(θ)=1m∑i=1m[−y(i)log⁡(hθ(x(i)))−(1−y(i))log⁡(1−hθ(x(i)))]+λ2m∑j=1nθj2J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]+\frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}^{2} J(θ)=m1​i=1∑m​[−y(i)log(hθ​(x(i)))−(1−y(i))log(1−hθ​(x(i)))]+2mλ​j=1∑n​θj2​

新梯度下降。
∂J(θ)∂θ0=1m∑i=1m(hθ(x(i))−y(i))xj(i)\frac{\partial J(\theta)}{\partial \theta_{0}}=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} ∂θ0​∂J(θ)​=m1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

∂J(θ)∂θj=(1m∑i=1m(hθ(x(i))−y(i))xj(i))+λmθjfor j≥1\frac{\partial J(\theta)}{\partial \theta_{j}}=\left(\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}\right)+\frac{\lambda}{m} \theta_{j} \quad \text { for } j \geq 1 ∂θj​∂J(θ)​=(m1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​)+mλ​θj​ for j≥1

结果。

小结:机器学习本质

练习内容

熟悉了矩阵运算……实现变得非常直接。

Logistic Regression——线性分割线

  1. plot画图
  2. 完成sigmoid函数
  3. 基于sigmoid函数的costfunction和gradient
  4. fminunc,用于自动求解损失函数最小值,只需提供损失函数和数据,不必自己迭代,不必自己确定学习效率
  5. 读plotDecisionBoundary.m,注意画的是Decision Boundary而不是目标函数,划线,任意取两点,但是要保证在可显示范围内,于是,代码取了数据的最小x和最大x,两个点,加上系数θ

Regularized logistic regression——复杂分割线

  1. Feature mapping,扩充feature的维度,即增加函数的次数,使得可以画出更复杂的图形,不需要写代码,但是要理解好扩充的过程
  2. 处理overfit问题,写出考虑Regularized后的cos function
  3. 看plotDecisionBoundary.m如何画高维图,没看懂!
  4. 调整lambda,体会处理overfit的过程

代码见github https://github.com/KDL-in/MachineLearningOnCoursera

Week 3 逻辑回归及处理过度拟合相关推荐

  1. Interview:算法岗位面试—10.24下午—上海某软件公司(机器学习,上市)电话面试—考察SVM、逻辑回归、降低过拟合、卷积网络基础等

    Interview:算法岗位面试-10.24下午-上海某软件公司(机器学习,上市)电话面试-考察SVM.逻辑回归.降低过拟合.卷积网络基础等 导读:当时电话来的非常快,我刚做完一家公司的笔试,接着来了 ...

  2. 过度拟合_过度拟合和尺寸缩减的过度拟合的最终指南

    过度拟合 Let us consider that we are designing a machine learning model. A model is said to be a good ma ...

  3. 逻辑回归(Logistic Regression)简介及C++实现

    逻辑回归(Logistic Regression):该模型用于分类而非回归,可以使用logistic sigmoid函数( 可参考:http://blog.csdn.net/fengbingchun/ ...

  4. 【sklearn学习】逻辑回归

    逻辑回归的优点: 使用于分类问题中的回归算法 逻辑回归对线性关系的拟合效果好 逻辑回归计算快 逻辑回归返回的分类结果不固定,而是以小数的形式呈现的类概率数字 逻辑回归有抗噪能力强的特点,在小数据集上表 ...

  5. sklearn中的逻辑回归

    复习一下sklearn中的这些用法 给定一堆数据,并设置一个随机种子,让大家都能复现: import numpy as np import matplotlib.pyplot as pltnp.ran ...

  6. 《菜菜的机器学习sklearn课堂》逻辑回归

    逻辑回归 概述:名为"回归"的分类器 为什么需要逻辑回归? sklearn中的逻辑回归 linear_model.LogisticRegression 二元逻辑回归的损失函数 损失 ...

  7. Python高级--逻辑回归、KNN回归比较

    一.逻辑回归函数 二.逻辑回归曲线 1)逻辑回归曲线 2)种群增长曲线 三.逻辑回归 1)逻辑回归虽然叫回归,但是我们一般用它来处理分类问题 将已知的值通过不断的二分,将数据分为不同的种类 2)优缺点 ...

  8. 【机器学习】逻辑回归(LogisticRegression)原理与实战

    文章目录 前言 一.什么是逻辑回归 1.1 逻辑回归基础概念 1.2 逻辑回归核心概念 二.逻辑回归Demo 2.1 数据准备 2.2 创建逻辑回归分类器 2.3 分类器预测 三.逻辑回归实战 3.1 ...

  9. sklearn专题五:逻辑回归

    目录 1 概述 1.1 名为"回归"的分类器 1.2 为什么需要逻辑回归 2 linear_model.LogisticRegression 2.1 二元逻辑回归的损失函数 2.1 ...

最新文章

  1. 使用Servlet完成单表的CRUD
  2. Stage4--Python面向对象
  3. 评价一个人,就是要看他把时间都花在哪了
  4. c++中非静态函数不能用类名调用,为什么CWnd的成员函数GetDC()可以直接调用啊?
  5. Java2Days 2012:Java EE
  6. 扒一扒TCP协议与UDP协议
  7. 泰安机器人比赛_泰安学子在省青少年机器人竞赛上揽8个一等奖
  8. linux安装qt4 creator,ubuntu14.04下安装qt4.8.6 +qt creator
  9. flask中的session对象方法
  10. 【CSP】第20届CCF CSP计算机软件能力认证划水贴
  11. java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】...
  12. 多台服务之间共享Session
  13. sql查询练习题的参考答案
  14. oracle叶子节点函数,oracle tree计算叶子节点到根节点的乘积
  15. c语言免杀程序源码,ghost源码免杀教程 步
  16. 拼多多砍价小程序源码-带搭建教程-可开流量主
  17. SQL sever 中yyyyMMddmmss字符串转日期
  18. Xshell“所选的用户密钥未在远程主机上注册”解决办法
  19. 如何在PPT文件中插入文件, 并且发给其他人文件不失效
  20. 知乎关注度人数最多的问题排行榜 TOP10

热门文章

  1. 关于APP唤醒的方法总结
  2. Android Butter Knife(黄油刀) 的使用
  3. 每逢佳节倍头秃,企业如何应对节日宣传大考?
  4. 王者荣耀微信版跟手机的服务器,王者荣耀:QQ区和微信区有什么区别?究竟哪个强?...
  5. 基于java的出租车预约系统
  6. 【微语】第六周(12.21~12.27)
  7. matlab仿真比赛,Matlab四连杆仿真个人心得最新!!!!
  8. 白领办公操小锻炼收获大健康
  9. 振动样品磁强计的技术指标
  10. maven依赖本地jar包