认识

是一个经典的二元(y=0 或 y=1) 分类算法, 不是回归

输入特征还是线性回归, 输出是 [0,1] 的一个概率值, 其判别函数的形式为:

\(P(y=1|x) = \frac {1}{1+e^{-\theta ^Tx}}\)

至于为什么是这样的形式, 上篇的logist 函数推导已经说明了,不在赘述啦

  • \(x = [x_1, x_2, x_3...x_n]\)

  • \(\theta = [\theta_0, \theta_1, \theta_2...]\)
  • \(\theta ^T x = \theta _0 + \theta _1x_1 + \theta_2x_2 + \theta_3x_3...\)

里面的一大坨就是妥妥的线性模型呀.

判别: 当 \(P(y=1|x)\) 的值 大于0.5, 输出 1; 否则输出 0;

分类 vs 回归

对目标函数做一个推演:

\(P(y=1|x) = P= \frac {1}{1+e^{-\theta^T x}}\) 则:

\(P(y=0|x) = 1-P = 1 - \frac {1}{1+e^{-\theta^T x}} = \frac {1+e^{-\theta^T x}-1}{1+e^{-\theta^T x}} = \frac {1}{1+e^{\theta^Tx}}\) (注意, 负号没了,别化简错哦)

则两个类别概率的比值:

\(\frac {P(y=1)}{P(y=0)} = \frac {P}{1-P} = \frac { \frac {1}{1+e^{-\theta^T x}}}{ \frac {1}{1+e^{\theta^Tx}}}\)

\(=\frac {1+e^{\theta^Tx}} {1+e^{-\theta^Tx}}\)

\(=\frac {1+e^{\theta^T x}}{\frac {e^{\theta^Tx + 1}}{e^{\theta ^T}}}\)

\(=e^{\theta^T x}\)

log(两个类别概率的比值):

\(ln(\frac {P}{1-P}) = \theta ^Tx\)

这不就是最熟悉的 线性模型了嘛, 也可以这样说:

逻辑回归, 可看作对线性模型做了一个车 "逻辑" 变换, 输出是将值映射到 [0,1], 以0.5为界, 达到分类效果

也就说, 可以用线性的方式来, 研究 logist 这样 非线性的 问题.

模型应用case

年龄(x1) 收入(x2) 是否买车(1,0)
20 3 0
23 7 1
31 10 1
42 13 1
50 7 0
60 5 0

模型定义为:

\(P(y=1|x, \theta) = \frac {1}{1+e^{\theta'x}}\)

求解出: \(\theta_0 = -0.04, \ \theta_1 = -0.2, \theta_2 = 0.92\)

即模型: \(P(y=1|x, \theta) = \frac {1}{1+e^{-0.04 -0.2 x_1 + 0.92x_2}}\)

  • 预测 : 现在来了一个 22岁, 收入是 8的人, 买车的概率为: 0.23 < 0.5 即输出 0 不买 (瞎算的哈)
  • 参数1: 年龄 -0.2 表示, 如果年龄增加 1岁, 买车和不买车的概率比值 与之前 降低 \(e^{-0.2} =0.82\) 倍
  • 参数2: 收入 0.92 表示, 如果收入 增加1(万), 买与不买的概率比值 比之前 增加 \(e^{0.92} =2.58\)倍

统一形式

从上知逻辑回归是二元(0, 1) 分类嘛, 因此:

\(P(y=1|\theta, x) = \frac {1}{1+e^{-\theta'x}}\)

\(P(y=0|\theta, x) = 1- \frac {1}{1+e^{-\theta'x}} =\frac {1+e^{\theta^Tx}} {1+e^{-\theta^Tx}}\)

将上面两个式子结合起来可写为:

\(P(y|\theta, x) = [P(y=1|\theta, x)]^y + [1-P(y=y|\theta, x)]^{1-y}​\)

\(\theta ^T, \ \theta'\) 都表示转置, 不是求导哈, 这样写一来是可以, 二是为了写latex 方便,编辑公式太难了.

y = 1 或 y= 0

目标函数(Loss)

既然是概率问题, 而优化的参数是 theta, 当然采用 极大似然

即将每一个样本点都考虑进来, 概率之积最大的情况下, 对参数 做优化.

\(max \ L(\theta, x) = \prod \limits _{i=i}^n P(y_i |\theta, x_i)\), 标准化后, 等价于:

\(min \ L(\theta, x) =- \prod \limits _{i=i}^n P(y_i |\theta, x_i)\) 将之前的合并形式展开得:

\(L(\theta, x) = - \prod \limits _{i=1} ^n [P(y_i=1|\theta, x_i)]^y [1-P(y_i=1| \theta, x_i)]^{1-y_i}\)

对其取 log, 乘法变加法, 利于推导和能让计算机运算, 毕竟存储 小数是有 "精度的嘛".

\(log[L(\theta, x)] = -\sum \limits_{i=1}^n y \ logP(y_i=1|\theta, x_i) + (1-y_i)log(1-P(y_i=1|\theta, x_i))\)

  • y = 0 或 1, 因此将 y 从"次方" 拿下来是合理的
  • 目的是最优, 做log变换也是也是成立的

将其写得简洁一波.

令 \(\phi(x) = \frac {1}{1+e^{-x}} \ 即本例的 P(y=1 | x, \theta) = \frac{1}{1+e^{- \theta ^Tx}} 可写为 \phi(\theta'x)\)

则最终loss 可简写为:

\(L(\theta, x) = -\sum \limits _{i=1}^n [y_i log \phi(\theta'x_i)] +[(1-y_i)log(1- \phi(\theta'x_i))]\)

对 theta 求一阶偏导数(求解)

\(\sum\) 表示i..n 求和, 体谅一波 latex 有些难编写

\(\phi(x)' = \phi(x) (1-\phi(x))\) 分数求导即可轻易证明

注意求导的链式法则哦

\(\nabla_{\theta} = (-\sum y_i \frac {\phi(\theta'x_i)(1-\phi(\theta'x_i)) x_i}{\phi(\theta'x_i)} + (1-y_i) \frac {-\phi(\theta'x_i)(1-\phi(\theta'x_i))x_i}{1- \phi(\theta' x_i)})\)

\(=-\sum (x_i[y_i-\phi(\theta' x_i) - (1-y_i)(\phi(\theta'x))])\)

\(=-\sum (x_i[y_i- y_i \phi(\theta' x_i) - \phi(\theta'x_i) + y_i \phi(\theta'x_i)])\)

\(=\sum \phi(\theta'x_i - y_i)x_i\)

其中: \(\phi(x) = \frac {1}{1+e^{-x}} \ 而 \phi(x)' = \phi(x) (1-\phi(x))\)

如需求解参数 theta, 将 \(\phi(x)\) 反代回去即可

即: \(\sum \limits _{i=1}^n \frac {x_i}{1+e^{(y_i - \theta'x_i)}} = 0\)

...

就这样吧, 不想整了, 此处的目的主要在于能求解出 theta 的 一阶偏导数的形式.

证明 loss 函数是凸函数

  • 定义证明: \(f(ax + (1-a)y) \le af(x) + (1-a)f(y)\)
  • 一阶展开: \(f(x + a) > f(x) + af(x)' + e_i\)

  • 求二阶导: 海塞矩阵 Hessian Matrix半正定即可.

Hessian: 对多元函数求二阶偏导数构成的矩阵啦.

栗子: 二元函数 f(x, y) 的Hessian: [[二阶偏x, 偏x偏y], [偏y偏x, 偏y]], 组成2x2的矩阵

半正定: \(\forall _x \ 满足x^TAx \ge 0\) , 则A是半正定

简单证明

$
由上L(\theta, x) = \frac {-1}{n} \sum ylog\phi(\theta^tx) + (1-y)log(1-\phi(\theta^tx)) \
其中 \phi(x) = \frac{1}{1+e^{-x}},  \phi(x)^{'} = \phi(x)(1-\phi(x)) \
里面是一个复合函数, 只需证明 log(\phi(theta^x))的二阶导数"\ge0" \
对于 F(x) = log\phi(\theta^tx) \
F(\theta)^{'} = \frac{\phi(\theta^tx)(1-\phi(\theta^tx))}{\phi(\theta^tx)} = 1-\phi(\theta^tx) >= 0 \
F(\theta)^{''} = (\frac{1}{1+e^{-\theta^tx}})' = \frac{e^{-\theta^tx}}{(1+e^{-\theta^tx)^2}} >= 0 \
因此目标函数是凸函数.
$

严格证明

已知损失函数为:

\(L(\theta, x) = -\sum \limits _{i=1}^n [y_i log \phi(\theta'x_i)] +[(1-y_i)log(1- \phi(\theta'x_i))]\)

\(\phi(x) = \frac {1}{1+e^{-x}}\), 易推得 \(\phi(x)' = \phi (x) (1-\phi(x))\)

y = 1或0

其实,只需考虑 \(f(\theta, x) = -log \phi(\theta'x)\) , 第二项 其实跟第一项是一样的(log 的性质, 展开, 不信自己推).

先对 theta 求一阶导:

\(\nabla _\theta = -\frac {\phi(\theta' x)(1-\phi(\theta'x))}{\phi(\theta'x)}x = [\phi(\theta' x) -1]x\)

再对 theta 求二阶导:

\(\nabla^2_\theta = \nabla _\theta([\phi(\theta'x) -1]x)\)

跟 x 没有关系,看作常数, 只跟 theta 相关

注意求导的链式法则哦

x 是向量

\(=\phi(\theta'x)(1-\theta'x)xx\)

\(=\phi(\theta'x)(1-\theta'x)xx^T\)

用半正定判别式: \(z^T Az 的符号\)

\(\forall_z \ z^T \phi(\theta'x)(1-\phi(\theta'x))xx^T z\)

其中,

\(\phi(\theta'x)(1-\phi(\theta'x))\) 是实数, 可以移动位置

x, z 都是列向量

即调换下位置可为:

\(\phi(\theta'x)(1-\phi(\theta'x)) z^T xx^T z\)

\(z^Tx\ 和 xz^T 是相等的 表示内积, 是个实数,\)

即可再化简为:

\(\phi(\theta'x)(1-\phi(\theta'x))( z^T x)^2\)

因为 \(\phi(x) \in [0,1]\) 所以该式子 大于或等于0 恒成立, 第二项也类似, 两个半正定的线性组合, 也是半正定, 即证海塞矩阵是半正定的, 即证 loss 是 凸函数

总体感觉, 逻辑回归的推导, 相对于 SVM 还是要简单许多的呀, 都不用对偶, 直接偏导就可以了, 难度也不大, 但用处却是非常大的, 结合了线性模型, 同时, 它是凸函数, 意味着求解时, 可以通过梯度下降法来找到全局最优解 . 毕竟是我最喜欢的三个算法之一了, 另两个是 SVM 和 决策树, 当然 LR已经包含了呀.

逐步将经典的ML算法都手推一遍, 才本质上来认识世界, 真的能到达

随心所欲不逾矩呢?

还是,

万物并作,吾以观复?

ML-逻辑回归推导的更多相关文章

  1. Spark ML逻辑回归

    import org.apache.log4j.{Level, Logger} import org.apache.spark.ml.classification.LogisticRegression ...

  2. ML 逻辑回归 Logistic Regression

    逻辑回归 Logistic Regression 1 分类 Classification 首先我们来看看使用线性回归来解决分类会出现的问题.下图中,我们加入了一个训练集,产生的新的假设函数使得我们进行 ...

  3. 【Coursera】线性回归和逻辑回归

    一.线性回归 1.批量梯度下降法 每次对参数进行一次迭代时,都要扫描一遍输入全集 算法可以收敛到局部最优值 当迭代多次之后,每次迭代参数的改变越小 2.随机梯度下降法 对于一个输入样本,对参数进行一次 ...

  4. 大叔学ML第五:逻辑回归

    目录 基本形式 代价函数 用梯度下降法求\(\vec\theta\) 扩展 基本形式 逻辑回归是最常用的分类模型,在线性回归基础之上扩展而来,是一种广义线性回归.下面举例说明什么是逻辑回归:假设我们有 ...

  5. ML(4)——逻辑回归

    Logistic Regression虽然名字里带“回归”,但是它实际上是一种分类方法,“逻辑”是Logistic的音译,和真正的逻辑没有任何关系. 模型 线性模型 由于逻辑回归是一种分类方法,所以我 ...

  6. 逻辑回归(Logistic Regression)推导

    出自BYRans博客:http://www.cnblogs.com/BYRans/ 本文主要讲解分类问题中的逻辑回归.逻辑回归是一个二分类问题. 二分类问题 二分类问题是指预测的y值只有两个取值(0或 ...

  7. 逻辑回归 之 Logist 推导

    Logist从概率角度认识 可以咱学校教材大二版的<> - 山大版, 来整一波, 为了简化推导形式呢, 这里就假设2个样本空间的形式来展开, 基于(条件概率) 全概率与贝叶斯 作为核心. ...

  8. 逻辑回归原理,推导,sklearn应用

    目录 逻辑回归原理,推导,及sklearn中的使用 1 从线性回归过渡到逻辑回归 2 逻辑回归的损失函数 2.1 逻辑回归损失函数的推导 2.2 梯度下降法 2.3 正则化 3 用逻辑回归进行多分类 ...

  9. [机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等.主要学习资料来自Standford Andrew N ...

  10. Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression

    原文:http://blog.csdn.net/abcjennifer/article/details/7732417 本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性 ...

随机推荐

  1. .Net反射-两种方式获取Enum中的值

    public enum EJobType { 客服 = , 业务员 = , 财务 = , 经理 = } Type jobType = typeof(EJobType); 方式1: Array enum ...

  2. Spring Cloud微服务安全实战_4-1_微服务网关安全_概述&微服务安全面临的挑战

      第四章  网关安全 这一章从简单的API的场景过渡到复杂的微服务的场景 4.1 概述 微服务安全面临的挑战:介绍中小企业的一个微服务架构,相比第三章的单体应用的简单的API所面临的哪些挑战 OAu ...

  3. vue_02day

    目录 vue_02 表单指令: 条件指令: 循环指令: 前端数据库: 分隔符: 过滤器: 计算属性: 监听属性: vue编译不生效,闪烁 冒泡排序: vue_02 表单指令: <form act ...

  4. [LeetCode] 62. Unique Paths 不同的路径

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  5. Windows搭建FTP/Http文件共享(利用IIS)

    控制面板——程序——添加功能 勾选Ftp服务器.万维网服务.IIS管理控制台 然后,计算机——右键管理——服务和应用程序,添加网站和添加Ftp IP设置为 未分配 或 本机获取到的静态IP即可. 然后 ...

  6. Win10 1903 运行安卓模拟器蓝屏解决方案

    由于没有安卓机,想要测试一些东西,所以选择了安卓模拟器,可是一运行模拟器就导致电脑蓝屏,试了 N 次都不行. 于是在网上寻找解决方案,了解到导致蓝屏的原因都是因为虚拟化技术,我的系统是 Windows ...

  7. 手写Tomcat服务器

    预备知识 编写服务器用到的知识点 1) Socket 编程2) HTML3) HTTP 协议4) 反射5) XML 解析6) 服务器编写 Socket编程 https://www.cnblogs.co ...

  8. springmvc和mybatis面试题(含答案)

    Spring MVC Framework有这样一些特点: 1.它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件.并且和Spring提供的其他基础结构紧密集成. ...

  9. $scope里的$watch方法

    一.$watch的作用 监听model,如果model发生变化,则触发某些事情. 二.$watch的格式 $scope. $watch(watchFn,watchAction,deepWatch); ...

  10. [Python学习笔记-007] 使用PyEnchant检查英文单词

    最近在教儿子做自然拼读,跟他玩了一个单词游戏,就是利用简单的枚举找出适合小朋友学习的两个字母的单词.人工找寻难免有疏漏之处,这里使用PyEnchant给出一个简单的脚本. 01 - foo.py #! ...