二元Logistic回归

news2025/5/20 6:43:07

二元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+ez1

在二元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=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(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}次后损失收敛,停止训练。")
            break
    return 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.1
    num_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回归,并能够在实际项目中应用。

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

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

相关文章

RHCE 练习三:架设一台 NFS 服务器

一、题目要求 1、开放 /nfs/shared 目录&#xff0c;供所有用户查询资料 2、开放 /nfs/upload 目录&#xff0c;为 192.168.xxx.0/24 网段主机可以上传目录&#xff0c;并将所有用户及所属的组映射为 nfs-upload,其 UID 和 GID 均为 210 3.将 /home/tom 目录仅共享给 192.16…

【android bluetooth 协议分析 01】【HCI 层介绍 9】【ReadLocalSupportedCommands命令介绍】

1. HCI_Read_Local_Supported_Commands 命令介绍 1. 命令介绍&#xff08;Description&#xff09; HCI_Read_Local_Supported_Commands 是 HCI 层中非常重要的查询命令。它允许 Host&#xff08;如 Android 系统中的 Bluetooth stack&#xff09;获取 Controller&#xff08;…

python打卡训练营打卡记录day30

一、导入官方库 我们复盘下学习python的逻辑&#xff0c;所谓学习python就是学习python常见的基础语法学习你所处理任务需要用到的第三方库。 1.1标准导入&#xff1a;导入整个库 这是最基本也是最常见的导入方式&#xff0c;直接使用import语句。 # 方式1&#xff1a;导入整…

2025年- H33-Lc141 --148. 排序链表(快慢指针,快指针先出发一步)--Java版

1.题目描述 2.思路 时间空间复杂度分别为 O(nlogn) 和 O(1)&#xff0c;根据时间复杂度想到二分法&#xff0c;从而联想到归并排序&#xff1b;对数组做归并排序的空间复杂度为 O(n)&#xff0c;分别由新开辟数组 O(n) 和递归函数调用 O(logn) 组成&#xff0c;而根据链表特性…

【prometheus+Grafana篇】基于Prometheus+Grafana实现Oracle数据库的监控与可视化

&#x1f4ab;《博主主页》&#xff1a; &#x1f50e; CSDN主页 &#x1f50e; IF Club社区主页 &#x1f525;《擅长领域》&#xff1a;擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(MongoDB)有了…

算法题(150):拼数

审题&#xff1a; 本题需要我们将数组中的数据经过排序&#xff0c;使得他们拼接后得到的数是所有拼接方案中最大的 思路&#xff1a; 方法一&#xff1a;排序贪心 贪心策略1&#xff1a;直接排序 如果我们直接按照数组数据的字典序进行排序&#xff0c;会导致部分情况出错 eg&…

Docker构建 Dify 应用定时任务助手

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

mongodb管理工具的使用

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

第2篇 水滴穿透:IGBT模块的绝对防御体系

引言:从《三体》水滴到功率模块的哲学思考 科幻映照现实:三体探测器"水滴"的绝对光滑表面 → IGBT模块的可靠性设计哲学行业现状痛点:2023年OEM质量报告显示,电控系统23%的故障源自功率模块技术演进悖论:开关频率提升与可靠性保障的永恒博弈 一、基础理论:IGBT…

数字图像处理——图像压缩

背景 图像压缩是一种减少图像文件大小的技术&#xff0c;旨在在保持视觉质量的同时降低存储和传输成本。随着数字图像的广泛应用&#xff0c;图像压缩在多个领域如互联网、移动通信、医学影像和卫星图像处理中变得至关重要。 技术总览 当下图像压缩JPEG几乎一统天下&#xff…

验证器回调中value值没有数据

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

Python | 需求预测模型

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

双指针算法:原理与应用详解

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

打造灵感投掷器:我的「IdeaDice」开发记录

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

2025ICPC邀请赛南昌游记

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

python重庆旅游系统-旅游攻略

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

MySQL企业版免费开启,强先体验

近期Oracle突然宣布&#xff0c;MySQL企业版面向开发者免费开放下载&#xff0c;这一消息瞬间引爆DBA圈。作为数据库领域的“顶配车型”&#xff0c;企业版长期因高昂授权费让中小团队望而却步&#xff0c;如今免费开放无异于“劳斯莱斯开进菜市场”。 本文将深度拆解企业版的…

Qt Widgets模块功能详细说明,基本控件:QCheckBox(三)

一、基本控件&#xff08;Widgets&#xff09; Qt 提供了丰富的基本控件&#xff0c;如按钮、标签、文本框、复选框、单选按钮、列表框、组合框、菜单、工具栏等。 1、QCheckBox 1.1、概述 (用途、状态、继承关系) QCheckBox 是 Qt 框架中的复选框控件&#xff0c;用于表示二…

第四天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 很抱歉的说一下&#xff0c;我昨天看白色巨塔电视剧&#xff0c;看的入迷了&#xff0c;同时也看出一些道理&#xff0c;学到东西&#xff1b; 但是把昨天的写事情给忘记了&#xff0c;今天…

WPS中代码段的识别方法及JS宏实现

在WPS中&#xff0c;文档的基本结构可以通过对象模型来理解&#xff1a; &#xff08;1&#xff09;Document对象&#xff1a;表示整个文档 &#xff08;2&#xff09;Range对象&#xff1a;表示文档中的一段连续区域&#xff0c;可以是一个字符、一个句子或整个文档 &#…