逻辑回归( Logistic Regression)

Classification

在分类问题中,你要预测的变量 y 是离散的值,我们将学习一种叫做逻辑回归 (Logistic
Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。

分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们
也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。

如果我们要用线性回归算法来解决一个分类问题,对于分类,y 取值为 0 或者 1,但如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于 0,即使所有训练样本的标签 y 都等于 0 或 1。尽管我们知道标签应该取值 0 或者 1,但是如果算法得到的值远大于 1 或者远小于 0 的话,就会感觉很奇怪。所以我们在接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。

Hypothesis Representation

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲& h_\theta (x) …

X 代表特征向量

g代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(Sigmoid function)

h θ (x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性
(estimated probablity)

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲& h_\theta(x) =…

例如,如果对于给定的 x,通过已经确定的参数计算得出 h θ (x)=0.7,则表示有 70%的几
率 y 为正向类,相应地 y 为负向类的几率为 1-0.7=0.3。

Decision Boundary

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲& h_\theta(x) \…

在逻辑回归中,我们预测:

当 h θ 大于等于 0.5 时,预测 y=1
当 h θ 小于 0.5 时,预测 y=0

根据上面绘制出的 S 形函数图像,我们知道当
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲z=0, e^{0}=1 \R…

z=0 时 g(z)=0.5
z>0 时 g(z)>0.5
z<0 时 g(z)<0.5
又 z=θ T X,即:
θ T X 大于等于 0 时,预测 y=1
θ T X 小于 0 时,预测 y=0
现在假设我们有一个模型:

Cost Function(代价函数)

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲& J(\theta) = \…

这样构建的Cost(h θ (x),y)函数的特点是:

当实际的 y=1 且 h θ 也为 1 时误差为 0,当 y=1但 h θ 不为 1 时误差随着 h θ 的变小而变大;当实际的 y=0 且 h θ 也为 0 时代价为 0,当 y=0但 h θ 不为 0 时误差随着 h θ 的变大而变大。

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲& \mathrm{Cost}…

Simplified Cost Function and Gradient Descent(简化的成本函数和梯度下降)

逻辑回归的代价函数:

C o s t ( h θ ( x ) , y ) = − y log ⁡ ( h θ ( x ) ) − ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) \mathrm{Cost}(h_\theta(x),y) = - y \; \log(h_\theta(x)) - (1 - y) \log(1 - h_\theta(x)) Cost(hθ​(x),y)=−ylog(hθ​(x))−(1−y)log(1−hθ​(x))

即,逻辑回归的代价函数:

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_\theta (x^{(i)})) + (1 - y^{(i)})\log (1 - h_\theta(x^{(i)}))] J(θ)=−m1​i=1∑m​[y(i)log(hθ​(x(i)))+(1−y(i))log(1−hθ​(x(i)))]

另外,我们假设的输出,实际上就是这个概率值:p(y=1|x;θ),就是关于 x 以 θ 为参数,
y=1 的概率,你可以认为我们的假设就是估计 y=1 的概率,所以,接下来就是弄清楚如何
最大限度地最小化代价函数 J(θ),作为一个关于 θ 的函数,这样我们才能为训练集拟合出参
数 θ。最小化代价函数的方法,是使用梯度下降法(gradient descent)。这是我们的代价函数:

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & h = g(X\thet…

如果我们要最小化这个关于 θ 的函数值,这就是我们通常用的梯度下降法的模板。

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲& Repeat \; \lb…

我们要反复更新每个参数,用这个式子来更新,就是用它自己减去学习率 α 乘以后面
的微分项。求导后得到:

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & Repeat \; \l…

我把它写在这里,将后面这个式子,在 i=1 到 m 上求和,其实就是预测误差乘以 ,
所以你把这个偏导数项 放回到原来式子这里,我们就可以将梯度下降算法写作如
下形式:

θ : = θ − α m X T ( g ( X θ ) − y ⃗ ) \theta := \theta - \frac{\alpha}{m} X^{T} (g(X \theta ) - \vec{y}) θ:=θ−mα​XT(g(Xθ)−y ​)

Advanced Optimization (高级优化)

一些高级优化算法和一些高级的优化概念,利用这些方法,我们就能够使通过梯度下降,进行逻辑回归的速度大大提高,而这也将使算法更加适合解决大型的机器学习问题,比如,我们有数目庞大的特征量。
现在我们换个角度来看什么是梯度下降,我们有个代价函数 J(θ),而我们想要使其最小化,那么我们需要做的是编写代码,当输入参数 θ 时,它们会计算出两样东西:J(θ) 以及 J等于 0、1 直到 n 时的偏导数项。

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & J(\theta) \n…

如果我们不知道最小值,但你想要代价函数找到这个最小值,是用比如梯度下降这些算法,但最好是用比它更高级的算法,你要做的就是运行一个像这样的 Octave 函数:

function [jVal, gradient] = costFunction(theta)jVal = [...code to compute J(theta)...];gradient = [...code to compute derivative of J(theta)...];
end

这样就计算出这个代价函数,函数返回的第二个值是梯度值,梯度值应该是一个 2×1的向量,梯度向量的两个元素对应这里的两个偏导数项,运行这个 costFunction 函数后,你就可以调用高级的优化函数,这个函数叫 fminunc,它表示 Octave 里无约束最小化函数。
调用它的方式如下:

options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
#####

Multiclass Classification: One-vs-all(多类别分类:一对 多)

个叫做"一对多" (one-vs-all) 的分类算法。

先看这样一些例子。
第一个例子:假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,
或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成
这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好
的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用 y=1、y=2、y=3、y=4
来代表。

第二个例子是有关药物诊断的,如果一个病人因为鼻塞来到你的诊所,他可能并没有生
病,用 y=1 这个类别来代表;或者患了感冒,用 y=2 来代表;或者得了流感用 y=3 来代表。

第三个例子:如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天
是晴天、多云、雨天、或者下雪天,对上述所有的例子,y 可以取一个很小的数值,一个相
对"谨慎"的数值,比如 1 到 3、1 到 4 或者其它数值,以上说的都是多类分类问题,顺便一
提的是,对于下标是 0 1 2 3,还是 1 2 3 4 都不重要,我更喜欢将分类从 1 开始标而不是
0,其实怎样标注都不会影响最后的结果。

我用三种不同的符号来代表三个类别,问题就是给出三个类型的数据集,我们如何得到一个学习算法来进行分类呢?
我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
下面将介绍如何进行一对多的分类工作,有时这个方法也被称为"一对余"方法

现在我们有一个训练集,好比上图表示的有三个类别,我们用三角形表示 y=1,方框表示 y=2,叉叉表示 y=3。我们下面要做的就是使用一个训练集,将其分成三个二元分类问题。我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的"伪"训练集,类型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。

最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,
都选择最高可能性的输出变量。
总之,我们已经把要做的做完了,现在要做的就是训练这个逻辑回归分类器: ,其中 i 对应每一个可能的 y=i,最后,为了做出预测,我们给出输入一个新的 x 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 x,然后我们选择一个让 最大的 i 。

你现在知道了基本的挑选分类器的方法,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论 i 值是多少,我们都有最高的概率值,我们预测 y就是那个值。这就是多类别分类问题,以及一对多的方法,通过这个小方法,你现在也可以将逻辑回归分类器用在多类分类的问题上

ml-3-1-逻辑回归( Logistic Regression)相关推荐

  1. OpenCV3.3中逻辑回归(Logistic Regression)使用举例

    OpenCV3.3中给出了逻辑回归(logistic regression)的实现,即cv::ml::LogisticRegression类,类的声明在include/opencv2/ml.hpp文件 ...

  2. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”

    Coursera公开课笔记: 斯坦福大学机器学习第六课"逻辑回归(Logistic Regression)" 斯坦福大学机器学习第六课"逻辑回归"学习笔记,本次 ...

  3. OpenCV逻辑回归Logistic Regression的实例(附完整代码)

    OpenCV逻辑回归Logistic Regression的实例 OpenCV逻辑回归Logistic Regression的实例 OpenCV逻辑回归Logistic Regression的实例 # ...

  4. 斯坦福大学机器学习第四课“逻辑回归(Logistic Regression)”

    斯坦福大学机器学习第四课"逻辑回归(Logistic Regression)" 本次课程主要包括7部分: 1) Classification(分类) 2) Hypothesis R ...

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

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

  6. 逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为因变量,将用户的

    逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是分类和预测算法中的一种.通过历史数据的表现对未来结果发生的概率进行预测.例如,我们可以将购买的概率设置为因变量,将用户的 ...

  7. 逻辑回归(logistic regression)的本质——极大似然估计

    文章目录 1 前言 2 什么是逻辑回归 3 逻辑回归的代价函数 4 利用梯度下降法求参数 5 结束语 6 参考文献 1 前言 逻辑回归是分类当中极为常用的手段,因此,掌握其内在原理是非常必要的.我会争 ...

  8. CS229学习笔记(3)逻辑回归(Logistic Regression)

    1.分类问题 你要预测的变量yyy是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法. 从二元的分类问题开始讨论. 我们 ...

  9. 机器学习笔记04:逻辑回归(Logistic regression)、分类(Classification)

    之前我们已经大概学习了用线性回归(Linear Regression)来解决一些预测问题,详见: 1.<机器学习笔记01:线性回归(Linear Regression)和梯度下降(Gradien ...

  10. 线性回归 Linear Regression 与逻辑回归 Logistic Regression

    1 线性回归 Linear Regression 理论 线性回归模型研究多个变量x与y之间的关系,通过回归模型预测位置样本的数据. 假设函数 损失函数 损失函数寻优,最小二乘法 即: 注:最小二乘法需 ...

最新文章

  1. 拼图游戏 复制粘贴一个叫lemene的人的,这个人是c++博客的用户,我不是,怕以后找不到这篇文章,所以复制粘贴了。文中最后给出了原文链接连接...
  2. ubuntu 16.04下源码安装opencv3.4
  3. 【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)
  4. java 如何知道对象是否被修改过_Java 并发编程:AQS 的原子性如何保证
  5. jq父级绑定事件的意义_用jQuery.delegate()将事件绑定在父元素上面
  6. 2 字符串求交集_PostGIS教程十八:维数扩展的9交集模型
  7. 当面试官问我————Java是值传递还是引用传递?
  8. PML之百分位数、数据分布、正态数据分布
  9. 干货收藏!史上最强 Tomcat 8 性能优化来啦!| 原力计划
  10. Java爬坑 -- 解决redis序列化java8 LocalDateTime错误的问题
  11. 基于python的随机森林回归实现_python实现随机森林
  12. 360无线wifi路由器连接到服务器,luyou.360.cn如何登录360路由器
  13. 明星危机公关应该怎么做?
  14. Android自定义星星评分控件
  15. python之父:一个合格的python程序员,应该从这三本书入手!
  16. DTS、杜比2.0、杜比5.1、AC3各是什么意思
  17. php 模块说明,各个模块详情展示页面说明使用
  18. 这一季绿色智能制造“英雄联盟”已集结, 有哪些新鲜点?
  19. 【JavaScript】获取指定字符串
  20. BC v1.2充电规范

热门文章

  1. 林期苏曼属性标签编辑_SEO丨SEO是怎样通过标签优化作用于排名的?
  2. 【前端js】实现剑指offer|leetcode(二)——数组题目集合
  3. PHP保留两位小数的几种方法
  4. 异化之地未能成功连接服务器,异化之地特殊房间出不去怎么办
  5. 爬取大众点评22页餐馆名称
  6. 新的代数计算软件包——Magma
  7. 门槛(threshold)估计方法学习代码
  8. chmod 命令参数
  9. uniapp picker 国际化 中英文
  10. 王者荣耀转区仅显示可转移服务器,王者荣耀2020年怎么转区 王者荣耀2020年角色迁移方法...