二元Logistic回归
二元Logistic回归
在机器学习领域,二元Logistic回归是一种非常经典的分类模型,广泛用于解决具有两类标签的分类问题。Logistic回归通过逻辑函数(Sigmoid函数)将预测结果映射到概率值,并进行分类。
一、Logistic回归
Logistic回归是一种广泛应用于二分类问题的统计方法,它本质上是一种分类算法。Logistic回归的目标是预测样本属于某一类的概率值。其模型形式为:
p ( y = 1 ∣ X ) = σ ( θ T X ) = 1 1 + e − ( θ T X ) p(y=1|X) = \sigma(\theta^T X) = \frac{1}{1 + e^{-(\theta^T X)}} p(y=1∣X)=σ(θTX)=1+e−(θTX)1
其中, p ( y = 1 ∣ X ) p(y=1|X) p(y=1∣X) 表示给定输入特征 X 时,输出为1的概率, σ ( z ) \sigma(z) σ(z) 为 Sigmoid 函数:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1
在二元Logistic回归中, θ \theta θ 是需要学习的模型参数, X X X 是输入特征向量。
二、模型训练
1. 损失函数(Log-Loss)
为了训练Logistic回归模型,我们需要优化一个损失函数,通常采用对数损失函数(Log-Loss),其形式为:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_{\theta}(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_{\theta}(x^{(i)})) \right] J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
在逻辑回归模型中,假设函数为:
h θ ( x ( i ) ) = σ ( θ T x ( i ) ) h_{\theta}(x^{(i)}) = \sigma(\theta^T x^{(i)}) hθ(x(i))=σ(θTx(i))
其中, h θ ( x ( i ) ) h_{\theta}(x^{(i)}) hθ(x(i)) 是模型的预测结果,m是样本数量, y ( i ) y^{(i)} y(i) 是第i个样本的真实标签。
2. 梯度下降
我们使用梯度下降法来最小化损失函数,更新参数
θ : = θ − α ⋅ ∇ θ J ( θ ) \theta := \theta - \alpha \cdot \nabla_{\theta} J(\theta) θ:=θ−α⋅∇θJ(θ)
其中, α \alpha α 是学习率, ∇ θ J ( θ ) \nabla_{\theta} J(\theta) ∇θJ(θ) 是损失函数的梯度。
三、Python实现
1. 导入必要的库
首先,我们需要导入一些必要的库,例如NumPy用于数学运算,Matplotlib用于绘图等。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
2. 数据加载与预处理
测试样本
…共一百个样本
数据可视化
我们假设数据是从一个文本文件中读取,数据的格式为每行包含两个特征和一个标签。
def load_data(file_path):data = np.loadtxt(file_path)X = data[:, 0:2] # 特征y = data[:, 2] # 标签return X, y
3. Sigmoid函数
接下来,定义Sigmoid函数,它将线性模型的输出映射到概率值:
def sigmoid(z):return 1 / (1 + np.exp(-z))
4. 损失函数
然后,我们定义计算对数损失的函数:
def compute_loss(X, y, theta):m = len(y)h = sigmoid(X @ theta) # 预测值loss = -(1/m) * (y @ np.log(h + 1e-15) + (1 - y) @ np.log(1 - h + 1e-15)) # 防止log(0)return loss
5. 梯度下降
我们用梯度下降来训练模型:
def gradient_descent(X, y, theta, alpha, num_iters, tol=1e-5):m = len(y)loss_history = []for i in range(num_iters):h = sigmoid(X @ theta)gradient = (1/m) * X.T @ (h - y) # 计算梯度theta = theta - alpha * gradient # 更新参数loss = compute_loss(X, y, theta)loss_history.append(loss)# 如果损失变化小于tol,停止训练if i > 0 and abs(loss_history[-2] - loss_history[-1]) < tol:print(f"迭代{i}次后损失收敛,停止训练。")breakreturn theta, loss_history
6. 预测函数
我们根据模型的输出概率进行预测,设定阈值为0.5:
def predict(X, theta, threshold=0.5):prob = sigmoid(X @ theta)return (prob >= threshold).astype(int)
7. 主函数
最后,我们将这些步骤组合在一个主函数中,执行数据加载、训练、预测等操作:
if __name__ == "__main__":file_path = "data.txt" # 数据文件路径# 读取数据X, y = load_data(file_path)# 添加偏置项m = X.shape[0]X = np.hstack((np.ones((m, 1)), X))# 参数初始化theta = np.zeros(X.shape[1])# 超参数设置alpha = 0.1num_iters = 1000# 训练模型theta, loss_history = gradient_descent(X, y, theta, alpha, num_iters)print("训练完成,最优参数theta:", theta)# 预测y_pred = predict(X, theta)accuracy = np.mean(y_pred == y)print(f"训练集准确率:{accuracy*100:.2f}%")# 打印混淆矩阵cm = confusion_matrix(y, y_pred)print("混淆矩阵:")print(cm)
四、总结
二元Logistic回归是一种简单且强大的分类算法,广泛应用于许多领域,如医疗诊断、金融欺诈检测等。通过理解其背后的数学原理,并结合Python代码实现,我们可以快速上手并解决实际问题。希望本文能帮助你更好地理解Logistic回归,并能够在实际项目中应用。
相关文章:

二元Logistic回归
二元Logistic回归 在机器学习领域,二元Logistic回归是一种非常经典的分类模型,广泛用于解决具有两类标签的分类问题。Logistic回归通过逻辑函数(Sigmoid函数)将预测结果映射到概率值,并进行分类。 一、Logistic回归 …...
如何从容应对面试?
引言 简历通过了,终于获得这次来之不易面试机会的你,是不是又在思考以下问题:基本礼仪都包括哪些方面?如何在群面中打动面试官?有什么注意事项?在面试的过程中,我们不单单要懂得面试技巧&#…...
如何使用GIT管理项目代码
介绍 Git是目前世界上最流行甚至最好的开源分布式版本控制系统,不论是很小的项目还是很大的项目,它都能有效并且高效的处理项目版本管理,初衷是为了帮助管理linux内核代码而开发的一个开放源码的版本控制软件。 GIT常用分支名称 分支分…...

RHCE 练习三:架设一台 NFS 服务器
一、题目要求 1、开放 /nfs/shared 目录,供所有用户查询资料 2、开放 /nfs/upload 目录,为 192.168.xxx.0/24 网段主机可以上传目录,并将所有用户及所属的组映射为 nfs-upload,其 UID 和 GID 均为 210 3.将 /home/tom 目录仅共享给 192.16…...

【android bluetooth 协议分析 01】【HCI 层介绍 9】【ReadLocalSupportedCommands命令介绍】
1. HCI_Read_Local_Supported_Commands 命令介绍 1. 命令介绍(Description) HCI_Read_Local_Supported_Commands 是 HCI 层中非常重要的查询命令。它允许 Host(如 Android 系统中的 Bluetooth stack)获取 Controller(…...
stm32实战项目:无刷驱动
目录 系统时钟配置 PWM模块初始化 ADC模块配置 霍尔接口配置 速度环定时器 换相逻辑实现 主控制循环 系统时钟配置 启用72MHz主频:RCC_Configuration()设置PLL外设时钟使能:TIM1/ADC/GPIO时钟 #include "stm32f10x.h"void RCC_Configu…...

python打卡训练营打卡记录day30
一、导入官方库 我们复盘下学习python的逻辑,所谓学习python就是学习python常见的基础语法学习你所处理任务需要用到的第三方库。 1.1标准导入:导入整个库 这是最基本也是最常见的导入方式,直接使用import语句。 # 方式1:导入整…...

2025年- H33-Lc141 --148. 排序链表(快慢指针,快指针先出发一步)--Java版
1.题目描述 2.思路 时间空间复杂度分别为 O(nlogn) 和 O(1),根据时间复杂度想到二分法,从而联想到归并排序;对数组做归并排序的空间复杂度为 O(n),分别由新开辟数组 O(n) 和递归函数调用 O(logn) 组成,而根据链表特性…...

【prometheus+Grafana篇】基于Prometheus+Grafana实现Oracle数据库的监控与可视化
💫《博主主页》: 🔎 CSDN主页 🔎 IF Club社区主页 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了…...
板凳-------Mysql cookbook学习 (四)
综合对比与选择建议 维度 PHP Java Python Ruby Perl 学习门槛 低(适合新手) 高(语法复杂) 低(语法简洁) 中(需理解 Rails 理念) 中(特殊语法…...
【D1,2】 贪心算法刷题
文章目录 不同路径 II整数拆分 不同路径 II 初始化的时候不能整列初始化为1,因为如果有障碍物,后面的都不能到达 也不能整列初始化为0,因为状态转移的时候第一行第一列都没有检查,因此不能部分初始化 整数拆分 需要考虑几种情况…...

算法题(150):拼数
审题: 本题需要我们将数组中的数据经过排序,使得他们拼接后得到的数是所有拼接方案中最大的 思路: 方法一:排序贪心 贪心策略1:直接排序 如果我们直接按照数组数据的字典序进行排序,会导致部分情况出错 eg&…...
Denoising Score Matching with Langevin Dynamics
在自然图像等复杂数据集中,真实数据往往集中分布在一个低维流形上,概率密度函数的梯度(即得分函数)难以定义与估计。为缓解该问题,SMLD 提出使用不同强度的高斯噪声对数据进行扰动,扰动后的数据不再集中于低…...

Docker构建 Dify 应用定时任务助手
概述 Dify 定时任务管理工具是一个基于 GitHub Actions 的自动化解决方案,用于实现 Dify Workflow 的定时执行和状态监控。无需再为缺乏定时任务支持而感到困扰,本工具可以帮助设置自动执行任务并获取实时通知,优化你的工作效率。 注意&…...

mongodb管理工具的使用
环境: 远程服务器的操作系统:centOS stream 9; mongoDB version:8.0; 本地电脑 navicat premium 17.2 ; 宝塔上安装了mongoDB 目的:通过本地的navicat链接mongoDB,如何打通链接,分2步: 第一步:宝塔-&…...

第2篇 水滴穿透:IGBT模块的绝对防御体系
引言:从《三体》水滴到功率模块的哲学思考 科幻映照现实:三体探测器"水滴"的绝对光滑表面 → IGBT模块的可靠性设计哲学行业现状痛点:2023年OEM质量报告显示,电控系统23%的故障源自功率模块技术演进悖论:开关频率提升与可靠性保障的永恒博弈 一、基础理论:IGBT…...
LVGL(lv_dropdown下拉列表控件)
文章目录 🔧 一、基本概念🚀 二、创建一个 Dropdown🧰 三、常用函数1. 设置选项2. 获取选项3. 设置当前选中项4. 获取当前选中项索引5. 获取当前选中项文本🎨 四、样式与模式设置方向(最多显示多少项)设置显示模式设置提示文本📞 五、事件回调🧪 六、使用示例📌…...
2.微服务-配置
引入springcloud的pom配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent> <dependencyManagemen…...
python实现pdf转图片(针对每一页)
from pdf2image import convert_from_path import ospdf_file rC:\Users\\Desktop\拆分\产权证.pdf poppler_path rC:\poppler-24.08.0\Library\bin # 这里改成你自己的路径output_dir rC:\Users\\Desktop\拆分\output_images os.makedirs(output_dir, exist_okTrue)image…...
C语言练手磨时间
167. 两数之和 II - 输入有序数组 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <…...
数字图像处理——图像压缩
背景 图像压缩是一种减少图像文件大小的技术,旨在在保持视觉质量的同时降低存储和传输成本。随着数字图像的广泛应用,图像压缩在多个领域如互联网、移动通信、医学影像和卫星图像处理中变得至关重要。 技术总览 当下图像压缩JPEG几乎一统天下ÿ…...

验证器回调中value值没有数据
复杂的响应式,导致回调中value值没有数据,最终还是通过手动判断获取值处理 原理没有搞清楚,为什么回调中value没有值背景:动态增加了form表单的字段,通过for循环处理的。对每个新增的字段还要添加字段验证其。就出现了…...

Python | 需求预测模型
目录 需求预测 1.方法选择 2.颗粒度选择 3.在医药行业的应用 预测模型 1.模型对比 2.Prophet 3.Holt-Winters 需求预测 1.方法选择 方法 适用范围分类移动平均法中小企业、SKU较少的卖家低成本预测方案Excel趋势线预测中小企业、SKU较少的卖家低成本预测方案季节性系数法中小企…...

双指针算法:原理与应用详解
文章目录 一、什么是双指针算法二、双指针算法的适用场景三、双指针的三种常见形式1. 同向移动指针2. 相向移动指针3. 分离指针 四、总结 一、什么是双指针算法 双指针算法(Two Pointers Technique)是一种在数组或链表等线性数据结构中常用的高效算法技…...

打造灵感投掷器:我的「IdeaDice」开发记录
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起源:我只是想“摇”出点灵感 有时候面对写作或者做产品设计,我会卡在「不知道从哪开始…...

2025ICPC邀请赛南昌游记
滚榜时候队伍照片放的人家的闹麻了,手机举了半天 。 最后银牌700小几十罚时,rank60多点。 参赛体验还行,队长是福建人,说感觉这个热度是主场作战哈哈哈哈。空调制冷确实不太行吧。 9s过A是啥,没见过,虽然…...

python重庆旅游系统-旅游攻略
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...

MySQL企业版免费开启,强先体验
近期Oracle突然宣布,MySQL企业版面向开发者免费开放下载,这一消息瞬间引爆DBA圈。作为数据库领域的“顶配车型”,企业版长期因高昂授权费让中小团队望而却步,如今免费开放无异于“劳斯莱斯开进菜市场”。 本文将深度拆解企业版的…...
从纸质契约到智能契约:AI如何改写信任规则与商业效率?——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命
一、传统合同的“低效困境”:耗时、昂贵、风险失控 近年来,全球商业环境加速向数字化转型,但合同管理却成为企业效率的“阿喀琉斯之踵”。据国际商会(International Chamber of Commerce)数据显示,全球企业…...
常见的 HTTP 接口(请求方法)
一:GET 作用:从服务器获取资源(查询数据)。特点: 请求参数通过 URL 传递(如https://api.example.com/users?id123),参数会显示在地址栏中。不修改服务器数据,属于幂等操…...