机器学习(2)逻辑回归
概述
逻辑回归是一个常用于解决二分类(即结果只有两个取值)问题的机器学习方法。逻辑回归假设因变量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(θ)=2m1i=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(θ)=−m1i=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(θ)=−m1lnL(θ)
应当取到最小值。
我们使用的代价函数正由此而来。
下面是交叉熵代价函数和平方代价函数的对比图(图来自李宏毅老师的课程)
可以看到,距离最优点很远的地方,平方代价函数会很平坦,给梯度下降带来困难。
参数估计
在上面我们已经确定了假设函数与代价函数,那么我们就可以解决假设函数中的参数估计问题了。
我们给定参数取值的目标是使代价最小,也即代价函数取到最小值时,所对应的参数值。
梯度下降
我们使用梯度下降算法来优化代价函数,从而找到合适的参数θ\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(θ)=−m1i=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−αm1i=1∑m((hθ(x(i))−y(i))⋅x0(i))θj=θj−αm1i=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+λ⎣⎢⎢⎢⎢⎡011...1⎦⎥⎥⎥⎥⎤)−1XTy
图中该矩阵的大小为(n+1)×(n+1)(n+1)\times(n+1)(n+1)×(n+1)
后记
之后会增加从代价函数对其求偏导,得到梯度下降具体值的推导过程。
机器学习(2)逻辑回归相关推荐
- 机器学习实战-逻辑回归-19
机器学习实战-逻辑回归-用户流失预测 import numpy as np train_data = np.genfromtxt('Churn-Modelling.csv',delimiter=',' ...
- 机器学习_2逻辑回归
机器学习_逻辑回归 分类问题 二分类--Sigmoid函数 Sigmoid函数代码实现 逻辑回归 数学原理 求解方式 正则化 逻辑回归数据集应用样例--代码实现 样例1:有清晰的线性决策边界 决策边界 ...
- 机器学习:逻辑回归(logistics regression)
title: 机器学习:逻辑回归(logistics regression) date: 2019-11-30 20:55:06 mathjax: true categories: 机器学习 tags ...
- 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例
传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...
- 吴恩达机器学习之逻辑回归(二分类)
吴恩达机器学习之逻辑回归 逻辑回归 二分类逻辑回归 二分类逻辑回归案例 python代码实现(含详细代码注释): 案例中几个问题的解析 不同于线性回归,逻辑回归的hθ(x)还需要用sigmoid函数处 ...
- 【机器学习】逻辑回归原理介绍
[机器学习]逻辑回归原理介绍 [机器学习]逻辑回归python实现 [机器学习]逻辑回归sklearn实现 Logistic 回归模型是目前广泛使用的学习算法之一,通常用来解决二分类问题,虽然名字中有 ...
- 简单粗暴理解与实现机器学习之逻辑回归:逻辑回归介绍、应用场景、原理、损失以及优化...
作者 | 汪雯琦 责编 | Carol 来源 | CSDN 博客 出品 | AI科技大本营(ID:rgznai100) 学习目标 知道逻辑回归的损失函数 知道逻辑回归的优化方法 知道sigmoid函数 ...
- 【机器学习】逻辑回归(Logistic Regression)
注:最近开始学习<人工智能>选修课,老师提纲挈领的介绍了一番,听完课只了解了个大概,剩下的细节只能自己继续摸索. 从本质上讲:机器学习就是一个模型对外界的刺激(训练样本)做出反应,趋利避害 ...
- 【机器学习】逻辑回归优化技巧总结(全)
逻辑回归由于其简单高效.易于解释,是工业应用最为广泛的模型之一,比如用于金融风控领域的评分卡.互联网的推荐系统.上文总结了逻辑回归的原理及其实现[全面解析并实现逻辑回归(Python)]. 本文从实际 ...
- 【机器学习】逻辑回归代码练习
是中国大学慕课<机器学习>的"逻辑回归"章节的课后代码. 课程地址: https://www.icourse163.org/course/WZU-1464096179 ...
最新文章
- CISCO交换机如何删除 Vlan
- java实现dvd租赁系统_Java编写汽车租赁系统
- WPF IP地址输入控件的实现
- WampServer的研究日记二
- matlab电机标定,基于模型的电机标定及高精度电机建模
- jqGrid 使用案例及笔记
- [译] 构建流畅的交互界面
- 大学生创新项目管理系统
- 华为计算机怎么算根号,华为手机计算器的根号是什?
- HBuilder 第一个app项目
- 有哪些方式加速大数据查询速度
- managed DLL 和 normal DLL
- 【LTE基础知识】GUTI(Globally Unique Temporary UE Identity)分配
- 权威发布:《麻省理工科技评论》2020年“全球十大突破性技术”
- linux中如何查看mac地址
- python编程基础—类与对象
- 信息技术助推智能建造和建筑企业数字化转型
- windows10 系统家庭版转专业版小结
- BNUOJ 53073 【找规律】
- spring学习总结(二)