逻辑回归模型-逻辑回归算法原理-逻辑回归代码与实现-笔记整合

news2024/10/7 16:20:53

通过一段时间的学习,总算把逻辑回归模型弄清楚了

《老饼讲解-机器学习》www.bbbdata.com中是讲得最清晰的,结合其它资料,整理一个完整的笔记如下,希望能帮助像我这样入门的新人,快速理解逻辑回归算法原理和逻辑回归实现代码。


目录

一、什么是逻辑回归模型

1.1 什么是逻辑回归模型

1.2 线性回归与逻辑回归的区别与关系

1.3 逻辑回归公式

二、逻辑回归模型原理

逻辑回归模型算法原理

三、逻辑回归损失函数与逻辑回归训练

3.1 逻辑回归损失函数

3.2 逻辑回归模型训练

3.3 逻辑回归梯度公式

四、逻辑回归实现python代码

4.1 python实现逻辑回归(调用sklearn)

4.2 python实现逻辑回归(自己实现)

4.3 逻辑回归模型评估


一、什么是逻辑回归模型

1.1 什么是逻辑回归模型

逻辑回归模型(Logistic Regression)包含了二元逻辑回归和多元逻辑回归,二元逻辑回归用来解决二分类问题,多元逻辑回归用来解决多分类问题。多元逻辑回归属于二元逻辑回归的拓展,但二元逻辑回归用得最多,学习应先从二元逻辑回归开始。多元逻辑回归在需要时可以选择性学习。一般所说的逻辑回归都是指二元逻辑回归,本文的逻辑回归也是指二元逻辑回归。

1.2 线性回归与逻辑回归的区别与关系

线性回归是用做数值预测的,属于回归模型。而逻辑回归是用来做类别预测的,属于模式识别模型。它们的共同之处是,X和y都是线性关系。可以说,逻辑回归是“用于做类别预测”的线性回归。

1.3 逻辑回归公式

逻辑回归的公式包括三部分:

(1) 逻辑回归模型公式:逻辑回归模型公式是模型用来计算模型预测结果的公式

(2) 逻辑回归损失函数公式:逻辑回归损失函数公式是用来训练模型的评估指标

(3) 逻辑回归梯度公式:逻辑回归梯度公式是训练模型时用来调整模型参数的公式

下面详细梳理逻辑回归模型原理,并理解上面三条公式,也就基本弄清楚逻辑回归算法了。

二、逻辑回归模型原理

2.1 逻辑回归模型算法原理

线性回归拟合的是数值,并不符合二分类问题预测类别的需求,但数值与类别也是有关联的,例如,天色越黑,下雨概率就越大,即值越大,属于某类别的概率也越大,值与概率之间可以互转。 在数学里通常用函数Sigmoid函数将数值转化为概率:

\textbf{Sigmoid}(x) = \dfrac{1}{1+e^{-x}},sigmoid函数的输出区间为(0,1),它与概率的范围是一致的,

2.2 逻辑回归模型公式

根据逻辑回归模型原理,所以,很自然地,逻辑回归模型公式为:

三、逻辑回归损失函数与逻辑回归训练

3.1 逻辑回归损失函数

逻辑回归的损失函数为交叉熵损失函数:

逻辑回归模型中的w,b参数需要通过数据训练来得到,训练的标准就是使以上的交叉熵损失函数值最小,它的意义是模型预测正确概率最大化,可以通过最大似然法推导出来

具体可参考文章《逻辑回归损失函数推导过程》

3.2 逻辑回归模型训练

训练逻辑回归模型可以使用梯度下降法,梯度下降法通过将损失函数每次往负梯度方向调整来找到局部最优解。梯度下降法训练逻辑回归算法流程图如下:

3.3 逻辑回归梯度公式

逻辑回归模型训练过程需要使用到逻辑回归损失函数的梯度公式,逻辑回归梯度公式如下:

可以结合下面的代码来理解公式

四、逻辑回归实现python代码

4.1 python实现逻辑回归(调用sklearn)

python实现逻辑回归一般通过sklearn包来完成,具体示例代码如下:

"""
本代码展示在python中调用sklearn来训练逻辑回归模型
本代码来自《老饼讲解-机器学习》www.bbbdata.com
"""
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
import numpy as np
#----数据加载------
data = load_breast_cancer()                  # 加载breast_cancer数据
X    = data.data[:,4:8]                      # 作为示例,只使用4个变量来建模
y    = data.target                           # 类别标签

#-----训练模型--------------------
clf = LogisticRegression(random_state=0)     # 初始化逻辑回归模型         
clf.fit(X,y)                                 # 训练逻辑回归模型
#------打印结果------------------------
print("模型参数:"+str(clf.coef_))           # 打印模型系数
print("模型阈值:"+str(clf.intercept_))      # 打印模型阈值

运行后输出结果如下:
 模型参数:[[-0.53024026 -3.48636783 -6.89132654 -4.37965412]]
模型阈值:[1.80112869]          

4.2 python实现逻辑回归(自己实现)

也可以自己通过算法原理来实现逻辑回归的训练,结合梯度下降算法与逻辑回归梯度公式就可以,具体示例代码如下:

"""
本代码展示梯度下降求解逻辑回归的python代码实现
本代码来自《老饼讲解-机器学习》www.bbbdata.com
"""
from sklearn.datasets import load_breast_cancer
import numpy as np
#----数据加载------
data = load_breast_cancer()                 # 加载breast_cancer数据
X    = data.data[:,4:8]                     # 作为示例,只使用4个变量来建模
y    = data.target                          # 类别标签
xt = np.insert(X, X.shape[1], 1, axis=1)    # 给X增加一列,作为阈值

#-----梯度下降求解w---------------
np.random.seed(888)                         # 设定随机种子,以确保每次程序结果一次
w = np.random.rand(xt.shape[1])             # 初始化权重
for i in range(10000):                      # 逐步训练权重
    p = 1/(1+np.exp(-xt@w))                 # 计算p
    w = w - 0.01*(xt.T@(p-y))               # 往负梯度方向更新w
p = 1/(1+np.exp(-xt@w))                     # 最终的预测结果
print("参数w:"+str(w))                     # 打印参数

运行后输出结果如下:
 参数w:[  7.16215375  14.98708501 -16.84689114 -73.92486786   3.38331608] 

4.3 逻辑回归模型评估

训练完成后,将参数代回到逻辑回归模型,就是最用终来预测所使用的公式:


整理不易,点赞收藏!

相关链接:《sklearn逻辑回归参数详解》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1601057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录训练营Day 24|Python|Leetcode|93.复原IP地址, 78.子集,90.子集II

93.复原IP地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 &q…

git clone遇到报错“SSL certificate problem: self signed certificate”

在git clone的时候发现遇到了一个问题: cristDESKTOP-JKRNKSH MINGW64 ~/Desktop $ git clone -b dev https://xxx.xxx.xxx.xxx:3001/crist/AVM_V9M.git Cloning into AVM_V9M... fatal: unable to access https://xxx.xxx.xxx.xxx3001/crist/AVM_V9M.git/: SSL ce…

openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置

文章目录 openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置264.1 恢复BIOS出厂设置264.2 修改相关BIOS设置264.3 重启操作系统 openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置 本章节主要介绍openGauss数据库内核基于鲲鹏服务…

自己的事情自己做:使用 Python Turtle 绘制 Python Logo

以下代码中,将向你展示一个有趣的程序,如何使用 Python Turtle 中绘制 Python Logo。Python 翻译成汉语是蟒蛇的意思,Python 的 Logo 也是两条缠绕在一起的蟒蛇。 import turtlepen turtle.Turtle() turtle.bgcolor("black") pe…

Spring基础篇-快速面试笔记(速成版)

文章目录 1. Spring概述2. 控制反转(IoC)2.1 Spring声明Bean对象的方式2.2 Spring的Bean容器:BeanFactory2.3 Spring的Bean生命周期2.4 Spring的Bean的注入方式 3. Spring的事件监听器(Event Listener)3.1 Spring内置事…

开源项目|使用go语言搭建高效的环信 IM Rest接口(附源码)

项目背景 环信 Server SDK 是对环信 IM REST API 的封装, 可以节省服务器端开发者对接环信 API 的时间,只需要配置自己的 App Key 相关信息即可使用。 环信目前提供java和PHP版本的Server SDK,此项目使用go语言对环信 IM REST API 进行封装…

stm32实现hid鼠标

启动CubelMX 选择芯片(直接输入stm32f103zet6) 设置时钟 如下图 usb设置 配置usb设备 调试端口设置 配置时钟 项目输出设置 打开工程(后记:此工程含有中文不能编译通过) 配置项目 配置调试器 编译无法通过 删除路径中的中文,以及…

facenet人脸检测+人脸识别+性别识别+表情识别+年龄识别的C++部署

文章目录 一. 人脸检测二.人脸识别facenet2.1 训练人脸识别模型2.2 导出ONNX2.3 测试 三.人脸属性(性别、年龄、表情、是否戴口罩)3.1 训练3.2 导出ONNX3.3 测试 四. 集成应用五、Jetson 部署5.1 NX5.2 NANO 一. 人脸检测 代码位置:1.detect …

Java代码执行顺序

Java代码的执行顺序 后面大量的涉及到了static,我曾经写过一篇static的博客,可以看一眼 我上次写了static的加载顺序,没看过的可以进去看一眼 JavaSE:static关键字详解 ---------------------分割线-------------------------…

✌粤嵌—2024/4/3—合并K个升序链表

代码实现: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…

安装指定版本的ant-design-vue和指定版本的@ant-design/icons-vue 图标组件包

前言: 最近在完成公司的项目时,为了兼容其他的版本,需要安装指定版本的ant-design-vue和ant-design/icons-vue 图标组件包,安装成功之后,分享如下: 安装命令: ant-design-vue: 不…

[移动通讯]【无线感知-P1】[从菲涅尔区模型到CSI模型-2]

前言: 前面我们学习了: 1 只 基于机器学习做无线感知问题:泛化性能差,可解释性差 无法解释为什么能做好,什么时候能做好,什么时候做不好. 可行性 到 可用性,泛化性问题,具体深入的研究。 2 无线感知的理论…

解决npm run dev跑项目,发现node版本不匹配,怎么跑起来?【已解决】

首先问题点就是我们npm run dev 运行项目的时候发现出错,跑不起来,类型下面这种 这里的出错的原因在于我们的node版本跟项目的版本不匹配 解决办法 我这里的问题是我的版本是node14的,然后项目需要node20的,执行下面的就可以正…

【面试八股总结】排序算法(二)

参考资料 :阿秀 一、堆排序 堆排序基本思想是先把数组构造成一个大顶堆(父亲节点大于其子节点),然后把堆顶(数组最大值,数组第一个元素)和数组最后一个元素交换,这样就把最大值放到了数组最后边。把数组长度n-1,再进行构造堆把剩…

HackMyVM-Connection

目录 信息收集 arp nmap WEB web信息收集 dirsearch smbclient put shell 提权 系统信息收集 suid gdb提权 信息收集 arp ┌─[rootparrot]─[~/HackMyVM] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.115 S…

【PostgreSQL里insert on conflict do操作时的冲突报错分析】

最近在巡检PostgreSQL的数据库的时候,发现部分数据库里存在大量的如下报错 ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time HINT: Ensure that no rows proposed for insertion within the same command have duplicate constrained val…

LRTimelapse for Mac:专业延时摄影视频制作利器

LRTimelapse for Mac是一款专为Mac用户设计的延时摄影视频制作软件,它以其出色的性能和丰富的功能,成为摄影爱好者和专业摄影师的得力助手。 LRTimelapse for Mac v6.5.4中文激活版下载 这款软件提供了直观易用的界面,用户可以轻松上手&#…

第十五届蓝桥杯题解-好数

题目大意&#xff1a;一个数的低位为奇数&#xff0c;次低位为偶数&#xff0c;以此类推的数成为好数&#xff0c;例如&#xff1a;1&#xff0c;3&#xff0c;5&#xff0c;7&#xff0c;9 给定一个n&#xff0c;求1-n所有好数的个数&#xff0c;n<1e7 思路&#xff1a;一…

5_vscode+valgrind+gdb调试程序

需求 项目程序, 读取串口数据, 出现程序崩溃问题valgrind 可以调试定位内存问题: 内存泄漏,非法地址访问,越界访问等内存问题vscode gdb 可视化调试效果, 比命令行简单快捷很多期望使用vscode valgrind gdb 调试程序内存异常, 崩溃退出的问题 环境准备 sudo apt install v…

windows Webrtc +VS2019 (M124)下载编译以及调通测试demo

下载depot tools 设置梯子 git config --global http.proxy 127.0.0.1:10000 git config --global https.proxy 127.0.0.1:10000 下载 $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 设置depot_tools目录为环境变量 下载webrtc # 设置系统代…