Week 3 逻辑回归及处理过度拟合
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(θ)=m1i=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(θ)=m1i=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)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1x1x2x12x1x2x12x13⋮x1x25x26⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
但问题在于,太多维度容易出现过度拟合,如下。
此问题我们稍后讨论。另一个问题是,维度增加,像上面到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);
多分类问题
其实是拆成多逻辑分类问题。
过度拟合的处理
方法有三种:
减少features数量
修改算法
θ看作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(θ)=m1i=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(θ)=m1i=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(θ)=(m1i=1∑m(hθ(x(i))−y(i))xj(i))+mλθj for j≥1
结果。
小结:机器学习本质
练习内容
熟悉了矩阵运算……实现变得非常直接。
Logistic Regression——线性分割线
- plot画图
- 完成sigmoid函数
- 基于sigmoid函数的costfunction和gradient
- fminunc,用于自动求解损失函数最小值,只需提供损失函数和数据,不必自己迭代,不必自己确定学习效率
- 读plotDecisionBoundary.m,注意画的是Decision Boundary而不是目标函数,划线,任意取两点,但是要保证在可显示范围内,于是,代码取了数据的最小x和最大x,两个点,加上系数θ
Regularized logistic regression——复杂分割线
- Feature mapping,扩充feature的维度,即增加函数的次数,使得可以画出更复杂的图形,不需要写代码,但是要理解好扩充的过程
- 处理overfit问题,写出考虑Regularized后的cos function
- 看plotDecisionBoundary.m如何画高维图,没看懂!
- 调整lambda,体会处理overfit的过程
代码见github https://github.com/KDL-in/MachineLearningOnCoursera
Week 3 逻辑回归及处理过度拟合相关推荐
- Interview:算法岗位面试—10.24下午—上海某软件公司(机器学习,上市)电话面试—考察SVM、逻辑回归、降低过拟合、卷积网络基础等
Interview:算法岗位面试-10.24下午-上海某软件公司(机器学习,上市)电话面试-考察SVM.逻辑回归.降低过拟合.卷积网络基础等 导读:当时电话来的非常快,我刚做完一家公司的笔试,接着来了 ...
- 过度拟合_过度拟合和尺寸缩减的过度拟合的最终指南
过度拟合 Let us consider that we are designing a machine learning model. A model is said to be a good ma ...
- 逻辑回归(Logistic Regression)简介及C++实现
逻辑回归(Logistic Regression):该模型用于分类而非回归,可以使用logistic sigmoid函数( 可参考:http://blog.csdn.net/fengbingchun/ ...
- 【sklearn学习】逻辑回归
逻辑回归的优点: 使用于分类问题中的回归算法 逻辑回归对线性关系的拟合效果好 逻辑回归计算快 逻辑回归返回的分类结果不固定,而是以小数的形式呈现的类概率数字 逻辑回归有抗噪能力强的特点,在小数据集上表 ...
- sklearn中的逻辑回归
复习一下sklearn中的这些用法 给定一堆数据,并设置一个随机种子,让大家都能复现: import numpy as np import matplotlib.pyplot as pltnp.ran ...
- 《菜菜的机器学习sklearn课堂》逻辑回归
逻辑回归 概述:名为"回归"的分类器 为什么需要逻辑回归? sklearn中的逻辑回归 linear_model.LogisticRegression 二元逻辑回归的损失函数 损失 ...
- Python高级--逻辑回归、KNN回归比较
一.逻辑回归函数 二.逻辑回归曲线 1)逻辑回归曲线 2)种群增长曲线 三.逻辑回归 1)逻辑回归虽然叫回归,但是我们一般用它来处理分类问题 将已知的值通过不断的二分,将数据分为不同的种类 2)优缺点 ...
- 【机器学习】逻辑回归(LogisticRegression)原理与实战
文章目录 前言 一.什么是逻辑回归 1.1 逻辑回归基础概念 1.2 逻辑回归核心概念 二.逻辑回归Demo 2.1 数据准备 2.2 创建逻辑回归分类器 2.3 分类器预测 三.逻辑回归实战 3.1 ...
- sklearn专题五:逻辑回归
目录 1 概述 1.1 名为"回归"的分类器 1.2 为什么需要逻辑回归 2 linear_model.LogisticRegression 2.1 二元逻辑回归的损失函数 2.1 ...
最新文章
- 使用Servlet完成单表的CRUD
- Stage4--Python面向对象
- 评价一个人,就是要看他把时间都花在哪了
- c++中非静态函数不能用类名调用,为什么CWnd的成员函数GetDC()可以直接调用啊?
- Java2Days 2012:Java EE
- 扒一扒TCP协议与UDP协议
- 泰安机器人比赛_泰安学子在省青少年机器人竞赛上揽8个一等奖
- linux安装qt4 creator,ubuntu14.04下安装qt4.8.6 +qt creator
- flask中的session对象方法
- 【CSP】第20届CCF CSP计算机软件能力认证划水贴
- java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】...
- 多台服务之间共享Session
- sql查询练习题的参考答案
- oracle叶子节点函数,oracle tree计算叶子节点到根节点的乘积
- c语言免杀程序源码,ghost源码免杀教程 步
- 拼多多砍价小程序源码-带搭建教程-可开流量主
- SQL sever 中yyyyMMddmmss字符串转日期
- Xshell“所选的用户密钥未在远程主机上注册”解决办法
- 如何在PPT文件中插入文件, 并且发给其他人文件不失效
- 知乎关注度人数最多的问题排行榜 TOP10