概述

逻辑回归是一个常用于解决二分类(即结果只有两个取值)问题的机器学习方法。逻辑回归假设因变量y服从伯努利分布(0-1分布)。这里“回归”一词的含义事实上是“分类”。
例如一个简单的逻辑回归应用场景:
当我们得知一个肿瘤的大小,而需要预测该肿瘤是良性还是恶性。
可以看到,我们实际要做的是给出一个肯定或否定的答案,也即我们最后需要的结果是{良性、恶性}集合中的一个取指。
从函数的角度看,我们是将取值范围为自定义(通常为(−∞,∞)(-\infty,\infty)(−∞,∞))的值映射到集合{0,1}。

假设函数

Sigmoid函数

由于我们的目的是将取值范围为自定义(通常为(−∞,∞)(-\infty,\infty)(−∞,∞))的值映射到集合{0,1},那么如果我们首先能把通过一个函数映射到[0,1],那么我们只需在该段中寻找一个分界点即可划分出0和1取值的边界。
例如,选择[0, 0.5]都取0,(0.5, 1]都取1,就可以将值域为[0,1]的函数映射到集合{0,1}。
于是,我们面临的首要问题就是,该选择什么样的函数来将(−∞,∞)(-\infty,\infty)(−∞,∞))映射到[0,1]呢?

我们找到了一个函数名为Sigmoid函数(也叫Logistic函数):
S(x)=11+e−xS(x)=\frac{1}{1+e^{-x}} S(x)=1+e−x1​
该函数被广泛的应用作为神经网络的激活函数(这里先暂且不做介绍)
该函数有一个很好的特性:
其导数可用自身表示
dS(x)dx=e−x(1+e−x)2=S(x)(1−S(x))\frac{dS(x)}{dx}=\frac{e^{-x}}{(1+e^{-x})^2}=S(x)(1-S(x)) dxdS(x)​=(1+e−x)2e−x​=S(x)(1−S(x))

假设函数的构造

我们在这里需要完成的是二分类问题的假设函数的构造,这事实上可以利用我们前面学习的线性回归来做。
事实上,线性回归与二分类都是预测问题,唯一的不同是,线性回归预测的是连续值,而二分类问题预测的是一个二元属性{0,1}。
我们首先来复习一下线性回归的假设函数:
hθ(x)=θTxh_\theta(x)=\theta^Tx hθ​(x)=θTx
其中xxx是我们输入的(n+1(n+1(n+1)维向量(其中x(0)x^{(0)}x(0)=1),θ\thetaθ是一个长度为(n+1)(n+1)(n+1)的参数向量。
在上面,我们已经找到了将(−∞,∞)(-\infty,\infty)(−∞,∞)映射到[0,1]的方法。
事实上,我们只需要将θTx\theta^TxθTx代入Sigmoid函数即可,逻辑回归的假设函数为:
hθ(x)=11+e−θTxh_\theta(x)=\frac{1}{1+e^{-\theta^Tx}} hθ​(x)=1+e−θTx1​
这个假设函数是有其概率意义的,它表示,在给定xxx和θ\thetaθ的情况下,y=1y=1y=1的概率,也即:
P(y=1∣x;θ)=g(θTx)=11+e−θTxP(y=1|x;\theta)=g(\theta^T x)=\frac{1}{1+e^{-\theta^Tx}} P(y=1∣x;θ)=g(θTx)=1+e−θTx1​
由于逻辑回归中只有两个取值,因此我们可得到其对立事件的概率:
P(y=0∣x;θ)=g(θTx)=1−11+e−θTx=e−θTx1+e−θTx=11+eθTxP(y=0|x;\theta)=g(\theta^T x)=1-\frac{1}{1+e^{-\theta^Tx}}=\frac{e^{-\theta^Tx}}{1+e^{-\theta^Tx}}=\frac{1}{1+e^{\theta^Tx}} P(y=0∣x;θ)=g(θTx)=1−1+e−θTx1​=1+e−θTxe−θTx​=1+eθTx1​

决策边界

决策边界(decision boundary),是统计分类问题中的一个超曲面,把向量空间(作为特征空间)划分为两个集合,分别对应两个分类。

由Sigmoid函数的特性,我们可以得知,当θTx>0\theta^Tx>0θTx>0时,yyy取值为1;当θTx≤0\theta^Tx\le0θTx≤0时,yyy取值为0。
这意味着划分类别的决策边界依赖于θTx\theta^TxθTx的取值。
值得说明的是,决策边界由参数θ\thetaθ确定,对于确定的xxx,当给定一个θ\thetaθ时,其决策边界便唯一确定下来。

决策边界分为线性决策边界与非线性决策边界两种,这取决于我们选择的输入xxx向量,事实上,我们可以在x向量的分量中添加非线性因素,来产生一个非线性决策边界。而具体什么样的xxx向量会产生什么样的决策边界,这可能会很需要经验来判断。
值得说明的是,决策边界的类型仅由输入xxx向量决定,而与参数θ\thetaθ无关,因此参数θ\thetaθ的选择是另一个问题,线性与非线性在参数选择上并没有什么不同。

线性决策边界

非线性决策边界

代价函数

在解决了假设函数的问题后,我们需要解决的问题是,该如何为该假设函数确定参数θ\thetaθ。我们很容易的会想到,确定参数的方式一定需要一个代价函数,我们需要为一个确定下来参数的假设函数给出一个代价,并期望代价函数取得极小值,这就是我们的优化目标。
事实上,当代价函数取得全局最小值时,此时对应的参数θ\thetaθ就是我们需要的假设函数的完美参数。
因此假设函数是必不可少的。
我们很容易会想到,我们能否使用在线性回归中使用的代价函数呢?
也即J(θ)=12m∑i=1m(hθ(x(i))−y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^m{(h_\theta(x^{(i)})-y^{(i)})^2} J(θ)=2m1​i=1∑m​(hθ​(x(i))−y(i))2
我们看下它的形式,会发现该函数不太适合作为逻辑回归中的代价函数,原因是,y向量的每一个分量只有{0,1}两个取值,hθ(x(i))h_\theta(x^{(i)})hθ​(x(i))取值也在(0,1),因此它会把预估的值与实际值之间的差限制在一个很小的范围,这会导致不同的参数选取可能效果差别很大,但在代价函数中差别很小。

因此我们需要一个函数来将(0,1)的范围放大至(0,∞)(0,\infty)(0,∞)。
需求确定下来之后,我们就迎来了我们需要的代价函数:
Cost(hθ(x),y)={−log(hθ(x))y=1−log(1−hθ(x))y=0Cost(h_\theta(x),y)=\begin{cases} -log(h_\theta(x))&y=1\\ -log(1-h_\theta(x))&y=0 \end{cases} Cost(hθ​(x),y)={−log(hθ​(x))−log(1−hθ​(x))​y=1y=0​
同时,它等价于另一个非分段函数:
Cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))Cost(h_\theta(x),y)=-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x)) Cost(hθ​(x),y)=−ylog(hθ​(x))−(1−y)log(1−hθ​(x))
对于多个训练数据:
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[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)))]
向量实现为:
h=g(Xθ)J(θ)=1m⋅(−yTlog(h)−(1−y)Tlog(1−h))h=g(X\theta)\\ J(\theta)=\frac{1}{m}·(-y^Tlog(h)-(1-y)^Tlog(1-h)) h=g(Xθ)J(θ)=m1​⋅(−yTlog(h)−(1−y)Tlog(1−h))

最后我们解释一下上面的代价函数是如何得到的:
我们使用了极大似然估计得到上面的代价函数。
上面已经介绍过,假设函数是有概率意义的,它代表着,在给定xxx和θ\thetaθ的情况下,y=1y=1y=1的概率。同样的,我们也因此可以得到y=0y=0y=0的概率。
似然函数为:
L(θ)=∏i=1m[p(x(i))]y(i)[1−p(x(i))](1−y(i))L(\theta)=\prod_{i=1}^m [p(x^{(i)})]^{y^{(i)}}[1-p(x^{(i)})]^{(1-y^{(i)})} L(θ)=i=1∏m​[p(x(i))]y(i)[1−p(x(i))](1−y(i))
取对数:
lnL(θ)=∑i=1m[y(i)log(p(x(i)))+(1−y(i))log(1−p(x(i)))]lnL(\theta)=\sum_{i=1}^m[y^{(i)}log(p(x^{(i)}))+(1-y^{(i)})log(1-p(x^{(i)}))] lnL(θ)=i=1∑m​[y(i)log(p(x(i)))+(1−y(i))log(1−p(x(i)))]
我们要求似然函数取最大值,则我们取的代价函数:
J(θ)=−1mlnL(θ)J(\theta)=-\frac{1}{m}lnL(\theta) J(θ)=−m1​lnL(θ)
应当取到最小值。
我们使用的代价函数正由此而来。

下面是交叉熵代价函数和平方代价函数的对比图(图来自李宏毅老师的课程)
可以看到,距离最优点很远的地方,平方代价函数会很平坦,给梯度下降带来困难。

参数估计

在上面我们已经确定了假设函数与代价函数,那么我们就可以解决假设函数中的参数估计问题了。
我们给定参数取值的目标是使代价最小,也即代价函数取到最小值时,所对应的参数值。

梯度下降

我们使用梯度下降算法来优化代价函数,从而找到合适的参数θ\thetaθ。
梯度下降算法的表示如下:
θj=θj−α∂∂θjJ(θ)\theta_j=\theta_j-\alpha \frac{\partial}{\partial \theta_j}J(\theta) θj​=θj​−α∂θj​∂​J(θ)
将导数部分代入有:
θj=θj−αm∑i=1m((hθ(x(i))−y(i))xj(i))\theta_j=\theta_j-\frac{\alpha}{m}\sum_{i=1}^m{((h_\theta(x^{(i)})-y^{(i)})x_j^{(i)})} θj​=θj​−mα​i=1∑m​((hθ​(x(i))−y(i))xj(i)​)
不使用循环迭代每个分量,而是直接用向量的格式处理:
θ=θ−αmXT(g(Xθ)−y⃗)\theta=\theta-\frac{\alpha}{m}X^T(g(X\theta)-\vec{y}) θ=θ−mα​XT(g(Xθ)−y​)
当两次代价函数的差小于阈值时,或到达最大迭代次数时,即可停止迭代。

多分类任务

正如我们所见到的,逻辑回归只适合处理二分类问题,但我们仍然有技巧可将其应用到多分类问题。

one-vs-all

我们采取的处理方式是one-vs-all,也即每次分出一个类。
应用中,若有n个类别,我们需要训练n个分类器,每个分类器都将识别出某个特定的类与不属于该类的对象集合。

one-vs-one

另一种处理方式是one-vs-one,也即需要训练区分两个任意类的分类器。
由组合可以得知,若有n个类别,则需要训练Cn2=n(n−1)2C_n^2=\frac{n(n-1)}{2}Cn2​=2n(n−1)​个分类器。当然该策略也有一个有点,那就是我们训练时只需在区分的两个训练集上训练即可,虽然我们训练的分类器数量更多,但每次训练时速度大大加快,而且多个分类器的训练过程可并行。因此训练过程要比前者更快。

处理过拟合

正则化

训练模型时,常常会出现过拟合问题,如下图所示:

原因在于,该模型依赖于过多的变量,有些变量的引入没有必要(这里指x的高次项),因此,我们想要让变量数保持在一定范围内,也就是说让上图中高次项的系数尽量为0或接近于0。
我们采取的思路是结构风险最小化,也即在代价函数中加入一个非负的正则项,用来惩罚过多的高次项。
我们加入的正则项为:
λ2m∑j=1nθj2\frac{\lambda}{2m} \sum_{j=1}^n{\theta_j^2} 2mλ​j=1∑n​θj2​
其中12m\frac{1}{2m}2m1​只是一个系数而已,为了统一与求导方便,使用了该值。
值得注意的是,我们并不惩罚θ0\theta_0θ0​,因为这只是一个偏移量。
因此我们最终使用正则化后得到的代价函数是:
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[y^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m} \sum_{j=1}^n{\theta_j^2} J(θ)=−m1​i=1∑m​[y(i)log(hθ​(x(i)))+(1−y(i))log(1−hθ​(x(i)))]+2mλ​j=1∑n​θj2​

改进后的梯度下降算法

对上式求偏导可得到新的梯度下降算法:
θj=θj−αm∑i=1m((hθ(x(i))−y(i))xj(i))−αλmθj\theta_j=\theta_j-\frac{\alpha}{m}\sum_{i=1}^m{((h_\theta(x^{(i)})-y^{(i)})x_j^{(i)})}-\alpha \frac{\lambda}{m}\theta_j θj​=θj​−mα​i=1∑m​((hθ​(x(i))−y(i))xj(i)​)−αmλ​θj​
合并同类项后:
θj=θj(1−αλm)−αm∑i=1m((hθ(x(i))−y(i))xj(i))\theta_j=\theta_j(1-\alpha \frac{\lambda}{m})-\frac{\alpha}{m}\sum_{i=1}^m{((h_\theta(x^{(i)})-y^{(i)})x_j^{(i)})} θj​=θj​(1−αmλ​)−mα​i=1∑m​((hθ​(x(i))−y(i))xj(i)​)
每步参数,就按上式进行迭代,直到代价函数收敛。

推广

该方法还可推广到线性回归中,线性回归中也存在过拟合现象,因此也可用正则化的方式减少过拟合。

梯度下降

代价函数
J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]J(\theta)=\frac{1}{2m}[\sum_{i=1}^m{(h_\theta(x^{(i)})-y^{(i)})^2+\lambda \sum_{j=1}^n{\theta_j^2}}] J(θ)=2m1​[i=1∑m​(hθ​(x(i))−y(i))2+λj=1∑n​θj2​]
因此θ\thetaθ的更新规则如下:
θ0=θ0−α1m∑i=1m((hθ(x(i))−y(i))⋅x0(i))θj=θj−α1m∑i=1m((hθ(x(i))−y(i))⋅xj(i)+λmθj)j=1,2,...n\theta_0=\theta_0-\alpha \frac{1}{m}\sum_{i=1}^m{((h_\theta(x^{(i)})-y^{(i)})·x^{(i)}_0)}\\ \theta_j=\theta_j-\alpha \frac{1}{m}\sum_{i=1}^m{((h_\theta(x^{(i)})-y^{(i)})·x^{(i)}_j+\frac{\lambda}{m}\theta_j)}\\ j=1,2,...n θ0​=θ0​−αm1​i=1∑m​((hθ​(x(i))−y(i))⋅x0(i)​)θj​=θj​−αm1​i=1∑m​((hθ​(x(i))−y(i))⋅xj(i)​+mλ​θj​)j=1,2,...n

正规方程

增加正则项减少过拟合后,正规方程的解是:
θ=(XTX+λ[011...1])−1XTy\theta=(X^TX+\lambda\left[ \begin{matrix} 0 & & & & \\ & 1 & & & \\ & & 1 & & \\ & & &... & \\ & & & & 1 \end{matrix} \right])^{-1}X^Ty θ=(XTX+λ⎣⎢⎢⎢⎢⎡​0​1​1​...​1​⎦⎥⎥⎥⎥⎤​)−1XTy
图中该矩阵的大小为(n+1)×(n+1)(n+1)\times(n+1)(n+1)×(n+1)

后记

之后会增加从代价函数对其求偏导,得到梯度下降具体值的推导过程。

机器学习(2)逻辑回归相关推荐

  1. 机器学习实战-逻辑回归-19

    机器学习实战-逻辑回归-用户流失预测 import numpy as np train_data = np.genfromtxt('Churn-Modelling.csv',delimiter=',' ...

  2. 机器学习_2逻辑回归

    机器学习_逻辑回归 分类问题 二分类--Sigmoid函数 Sigmoid函数代码实现 逻辑回归 数学原理 求解方式 正则化 逻辑回归数据集应用样例--代码实现 样例1:有清晰的线性决策边界 决策边界 ...

  3. 机器学习:逻辑回归(logistics regression)

    title: 机器学习:逻辑回归(logistics regression) date: 2019-11-30 20:55:06 mathjax: true categories: 机器学习 tags ...

  4. 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例

    传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...

  5. 吴恩达机器学习之逻辑回归(二分类)

    吴恩达机器学习之逻辑回归 逻辑回归 二分类逻辑回归 二分类逻辑回归案例 python代码实现(含详细代码注释): 案例中几个问题的解析 不同于线性回归,逻辑回归的hθ(x)还需要用sigmoid函数处 ...

  6. 【机器学习】逻辑回归原理介绍

    [机器学习]逻辑回归原理介绍 [机器学习]逻辑回归python实现 [机器学习]逻辑回归sklearn实现 Logistic 回归模型是目前广泛使用的学习算法之一,通常用来解决二分类问题,虽然名字中有 ...

  7. 简单粗暴理解与实现机器学习之逻辑回归:逻辑回归介绍、应用场景、原理、损失以及优化...

    作者 | 汪雯琦 责编 | Carol 来源 | CSDN 博客 出品 | AI科技大本营(ID:rgznai100) 学习目标 知道逻辑回归的损失函数 知道逻辑回归的优化方法 知道sigmoid函数 ...

  8. 【机器学习】逻辑回归(Logistic Regression)

    注:最近开始学习<人工智能>选修课,老师提纲挈领的介绍了一番,听完课只了解了个大概,剩下的细节只能自己继续摸索. 从本质上讲:机器学习就是一个模型对外界的刺激(训练样本)做出反应,趋利避害 ...

  9. 【机器学习】逻辑回归优化技巧总结(全)

    逻辑回归由于其简单高效.易于解释,是工业应用最为广泛的模型之一,比如用于金融风控领域的评分卡.互联网的推荐系统.上文总结了逻辑回归的原理及其实现[全面解析并实现逻辑回归(Python)]. 本文从实际 ...

  10. 【机器学习】逻辑回归代码练习

    是中国大学慕课<机器学习>的"逻辑回归"章节的课后代码. 课程地址: https://www.icourse163.org/course/WZU-1464096179 ...

最新文章

  1. CISCO交换机如何删除 Vlan
  2. java实现dvd租赁系统_Java编写汽车租赁系统
  3. WPF IP地址输入控件的实现
  4. WampServer的研究日记二
  5. matlab电机标定,基于模型的电机标定及高精度电机建模
  6. jqGrid 使用案例及笔记
  7. [译] 构建流畅的交互界面
  8. 大学生创新项目管理系统
  9. 华为计算机怎么算根号,华为手机计算器的根号是什?
  10. HBuilder 第一个app项目
  11. 有哪些方式加速大数据查询速度
  12. managed DLL 和 normal DLL
  13. 【LTE基础知识】GUTI(Globally Unique Temporary UE Identity)分配
  14. 权威发布:《麻省理工科技评论》2020年“全球十大突破性技术”
  15. linux中如何查看mac地址
  16. python编程基础—类与对象
  17. 信息技术助推智能建造和建筑企业数字化转型
  18. windows10 系统家庭版转专业版小结
  19. BNUOJ 53073 【找规律】
  20. spring学习总结(二)

热门文章

  1. 靶场练习--春秋云境-Certify
  2. 【MySQL数据库开发之一】Mac下配置安装数据库-MySQL
  3. Siri之父下周将推出全新AI机器人VIV
  4. static(静态方法中)如何调用非静态方法?
  5. ubuntu18.04上的draftsight 2D的安装
  6. Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结
  7. listen监听队列刨析
  8. (Java零基础学习笔记)第二章 Java中的基本语法
  9. eDiary 个人日记本使用技巧
  10. kotlin 回调函数、let、also、run 、with、apply 使用总结