解释

Logistic回归用于寻找最优化算法。

  • 最优化算法可以解决最XX问题,比如如何在最短时间内从A点到达B点?如何投入最少工作量却获得最大的效益?如何设计发动机使得油耗最少而功率最大?
    我们可以看到最XX问题,有寻找最小(最短时间)和最大等。

    • 解决最小类问题会使用梯度下降法。可以想象为在一个山坡上寻找最陡的下坡路径。
    • 同理,解决最大类问题会使用梯度上升法。可以想象为在一个山坡上寻找最陡的上坡路径。
  • 寻找最优化算法,可以通过试图找到一个阶跃函数(step function),由于阶跃函数只返回0或者1.因此这个阶跃函数可以作为分类器。

  • 一个方案是利用Sigmoid函数做出一个阶跃函数。
    \(\sigma(z) = \frac{1}{1 + e^{-z}}\)
    在人工神经网络中,Sigmoid函数是一种常见的激励函数(activation function)。
    通过Sigmoid函数的曲线可以看出,其返回值在0到1之间,大部分值都贴近0或者1.只有z在0附近时,形成一个上升曲线,z=0是,返回值是0.5.
    因此当Sigmoid函数返回值大于0.5,这个阶跃函数返回1,否则返回0.

  • 这时,问题变成如何算z。
    \(z = w_0x_0 + w_1x_1 + ... + w_nx_n\)
    如果采用向量的写法,上述公式可以写成
    $ z = w^Tx$
    它表示将这两个数值向量的对应元素相乘然后全部加起来即得到z值。其中的向量x是分类器的输入数据,向量w也就是我们要找到的最佳参数(系数),从而使得分类尽可能地精确.
    这是一个线性函数。(为什么一定是线性函数?线性方程可以想象为一条直线(2维情况下),或者一个平面(3维情况下),第一:线性函数是递增或者递减的,复合sigmoid函数的要求,第二:比较好解。)
    或者说这是一个多元一次方程,我们要根据训练数据算出最佳的\(w_0, ... w_n\).

    • 技巧1: 加入不变量。
      比如在一元一次方程中\(z=w_0x_0\),由于没有常数项,就限制求出最佳解。因此可以变成\(z=w_0x_0 + w_1x_1\),其中\(x_0 = 1\)。这就是为什么书中的代码中加入1.0列的原因。
  • 如果求解w? 如果是求最大类问题,我们使用梯度上升算法的迭代公式。
    \(w:= w + \alpha \nabla_wf(w)\)
    其中,\(\alpha\)为步长。步长太大会导致震荡,找到的w不精确。步长太小会影响运算效率。步长可以在迭代的过程中改变。

    • 技巧2: 步长是一个重要的计算参数。正确的计算一个步长很关键。书中使用了动态步长,在计算中步长逐渐缩短。
      从微积分的角度来说,这个公式就是在现在的w上加上激励函数的导数乘以步长。
  • 梯度上升法
    所以梯度上升算法的迭代公式为:
    \(w:= w + \alpha \nabla_wf(w)\)
    书中的计算: weights = weights + alpha * (label - sigmoid(sum(dataMatrix[index] * weights)) * dataMatrix[index]
    书中实际的计算公式为:
    $w:= w + \alpha (c - f(x)) x $
    其中:
    \(w\)是向量。
    \(\alpha\)是步长。
    \(c\)是期望值, x的实际分类,值为0或1。
    \(f(x)\)是sigmoid函数。可以是算总和,或者是向量。
    \((c - f(x))\)有两个作用:一个是提供偏移方向,是增加还是减少。另外一个作用是偏移量的一个因子。如果f(x)是一个阶跃函数,则值为-1,0,1,这种情况下只有第一个作用。对于sigmoid函数,其值的范围[-1, 1]。
    \(x\)是向量。书中似乎认为x越大,偏移量应该越大。
    这个似乎有问题。一个问题是如果所有的x都很大,而且集中在一个区域里,则偏移量似乎过大。
    第二,下面的例子:
    测试数据1:
    [
    [[0, 1], [0]],
    [[0, 2], [0]],
    [[0, 4], [1]],
    [[0, 5], [1]]]
    测试数据2:
    [
    [[10000, 1], [0]],
    [[10000, 2], [0]],
    [[10000, 4], [1]],
    [[10000, 5], [1]]]
    这两个测试数据测分割线都是: \(0 = -3 + x_2\),和x无关。
    这个情况下,书中的计算公式明显不正确。
    这也说明这个迭代公式需要根据实际情况调整。

    • 技巧3: 需要大量的迭代才能算出最优的w。书中对测试数据进行了150迭代。

其它说明

  • 梯度上升算法的迭代公式
    梯度上升算法用来求函数的最大值。
    \(w:= w + \alpha \nabla_wf(w)\)
    其中,\(\alpha\)为步长。步长太大会导致震荡,找到的w不精确。步长太小会影响运算效率。书中的步长是数据size的1/10。步长可以在迭代的过程中改变。

  • 梯度下降算法的迭代公式
    梯度下降算法用来求函数的最小值。
    \(w:= w - \alpha \nabla_wf(w)\)

  • Sigmoid函数的导数
    \(f'(x) = f(x) [1-f(x)]\)

  • 梯度上升法,计算梯度
    如果梯度记为\(\nabla\),则函数f(x,y)的梯度由下式表示:
    \(\nabla f(x, y) = \binom{\frac{\nabla f(x, y)}{\nabla x}} {{\frac{\nabla f(x, y)}{\nabla y}}}\)
    这个梯度意味着要沿x的方向移动 \(\frac{\nabla f(x, y)}{\nabla x}\),要沿y的方向移动 \(\frac{\nabla f(x, y)}{\nabla y}\)。

参考

机器学习实战 - 读书笔记(05) - Logistic回归的更多相关文章

  1. 机器学习实战读书笔记(五)Logistic回归

    Logistic回归的一般过程 1.收集数据:采用任意方法收集 2.准备数据:由于需要进行距离计算,因此要求数据类型为数值型.另外,结构化数据格式则最佳 3.分析数据:采用任意方法对数据进行分析 4. ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  3. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  4. 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...

  5. 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...

  6. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  7. <机器学习实战>读书笔记--logistic回归

    1. 利用logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类. 2.sigmoid函数的分类 Sigmoid函数公式定义 3.梯度上升法    基本思想:要找 ...

  8. 机器学习实战 - 读书笔记(06) – SVM支持向量机

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...

  9. 【转载】 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    原文地址: https://www.cnblogs.com/steven-yang/p/5686473.html ------------------------------------------- ...

随机推荐

  1. IIS 日志文件分析

    先安装下文参考资料中的log parser studio 然后就可以针对日志文件进行sql语句的查询了. 各页面访问量排行 ) FROM '[LOGFILEPATH]' where cs-uri-st ...

  2. [ITSEC]信息安全·Web安全培训第一期客户端安全之UBB系列

    缩略图: 引文: 所谓UBB代码,是指论坛中的替代HTML代码的安全代码.ubb发帖编辑器 这种代码使用正则表达式来进行匹配,不同的论坛所使用的UBB代码很可能不同,不能一概而论.UBB代码的出现,使 ...

  3. 我也要学iOS逆向工程--全局变量

    大家好!很久不见了.我之前去音乐学院进修爵士吉他去了.现在回来了.之前我一直在学windows开发和逆向.后来到了音乐学院,老师推荐了1个录音软件叫logic prox.可惜啊!当时我只有个索尼的笔记 ...

  4. React Native 重新建项目遇到的一些问题

    1.基本上一句话,就是本地的node太旧了,跟不上React_Native的节奏,所以需要更新node,但是单纯的更新node丫丫竟然不让我跟,因为是用Homebrew来管理的,所以先update了下 ...

  5. PlayFramework 1.2.x 在Controller 中识别JSON提交

    链接 http://stackoverflow.com/questions/6132892/consuming-json-in-play-framework-controller @Global pu ...

  6. SQL设置SQLServer最大连接数查询语句

    设置最大连接数 下面的T-SQL 语句可以配置SQL Server 允许的并发用户连接的最大数目. exec sp_configure 'show advanced options', 1exec s ...

  7. LocalBroadcastManager 使用小解

    最近在开发平板项目,完全是fragmentactivity+fragment的结构.看起来似乎简单,但是和以前不同的是,业务逻辑非常复杂,多处的非常规跳转,fragment之间的数据交换,一处更新多处 ...

  8. PowerPoint 打开文档发现.pptx中胡内容有问题

    一.问题的提出 有一个文件,在window 7操作系统中通过邮箱地址保存到本地,结果打开的时候出现[PowerPoint 打开文档发现 文件.pptx中胡内容有问题] 然后提示[如果您信任此演示文稿的 ...

  9. Python Django 开发 2 数据库

    一半教程用的Django都是1.8以前的版本,导致跟我用的1.8.2的版本用法有些出入,所以只能自己去官网看文档,以下一下是看官方文档而理解的,英语渣渣,可能会有理解有误的地方 先记录下如何查看dja ...

  10. 转:C#中String类的几个方法(IndexOf、LastIndexOf、Substring)

    String.IndexOf String.IndexOf 方法 (Char, Int32, Int32)报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. ...