逻辑回归(LR)--分类

简介: 逻辑回归(logistic regression)属于有监督学习,判别模型,线性分类,不支持多分类,有预测函数,优化目标,求解算法。

逻辑回归(logistic regression)属于有监督学习,判别模型线性分类,不支持多分类,有预测函数,优化目标,求解算法。

描述:

从模型,损失函数,优化算法来描述,那就是:一种假设数据服从伯努利分布,通过极大似然作为优化目标,使用梯度下降算法进行模型参数求解的二分类模型。  

应用场景:比较常用: 医生病理诊断,信用评估,垃圾邮件分类

线性回归的回顾:参考上一篇文章:线性回归算法 https://blog.csdn.net/heda3/article/details/85844681

线性回归的目的是找到一条直线去拟合数据集的分布,并通过求解线性组合的数学表达式,实现预测新的数据。输入值和输出值的范围是连续的。

定义:给定一个数据集(X,Y),尽可能的学得一个线性模型h()对新的数据xi预测出f(xi),使得h(xi)尽可能的逼近真实值yi。

e23dfe0714b509a99b7e754658d9e1b1_20190306151333282.png

1、如何基于已有的线性回归模型去实现分类任务?(构建模型)

通过映射关系将线性回归的输出值映射为只有0和1的输出结果,那么如何实现这样的映射关系?

引入广义线性模型

20319b193b311d857365c79c869efe93_20190306151205396.png

通过一个联系函数g实现映射。

关于映射函数的选取?

1)阶跃函数:

953fd1e5f3f6284e7b7ad1e4712afbf2_20190306150451208.png

但是该函数不连续不能作为联系函数,对后面的求解不利。

参考:【1】https://blog.csdn.net/yinyu19950811/article/details/81321944

【2】反函数存在的条件https://blog.csdn.net/uncle_gy/article/details/78788737

2)引入对数几率函数(Sigmoid函数)

7f7342bcc185dd6c5dcfda49f08edf9f_20190306151016938.png

f724eb3c2e1d39b705be397ed6fc9994_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hlZGEz,size_16,color_FFFFFF,t_70.png

将对数几率函数代入广义线性模型可得到:

对数几率模型

d0c5d722705b9ce864d47da886a95f3e_20190306151521391.png

从上式分析,模型存在未知的w和b参数,如何依据现有的数据集去求解?

为此构建损失函数(策略,目的是找到优化的目标函数)

2、引入损失函数

线性回归的损失函数是:平方损失(均方误差)

e3f49117bc1d9c9bb288d72524516bfa_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hlZGEz,size_16,color_FFFFFF,t_70.png

逻辑回归模型的损失函数是?

使用线性回归的平方损失函数不行的原因:


下面引用:文章中机器学习算法(一):逻辑回归模型(Logistic Regression, LR)https://blog.csdn.net/weixin_39910711/article/details/81607386


前面我们介绍线性回归模型时,给出了线性回归的代价函数的形式(误差平方和函数),具体形式如下:

918a0c671dac2e7e1043765fb6ecc7ab_70.png

将逻辑回归的假设函数带入上式时,我们得到的是一个非凸函数,如下图:

f249542f547ef103190441ec06182b49_format,png.png

这样的函数拥有多个局部极小值,这就会使得我们在使用梯度下降法求解函数最小值时,所得到的结果并非总是全局最小,而有更大的可能得到的是局部最小值

而对于逻辑回归使用的损失函数:常用的是对数损失函数

因为对数损失函数可以为LR提供一个凸的代价函数,有利于使用梯度下降对参数求解

详细可参考:https://blog.csdn.net/weixin_39910711/article/details/81607386

bc2f5463e152f24f8a27b0ca16a01d11_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hlZGEz,size_16,color_FFFFFF,t_70.png

为了可以更加方便的进行后面的参数估计求解,把Cost表示在一行:

 

这与上面给出的两行表示形式是等价的。因此,代价函数最终形式为:

  

该函数是一个凸函数,这也达到了我们的要求。这也是LR代价函数最终形式

这里涉及一个问题:逻辑回归和似然函数的关系?

似然函数和损失函数的关系?

参考:【3】逻辑回归的理解https://blog.csdn.net/t46414704152abc/article/details/79574003


【4】【机器学习】【逻辑回归】最大似然估计的推导和求解步骤和梯度上升算法求解https://blog.csdn.net/u012421852/article/details/79575720


更多关于似然函数的理解:写的不错的博客文章


【1】逻辑回归与最大似然估计推导https://blog.csdn.net/yinyu19950811/article/details/81321944

【2】最大似然估计(Maximum likelihood estimation)(通过例子理解)https://blog.csdn.net/u014182497/article/details/82252456

【3】似然与极大似然估计http://fangs.in/post/thinkstats/likelihood/

【4】极大似然估计的理解与应用 https://www.cnblogs.com/xing901022/p/8418894.html

【5】最大似然估计 (MLE) 最大后验概率(MAP)https://www.cnblogs.com/sylvanas2012/p/5058065.html

【6】极大似然估计思想的最简单解释https://blog.csdn.net/class_brick/article/details/79724660

【7】极大似然估计详解,写的太好了!https://blog.csdn.net/qq_39355550/article/details/81809467

【8】https://blog.csdn.net/touch_dream/article/details/79371462

3、优化算法求解

3.1使用梯度下降法求解

参考:文章https://blog.csdn.net/weixin_39910711/article/details/81607386

首先:Sigmoid函数的求导过程

f277eacec81b2ce561250d6b39337983_format,png.png

故,sigmoid函数的导数

  

损失函数梯度求解过程:

df4afbff581e276c731811c8d596df5a_format,png.png

故,参数更新公式为(沿着梯度方向更新求解):

69df708677ca4cf360882183d2da6efc_format,png.png

3.2使用梯度上升法求解

沿着函数梯度的方向找到函数的最大值

迭代公式:

f0da8f696c715ccf24f4ab925f46adf5_20200105223448538.png

分为3种情况:


1)使用全部数据集的梯度上升算法


   对整个数据集计算梯度


2)随机选择数据点的随机梯度上升算法


    一次只用一个样本更新回归系数


3)优化后的随机梯度上升算法


 alpha在每次迭代时候都会调整(同时避免参数严格下降,类似模拟退火算法)


  随机选取样本来更新回归系数

算法的优缺点:

优点:

(1)适合一个得到分类概率的场景

(2)计算代价不高,容易理解和实现,训练速度快

(3)对于数据中的小噪声鲁棒性很好,并且不会受到轻微的多重共线性的特别影响?

缺点:

(1)容易欠拟合,分类精度不高

(2)数据特征缺失或者特征空间很大时表现效果不是很好?

(3)很难处理不平衡数据问题,处理非线性数据比较麻烦?

关于逻辑回归面试问题:https://www.cnblogs.com/ModifyRong/p/7739955.html

数学知识:凸函数的概念https://blog.csdn.net/u012513618/article/details/78392940

目录
相关文章
|
Java API Maven
【异常】Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlType
【异常】Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlType
466 0
|
机器学习/深度学习 算法
【机器学习系列】- 准确率、召回率、F1值的思考
关于如何评估算法,我们常通过准确率、召回率和F1值进行评估。
2555 0
【机器学习系列】- 准确率、召回率、F1值的思考
|
JSON NoSQL MongoDB
Compass
【6月更文挑战第8天】Compass
379 9
|
10月前
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
2024 0
|
11月前
|
Java 编译器
Java“无效的方法声明;需求返回类型”怎解决
要解决Java中的“无效的方法声明;需要返回类型”错误,需为方法指定正确的返回类型。检查方法签名,添加如`void`、`int`、`String`等类型,并确保方法体内正确使用`return`语句。这能帮助Java编译器理解和验证方法的行为。遵守这些规则,可以避免语法错误并确保程序正常运行。
540 0
|
数据采集 机器学习/深度学习 存储
性能调优指南:针对 DataLoader 的高级配置与优化
【8月更文第29天】在深度学习项目中,数据加载和预处理通常是瓶颈之一,特别是在处理大规模数据集时。PyTorch 的 `DataLoader` 提供了丰富的功能来加速这一过程,但默认设置往往不能满足所有场景下的最优性能。本文将介绍如何对 `DataLoader` 进行高级配置和优化,以提高数据加载速度,从而加快整体训练流程。
1820 0
|
JSON 缓存 前端开发
阿里开发手册 嵩山版-编程规约 (十一) 其它
这篇文章是《阿里开发手册 嵩山版》中关于前后端规约的部分,涵盖了前后端交互的API设计、数据格式、错误处理、安全性等关键编程规约,目的是确保前后端开发高效协同,提升软件交付质量。
 阿里开发手册 嵩山版-编程规约 (十一) 其它
|
域名解析 Kubernetes 网络协议
【K8S系列】深入解析DNS
【K8S系列】深入解析DNS
633 0
|
安全 Java 程序员
阿里开发手册 嵩山版-编程规约 (四)OOP规约-Java程序员必看知识点!!!
《阿里开发手册 嵩山版》的OOP规约部分强调了面向对象编程的最佳实践,包括正确使用静态方法、覆写方法的注解、可变参数的使用、接口的稳定性、equals和compareTo方法的使用、BigDecimal的正确比较、包装类与基本数据类型选择、POJO类的属性和方法设计等,以提升代码的质量和维护性。
|
机器学习/深度学习 存储 自然语言处理
逻辑回归的介绍和应用
**逻辑回归简介** 逻辑回归是一种分类模型,尽管名字含“回归”,实际上是用于二分类问题的。它简单易懂,计算高效,适用于许多领域,如医学、社会科学、市场营销等。优点是模型简单,易于实现,具有强解释性。然而,它易受多重共线性影响,可能欠拟合,分类精度有限,尤其对非线性问题和数据不平衡问题处理不佳。在实践中,逻辑回归常作为其他复杂算法的基线,如用于信用卡欺诈检测和点击率预测。通过调整和与其他技术结合,如GBDT,可以提升其性能。