【机器学习】逻辑斯蒂回归(Logistic Regression)详解
引言
LR回归,虽然这个算法从名字上来看,是回归算法,但其实际上是一个分类算法,学术界也叫它logit regression, maximum-entropy classification (MaxEnt)或者是the log-linear classifier。在机器学习算法中,有几十种分类器,LR回归是其中最常用的一个。
logit和logistic模型的区别:
- 二者的根本区别在于广义化线性模型中的联系函数的形式。logit采用对数形式,logistic形式为。
- 当因变量是多类的,可以采用logistic,也可以用logit,计算结果并无多少差别。
LR回归是在线性回归模型的基础上,使用函数,将线性模型 的结果压缩到 之间,使其拥有概率意义。 其本质仍然是一个线性模型,实现相对简单。在广告计算和推荐系统中使用频率极高,是CTR预估模型的基本算法。同时,LR模型也是深度学习的基本组成单元。
LR回归属于概率性判别式模型,之所谓是概率性模型,是因为LR模型是有概率意义的;之所以是判别式模型,是因为LR回归并没有对数据的分布进行建模,也就是说,LR模型并不知道数据的具体分布,而是直接将判别函数,或者说是分类超平面求解了出来。
一般来说,分类算法都是求解,即对于一个新的样本,计算其条件概率 。这个可以看做是一个后验概率,其计算可以基于贝叶斯公式得到: ,其中是类条件概率密度,是类的概率先验。使用这种方法的模型,称为是生成模型,即:是由和生成的。
分类算法所得到的 可以将输入空间划分成许多不相交的区域,这些区域之间的分隔面被称为判别函数(也称为分类面),有了判别函数,就可以进行分类了,上面生成模型,最终也是为了得到判别函数。如果直接对判别函数进行求解,得到判别面,这种方法,就称为判别式法。LR就属于这种方法。
logistic distribution (逻辑斯蒂分布)
之前说过,LR回归是在线性回归模型的基础上,使用函数得到的。关于线性模型,在前面的文章中已经说了很多了。这里就先介绍一下,函数。
首先,需要对 logistic distribution (逻辑斯蒂分布)进行说明,这个分布的概率密度函数和概率分布函数如下:
这里是位置参数,而是形状参数。
逻辑斯蒂分布在不同的 和 的情况下,其概率密度函数 的图形:
逻辑斯蒂分布在不同的 和 的情况下,其概率分布函数 的图形:
由图可以看出,逻辑斯蒂分布和高斯分布的密度函数长得差不多。特别注意逻辑斯蒂分布的概率密度函数自中心附近增长速度较快,而在两端的增长速度相对较慢。形状参数的数值越小,则概率密度函数在中心附近增长越快。
当 时,逻辑斯蒂分布的概率分布函数(累计密度函数)就是我们常说的函数:
且其导数为:
这是一个非常好的特性,并且这个特性在后面的推导中将会被用到。
从逻辑斯蒂分布 到 逻辑斯蒂回归模型
前面说过,分类算法都是求解,而逻辑斯蒂回归模型,就是用当时的逻辑斯蒂分布的概率分布函数:函数,对进行建模,所得到的模型,对于二分类的逻辑斯蒂回归模型有:
很容易求得,这里:
这里又可以被称作比值比,又名机会比、优势比。(符号标记不慎,这里的标记其实并不太合适。)
就是我们在分类算法中的决策面,由于LR回归是一个线性分类算法,所以,此处采用线性模型:这里参数向量为,是线性模型的基函数,基函数的数目为个,如果定义的话。
在这里的其实就是(Hypothesis)。
那么, 逻辑斯蒂回归模型就可以重写为下面这个形式:
对于一个二分类的数据集,这里,其极大似然估计为:
竖线改分号只是为了强调在这种情形下,它们含义是相同的,具体可见极大似然估计
对数似然估计为:(通常我们会取其平均)
关于的梯度为:
得到梯度之后,那么就可以和线性回归模型一样,使用梯度下降法求解参数。
梯度下降法实现相对简单,但是其收敛速度往往不尽人意,可以考虑使用随机梯度下降法来解决收敛速度的问题。但上面两种在最小值附近,都存在以一种曲折的慢速逼近方式来逼近最小点的问题。所以在LR回归的实际算法中,用到的是牛顿法,拟牛顿法(DFP、BFGS、L-BFGS)。
由于求解最优解的问题,其实是一个凸优化的问题,这些数值优化方法的区别仅仅在于选择什么方向走向最优解,而这个方向通常是优化函数在当前点的一阶导数(梯度)或者二阶导数(海森Hessian矩阵)决定的。比如梯度下降法用的就是一阶导数,而牛顿法和拟牛顿法用的就是二阶导数。
带惩罚项的LR回归
L2惩罚的LR回归:
上式中,是用于调节目标函数和惩罚项之间关系的,越大,惩罚力度越大,所得到的的最优解越趋近于0,或者说参数向量越稀疏;越小,惩罚力度越小,模型越复杂,也越能体现训练集的数据特征。
L1惩罚的LR回归:
为1范数,即所有元素的绝对值之和。
L1惩罚项可用于特征选择,会使模型的特征变得稀疏。
为什么逻辑回归比线性回归要好?
虽然逻辑回归能够用于分类,不过其本质还是线性回归。它仅在线性回归的基础上,在特征到结果的映射中加入了一层sigmoid函数(非线性)映射,即先把特征线性求和,然后使用sigmoid函数来预测。然而,正是这个简单的逻辑函数,使得逻辑回归模型成为了机器学习领域一颗耀眼的明星。
这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,只需要在[0,1]之内。而逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型。逻辑曲线在z=0时,十分敏感,在z>>0或z<<0处,都不敏感,将预测值限定为[0,1]。
从梯度更新视角来看,为什么线性回归在整个实数域内敏感度一致不好。
线性回归和LR的梯度更新公式是一样的,如下:
唯一不同的是假设函数,,对于LR而言,,那么梯度更新的幅度就不会太大。而线性回归在整个实数域上,即使已经分类正确的点,在梯度更新的过程中也会大大影响到其它数据的分类,就比如有一个正样本,其输出为10000,此时梯度更新的时候,这个样本就会大大影响负样本的分类。而对于LR而言,这种非常肯定的正样本并不会影响负样本的分类情况!
参考文章:
Logistic Regression 的前世今生(理论篇)
【机器学习】逻辑斯蒂回归(Logistic Regression)详解相关推荐
- Lecture6 逻辑斯蒂回归(Logistic Regression)
目录 1 常用数据集 1.1 MNIST数据集 1.2 CIFAR-10数据集 2 课堂内容 2.1 回归任务和分类任务的区别 2.2 为什么使用逻辑斯蒂回归 2.3 什么是逻辑斯蒂回归 2.4 Si ...
- PyTorch深度学习实践(b站刘二大人)P6讲 逻辑斯蒂回归 Logistic Regression
1.分类任务的数据集 ① The MNIST Dataset:handwritten digits Training set: 60,000 examples, Test set: 10,000 ex ...
- 机器学习-逻辑斯蒂回归(Logistic Regression)
注:内容转自https://github.com/NLP-LOVE/ML-NLP/tree/master/Machine%20Learning,略有修改. 目录 逻辑 1. 什么是逻辑斯蒂回归 2. ...
- 机器学习笔记——逻辑斯蒂回归(Logistic)
1.线性回归 1.1线性回归概念 如果特征值之间存在线性关系就可以使用线性回归建模对其预测结果. 1.2最小二乘法求解 何为最小二乘法,我们有很多的给定点,这时候我们需要找出一条线去拟合它,那 ...
- 逻辑斯蒂回归(logisic regression)和SVM的异同
逻辑斯蒂回归主要用于二分类,推广到多分类的话是类似于softmax分类.求 上述问题可以通过最大化似然函数求解. 上述问题可以采用最小化logloss进行求解. 一般地,我们还需要给目标函数加上正则项 ...
- 逻辑斯蒂回归(Logistics Regression)
Author: 吕雪杰,xiaoran; Datawhale Logistics Regression简介 逻辑回归是在数据服从伯努利分布的假设下,通过极大似然的方法,运用梯度下降法来求解参数,从而达 ...
- 逻辑斯蒂回归java_机器学习 (五)逻辑斯蒂回归
一.概念 逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的,也可以是多分类的.logistic回归的因变量 ...
- 逻辑斯蒂回归 逻辑回归_逻辑回归简介
逻辑斯蒂回归 逻辑回归 Logistic regression is a classification algorithm, which is pretty popular in some commu ...
- 逻辑斯蒂回归以及它的梯度下降法
文章目录 前言 模型 逻辑斯蒂分布 二项逻辑斯蒂回归模型 多项逻辑斯蒂回归模型 策略 算法 如何求对数似然函数的最大值 梯度下降法 算法思想 推导公式 前言 逻辑斯蒂回归(logistic distr ...
最新文章
- 模式设计概述:代理者模式
- python面向对象编程138讲_Python---面向对象编程-1
- Docker 容器技术 — Swarm 集群
- python 优雅的解析 jsonp
- MS Learn 宝藏资源库 - 学习经验分享
- 九章基础算法01:链表
- VMware快照功能与(非永久)永久磁盘详解
- Jquery—重新认识Jquery中的html()方法
- Android图形显示系统——下层显示1:基础知识与相关文件
- 简单电脑***《菜鸟级》
- rubyinstaller下载安装 redis集群
- 论文翻译 WiscKey: Separating Keys from Values in SSD-Conscious Storage
- 冯扬文:新冠疫情下国际航运市场趋势分析
- 第五届新疆省ACM-ICPC程序设计竞赛(重现赛)
- 【一起入门NLP】中科院自然语言处理作业四:RNN+Attention实现Seq2Seq中英文机器翻译(Pytorch)【代码+报告】
- 计算机机械硬盘的一个扇区,机械硬盘分区结构
- Navicat有什么用?如何安装?【C++培训】
- 《西西弗神话》读后感
- 微信公众号开发之分享接口实现
- 秒懂1U、2U、4U和42U服务器
热门文章
- 一个程序员的学习历程
- 【Java设计模式】工厂方法
- 类,__dift__,__len__,__add__,__new__,__init__
- SQL Compare数据库比较工具 完全破解+使用教程
- sns是什么?可以做什么?
- 云计算:SaaS、PaaS、IaaS、CaaS并不神秘
- Python 什么是flask框架?快速入门
- 5、隐私计算--同态加密
- Navicat导出数据库表
- vscode 使用 git 踩坑 小记