机器学习 (三) 逻辑回归 Logistic Regression
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准。感谢博主Rachel Zhang 的个人笔记,为我做个人学习笔记提供了很好的参考和榜样。
§ 3. 逻辑回归 Logistic Regression
1 分类Classification
首先引入了分类问题的概念——在分类(Classification)问题中,所需要预测的$y$是离散值。例如判断一封邮件是否属于垃圾邮件、判断一个在线交易是否属于诈骗、一个肿瘤属于良性肿瘤还是恶性肿瘤等,都属于分类问题。

对于有两种类别的分类(例如上述三个例子),可以分别将两种类别标记为正类(Positive Class)和负类(Negative Class)。在实际应用中,把一个类别标记为正类或负类是任意的,但一般来说会用正类代表拥有某样东西,用负类代表缺少某样东西。
分类问题可以分为多类分类(Multiclass Classification)问题和二元分类(Binary Classification)问题。
Andrew Ng以肿瘤分类问题为例,讲解了在分类问题中线性回归方法的有效性较低的原因。

如图,当前的数据集中,如果应用线性回归方法并以$h_{\theta}(x)=0.5$为阈值将肿瘤分类,即以$h_{\theta}(x)=0.5$在横轴上的投影点为基准进行划分,左边的预测为良性肿瘤,右边的预测为恶性肿瘤,那么预测的效果还是很不错的。

但在加入了最右的数据点之后,表示$h_{\theta}(x)$的直线从紫色线变成了蓝色线,预测准确性在$h_{\theta}(x)=0.5$处可以看出有了比较明显的降低。
如果线性回归算法应用在分类问题中,那么在y={0,1}的情况下,也有可能会出现$h_{\theta}(x)<0$或者$h_{\theta}(x)>1$的情况,而且$h_{\theta}(x)$可能会远小于0或者远大于1。因此,分类问题并不适合拿线性回归的方法来解决。
2 逻辑回归Logistic Regression
下面引入能够满足$0<=h_{\theta}(x)$的逻辑回归算法来解决上述问题。逻辑回归算法虽然名字上有个“回归”,但事实上是个分类算法。

首先引入了逻辑函数(Logistic Function),也称S型函数(Sigmoid Function)——如图中的$g(z)$所示。逻辑函数的性质是:在正无穷处无限趋近于1,在负无穷处无限趋近于0,在z=0处值为0.5。

Andrew Ng解释了$P(y=1|x;\theta)$所代表的含义,然后给出了$P(y=1|x;\theta)$与$P(y=0|x;\theta)$的重要特点——相加等于1。
然后给出了以下例题,考察了上述知识点。

3 决策边界Decision Boundary
决策边界(Decision Boundary) 将整个平面分为y=1和y=0的两个预测区域,对于$\theta^{T}x>=0$的部分,有$h_{\theta}(x)$>0.5,因此预测为y=1;对于$\theta^{T}x<0$的部分则反之,预测为y=0。
决策边界不是训练集的属性,而是假设本身及其参数的属性。一旦给定了$\theta$,那么其决策边界就已经确定了。我们不是用训练集来定义决策边界,而是用训练集来拟合参数$\theta$。

如果在平面上把训练集和决策边界都表现出来,那么应该是类似下图这样的效果。

又例如下题中,$5-x_{1}=\theta^{T}x$,当$5-x_{1}=\theta^{T}x>=0$时有$x_{1}<5$,因此图像如图所示。而$x_{1}=5$即为该预测函数的决策边界。

非线性决策边界(Non-Linear decision boundaries),拥有复杂的多项式特征变量,得到复杂的决策边界,而不是简单的用直线分开正负样本。
例如如下的情况:

4 代价函数Cost Function
逻辑回归模型中的代价函数如下所示:

对于y=1:如果预测正确,那么代价为0;如果预测错误,那么代价将随着预测值趋于0而趋于无穷。即当预测错误时我们会以非常大的代价来惩罚学习算法。

对于y=0:也是类似的,$Cost=0$ if $y=1$,$h_{\theta}(x)=1$
But as $h_{\theta}(x)\rightarrow 1$ $Cost\rightarrow \infty$
Captures intuition that if $h_{\theta}(x)= 1$(predict $P(y=0|x;\theta)=0$),but y=0,we will penalize learning algorithm by a very large cost.

5 简化代价函数与梯度下降算法Simplified cost function and gradient descent
因为y只有两个取值:0,1
所以可以简化代价函数为:

接下来,我们的目标就是最小化参数$\theta$了。

之前提到过梯度下降算法,这里也是类似的用法:

代入上述蓝色式子可得

这个算法看起来似乎与应用于线性回归的梯度下降算法是一样的,但是事实上,这个式子中$h_{\theta}(x)$的假设并不同于应用于线性回归的梯度下降算法中的$h_{\theta}(x)$。
特征缩放也适用于逻辑回归算法中使得收敛速度更快。
6 高级优化算法Advanced Optimization
除了梯度下降算法之外,还可以考虑以下三种算法。这三种算法的有点是不用手动选择$\alpha$、速度快,但也相应来说更复杂。
在算法实现的过程中,建议尽量调用matlab或者octave中已有的库。

例如:

一般来说,我们可以使用octave中的fminunc来实现这一算法,但是在fminunc中,$\theta$的维数应该大于1.
下面来看具体的实现:
function [jVal,gradient] = costFunction(theta)
% jVal is how we will compute the cost function J
% a vector,the elements of the gradient vector correspond to partial derivative terms jVal = (theta()-)^+(theta()-)^; gradient = zeros(,);
gradient() = *(theta()-);
gradient() = *(theta()-);
上述代码可以保存为costFunction.m然后在matlab里面调用
options = optimset('GradObj','on','MaxIter',);
%'GradObj','on' ->sets the gradientobjective parameter to on
% so you will provide a gradient to this algorithm
%'MaxIter', -> sets maximum number of iterations to
% so you will give it an initial guess for theta
initialTheta = zeros(,);
[optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options)
%fminunc is the advanced optimization
与Andrew Ng原slide所不同的地方是,原文的迭代次数设置为了'100',但其实'100'代表的是一个字符串,因此应该直接设置为100。
可得结果:
initialTheta =
0
0
Local minimum found. Optimization completed because the size of the gradient is less than
the default value of the function tolerance. <stopping criteria details> optTheta = functionVal = exitFlag =
7 多类分类问题 Multiclass Classification
多类分类问题 Multiclass Classification是指有两个以上分类的分类问题。
在多类分类问题里,其实是产生了多个分类器的。

这样one-vs-all的方法中,实际上由每个分类i的所有可能结果y=i来训练逻辑回归分类器。

然后选择一个让h最大的i,不论i为多少我们都有最高的概率值。

笔记目录
(一)单变量线性回归 Linear Regression with One Variable
(二)多变量线性回归 Linear Regression with Multiple Variables
(四)正则化与过拟合问题 Regularization/The Problem of Overfitting
(五)神经网络的表示 Neural Networks:Representation
(六)神经网络的学习 Neural Networks:Learning
(七)机器学习应用建议 Advice for Applying Machine Learning
(八)机器学习系统设计Machine Learning System Design
(九)支持向量机Support Vector Machines
(十)无监督学习Unsupervised Learning
(十一)降维 Dimensionality Reduction
(十二)异常检测Anomaly Detection
(十三)推荐系统Recommender Systems
(十四)大规模机器学习Large Scale Machine Learning
机器学习 (三) 逻辑回归 Logistic Regression的更多相关文章
- 机器学习总结之逻辑回归Logistic Regression
机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问 ...
- 机器学习入门11 - 逻辑回归 (Logistic Regression)
原文链接:https://developers.google.com/machine-learning/crash-course/logistic-regression/ 逻辑回归会生成一个介于 0 ...
- 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) 线性回归用来预测,逻辑回归用来分类. 线性回归是拟合函数,逻辑回归是预测函数 逻辑回归就是分类. 分类问题用线性方程是不行的 线性方程拟合的是连 ...
- 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...
- 逻辑回归(Logistic Regression)详解,公式推导及代码实现
逻辑回归(Logistic Regression) 什么是逻辑回归: 逻辑回归(Logistic Regression)是一种基于概率的模式识别算法,虽然名字中带"回归",但实际上 ...
- ML 逻辑回归 Logistic Regression
逻辑回归 Logistic Regression 1 分类 Classification 首先我们来看看使用线性回归来解决分类会出现的问题.下图中,我们加入了一个训练集,产生的新的假设函数使得我们进行 ...
- 【机器学习】Octave 实现逻辑回归 Logistic Regression
ex2data1.txt ex2data2.txt 本次算法的背景是,假如你是一个大学的管理者,你需要根据学生之前的成绩(两门科目)来预测该学生是否能进入该大学. 根据题意,我们不难分辨出这是一种二分 ...
- [笔记]机器学习(Machine Learning) - 02.逻辑回归(Logistic Regression)
逻辑回归算法是分类算法,虽然这个算法的名字中出现了"回归",但逻辑回归算法实际上是一种分类算法,我们将它作为分类算法使用.. 分类问题:对于每个样本,判断它属于N个类中的那个类或哪 ...
随机推荐
- lucene&solr学习——solr学习(一)
1.什么是solr solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文检索服务器.Solr提供了比lucene风味丰富的查询语言,同时实现了可配置,可扩展,并对索 ...
- TDD: 解除依赖
1 A类依赖B 类,可以把B类提取成IB接口,解除AB 之间的依赖关系. 通过创建实现了IB接口的BStub 装代码,可以模拟B类进行测试. 这是针对接口编程的典型.适合构造代价大,变化多的情况.应 ...
- 搭建基本的React Native开发环境
步骤如下: 1.安装HomeBrew,命令如下: 在终端输入命令:$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Home ...
- 取消Eclipse的自动代码格式化
前段时间在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了 ...
- js替换字符串中的空格,换行符\r\n或\n替换成<br>
为了让回车换行符正确显示,需要将 \n 或 \r\n 替换成 <br>.同样地,将空格替换存 .这里我们通过正则表达式来替换. 一.替换所有的空格.回车换行符 //原始字符串 var s ...
- 【PTA 天梯赛训练】电话聊天狂人(简单map)
输入格式: 输入首先给出正整数N(≤10^5),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔. 输出格式: 在一行中给出 ...
- 根据坐标计算距离(mysql函数)
CREATE DEFINER=`root`@`localhost` FUNCTION `getDistance`(lng1 ) BEGIN DECLARE result double; DECLARE ...
- Linux系统定时任务crond那些事
1 Linux系统定时任务 1.1 定时任务介绍 1.1.1 Crond是什么? Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件.Centos5/ linux系统安装完操作 ...
- pyqt 多窗口跳转
今天在做pyqt5的多页面跳转时遇到问题,一点击button按钮,程序会崩溃.在网上查了下,应该是当窗口A调用窗口B的时候,两个窗口不能是同一类型.我写的时候把A.B同时写成了QWidget.把窗口B ...
- 总结laravel假数据填充步骤
定义好模型 xxx.php 定义好数据生成的规则 database/factories/XxxlFactory.php 写入生成数据的代码,控制好生成的数据数目,对生成后的数据做出修改 databas ...