机器学习 ---逻辑回归
逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器。由于其训练后的参数有较强的可解释性,在诸多领域中,逻辑回归通常用作 baseline 模型,以方便后期更好的挖掘业务相关信息或提升模型性能
一、逻辑回归的核心思想
1. 线性回归回顾
在理解逻辑回归之前,先简单回顾一下线性回归。线性回归试图找到一个线性函数,来拟合数据的特征与目标值之间的关系。假设我们有n个特征,线性回归模型可以表示为:
,其中,
是预测值,
是模型的参数。
2. 逻辑回归的转变
逻辑回归的目标是进行分类,而不是预测连续值。对于二分类问题,我们希望模型能够输出样本属于某个类别的概率。为了实现这一点,逻辑回归引入了 sigmoid 函数,将线性回归的输出映射到[0,1]区间。
sigmoid 函数的定义为:
其中,z是线性回归的输出,即 。
经过 sigmoid 函数的变换后,我们得到样本属于正类(通常标记为 1)的概率
那么样本属于负类(通常标记为 0)的概率为:
二、逻辑回归的损失函数
1. 损失函数的定义
损失函数用于衡量模型预测值与真实值之间的差异。对于逻辑回归,常用的损失函数是对数损失函数(Log Loss)。
单个样本的对数损失函数为:,其中,
是真实标签(0 或 1),
是模型预测的概率。
对于个样本的数据集,总的损失函数(也称为代价函数)为:
,这里,
和
分别表示第i个样本的真实标签和预测概率。
2. 损失函数的解释
对数损失函数的设计基于极大似然估计的思想。我们希望模型预测的概率分布尽可能接近真实的标签分布。当真实标签时,对数损失函数中的
项促使模型提高预测概率
(减小损失函数的值);当
时,
项促使模型降低预测概率
(减小损失函数的值)。通过最小化这个损失函数,我们可以找到最优的模型参数
。
三、梯度下降求解逻辑回归
1.什么是梯度
梯度:梯度的本意是一个向量,由函数对每个参数的偏导组成,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。

2. 梯度下降的原理
梯度下降是一种常用的优化算法,用于寻找函数的最小值。其基本思想是沿着函数梯度的反方向,逐步更新参数,使得函数值不断减小。
对于逻辑回归的损失函数,其梯度为:
其中,表示第
个样本的第
个特征值。
3. 梯度下降的迭代过程
在梯度下降算法中,我们通过不断迭代更新参数:
,其中,
是学习率,控制每次参数更新的步长,是 0 到 1 之间的值,是个超参数,需要我们自己来确定大小。
学习率的选择非常重要,如果学习率过小,算法收敛速度会很慢;如果学习率过大,可能会导致算法无法收敛,甚至发散。在实际应用中,通常需要通过实验来选择合适的学习率。
4. 随机梯度下降和批量梯度下降
- 批量梯度下降(Batch Gradient Descent,BGD):每次迭代都使用整个数据集来计算梯度,计算准确,但当数据集很大时,计算量非常大,效率较低。
- 随机梯度下降(Stochastic Gradient Descent,SGD):每次迭代只使用一个样本数据来计算梯度,计算速度快,但梯度更新方向可能不稳定,导致收敛过程有波动。
- 小批量梯度下降(Mini - Batch Gradient Descent,MBGD):结合了 BGD 和 SGD 的优点,每次迭代使用一小部分样本数据(称为一个 mini - batch)来计算梯度,既保证了计算效率,又能使梯度更新相对稳定。
5.梯度下降算法流程
- 随机初始参数;
- 确定学习率;
- 求出损失函数对参数梯度;
- 按照公式更新参数;
- 重复 3 、 4 直到满足终止条件(如:损失函数或参数更新变化值小于某个阈值,或者训练次数达到设定阈值)。
四、逻辑回归的动手实现
下面我们使用 Python 和 NumPy 库来手动实现逻辑回归算法,并在一个简单的数据集上进行训练和测试。
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 生成一个包含1000个样本,20个特征的二分类数据集
X, y = make_classification(n_samples = 1000, n_features = 20, n_redundant = 0, random_state = 42)
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)def sigmoid(z):return 1 / (1 + np.exp(-z))class LogisticRegression:def __init__(self, learning_rate = 0.01, num_iterations = 1000):self.learning_rate = learning_rateself.num_iterations = num_iterationsself.theta = Nonedef fit(self, X, y):m, n = X.shape# 初始化参数thetaself.theta = np.zeros(n)for _ in range(self.num_iterations):z = np.dot(X, self.theta)h = sigmoid(z)gradient = np.dot(X.T, (h - y)) / mself.theta -= self.learning_rate * gradientdef predict(self, X):z = np.dot(X, self.theta)h = sigmoid(z)return np.where(h >= 0.5, 1, 0)# 创建逻辑回归模型实例
model = LogisticRegression(learning_rate = 0.01, num_iterations = 1000)
# 训练模型
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
通过以上步骤,我们成功地手动实现了一个简单的逻辑回归模型,并在生成的数据集上进行了训练和评估。在实际应用中,还可以进一步优化模型,比如通过交叉验证来更准确地选择学习率,使用 L1 或 L2 正则化防止过拟合,从而让模型在复杂的实际场景中表现得更加出色。
五、总结
逻辑回归是机器学习里经典的二分类分类器,因参数可解释性强常作 baseline 模型。它的核心思想是引入 sigmoid 函数,将线性回归输出映射到 [0,1] 区间,以得出样本分属正、负类的概率。常用对数损失函数衡量预测与真实值差异,基于极大似然估计思想找最优参数。通过梯度下降求解,沿梯度反方向更新参数,有批量、随机、小批量梯度下降等几种方式。
本文使用用 Python 和 NumPy 库等手动实现了一个简单的逻辑回归,在实际应用中还可以通过交叉验证、正则化等方法进行优化。
此外,在实际应用中,逻辑回归不仅可以用于简单的二分类问题,还能够通过扩展(如多分类逻辑回归、有序逻辑回归等)来处理更为复杂的分类任务。此外,逻辑回归也是许多其他复杂模型的基石,例如神经网络中的激活函数就借鉴了 sigmoid 函数的思想。
希望这篇博客能帮助你全面深入地理解逻辑回归。如果你在实际应用中遇到了相关问题,或者对某些内容还有疑问,欢迎在评论区留言交流。你也可以分享自己在使用朴素贝叶斯算法过程中的经验和心得,让更多的人受益。
相关文章:
机器学习 ---逻辑回归
逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器。由于其训练后的参数有较强的可解释性,在诸多领域中,逻辑回归通常用作 baseline 模型,以方便后期更好的挖掘业务相关信息或提…...
拟合损失函数
文章目录 拟合损失函数一、线性拟合1.1 介绍1.2 代码可视化1.2.1 生成示例数据1.2.2 损失函数1.2.3 绘制三维图像1.2.4 绘制等高线1.2.5 损失函数关于斜率的函数 二、 多变量拟合2.1 介绍2.2 代码可视化2.2.1 生成示例数据2.2.2 损失函数2.2.3 绘制等高线 三、 多项式拟合3.1 介…...
【C++基础】多线程并发场景下的同步方法
如果在多线程程序中对全局变量的访问没有进行适当的同步控制(例如使用互斥锁、原子变量等),会导致多个线程同时访问和修改全局变量时发生竞态条件(race condition)。这种竞态条件可能会导致一系列不确定和严重的后果。…...
Linux常见问题解决方法--1
常见安全工具、设备 工具 端口及漏洞扫描:Namp、Masscan 抓包:Wireshark,Burpsuite、Fiddler、HttpCanary Web自动化安全扫描:Nessus、Awvs、Appscan、Xray 信息收集:Oneforall、hole 漏洞利用:MSF、…...
银行卡三要素验证接口:方便快捷地实现银行卡核验功能
银行卡三要素验证API:防止欺诈交易的有力武器 随着互联网的发展,电子支付方式也越来越普及。在支付过程中,银行卡是最常用的支付工具之一。然而,在一些支付场景中,需要对用户的银行卡信息进行验证,以确保支…...
利用JSON数据类型优化关系型数据库设计
利用JSON数据类型优化关系型数据库设计 前言 在关系型数据库中,传统的结构化存储方式要求预先定义好所有的列及其数据类型。 然而,随着业务的发展,这种设计可能会显得不够灵活,尤其是在需要扩展单个列的描述功能时。 JSON数据…...
极简壁纸js逆向
首先抓包,翻页可以看到数据储存在该包 可以看到随着页面变化,只有current在变化 而且载荷都没有加密,看来不用js逆向了 爬取代码 import os import asyncio import aiohttp import jsonheaders {"accept": "application/j…...
Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比
前言 在现代微服务架构和分布式系统中,消息队列作为解耦组件,承担着重要的职责。它不仅提供了异步处理的能力,还能确保系统的高可用性、容错性和扩展性。常见的消息队列包括 Kafka、RabbitMQ 和 RocketMQ,其中 Kafka 因其高吞吐量…...
JAVA 接口、抽象类的关系和用处 详细解析
接口 - Java教程 - 廖雪峰的官方网站 一个 抽象类 如果实现了一个接口,可以只选择实现接口中的 部分方法(所有的方法都要有,可以一部分已经写具体,另一部分继续保留抽象),原因在于: 抽象类本身…...
数据结构与算法再探(六)动态规划
目录 动态规划 (Dynamic Programming, DP) 动态规划的基本思想 动态规划的核心概念 动态规划的实现步骤 动态规划实例 1、爬楼梯 c 递归(超时)需要使用记忆化递归 循环 2、打家劫舍 3、最小路径和 4、完全平方数 5、最长公共子序列 6、0-1背…...
使用PC版本剪映制作照片MV
目录 制作MV模板时长调整拖动边缘缩短法分割删除法变速法整体调整法 制作MV 导入音乐 导入歌词 点击歌词 和片头可以修改字体: 还可以给字幕添加动画效果: 导入照片,自动创建照片轨: 修改片头字幕:增加两条字幕轨&…...
Python爬虫获取custom-1688自定义API操作接口
一、引言 在电子商务领域,1688作为国内领先的B2B平台,提供了丰富的API接口,允许开发者获取商品信息、店铺信息等。其中,custom接口允许开发者进行自定义操作,获取特定的数据。本文将详细介绍如何使用Python调用1688的…...
Autogen_core: Reflection
目录 代码代码逻辑解释:数据类定义:CoderAgent 类:ReviewerAgent 类:主程序: 完成的功能: 代码 from dataclasses import dataclassdataclass class CodeWritingTask:task: strdataclass class CodeWritin…...
GitHub 仓库的 Archived 功能详解:中英双语
GitHub 仓库的 Archived 功能详解 一、什么是 GitHub 仓库的 “Archived” 功能? 在 GitHub 上,“Archived” 是一个专门用于标记仓库状态的功能。当仓库被归档后,它变为只读模式,所有的功能如提交代码、创建 issue 和 pull req…...
.NET Core缓存
目录 缓存的概念 客户端响应缓存 cache-control 服务器端响应缓存 内存缓存(In-memory cache) 用法 GetOrCreateAsync 缓存过期时间策略 缓存的过期时间 解决方法: 两种过期时间策略: 绝对过期时间 滑动过期时间 两…...
Ubuntu 20.04安装Protocol Buffers 2.5.0
个人博客地址:Ubuntu 20.04安装Protocol Buffers 2.5.0 | 一张假钞的真实世界 安装过程 Protocol Buffers 2.5.0源码下载:https://github.com/protocolbuffers/protobuf/tree/v2.5.0。下载并解压。 将autogen.sh文件中以下内容: curl htt…...
【贪心算法】洛谷P1090 合并果子 / [USACO06NOV] Fence Repair G
2025 - 01 - 21 - 第 45 篇 【洛谷】贪心算法题单 -【 贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G 【贪心算法】 文章目录 洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06…...
14.模型,纹理,着色器
模型、纹理和着色器是计算机图形学中的三个核心概念,用通俗易懂的方式来解释: 1. 模型:3D物体的骨架 通俗解释: 模型就像3D物体的骨架,定义了物体的形状和结构。 比如,一个房子的模型包括墙、屋顶、窗户等…...
【微服务与分布式实践】探索 Dubbo
核心组件 服务注册与发现原理 服务提供者启动时,会将其服务信息(如服务名、版本、所在节点的网络地址等)注册到注册中心。服务消费者则可以从注册中心发现可用的服务提供者列表,并与之通信。注册中心会存储服务的信息,…...
Scale AI 创始人兼 CEO采访
Scale AI 创始人兼 CEO 亚历山大王(Alexander Wang)首次亮相节目接受采访。他的公司专注于为人工智能工具提供准确标注的数据。早在 2022 年,王成为世界上最年轻的白手起家亿万富翁。 美国在全球人工智能竞赛中的地位,以及它与中…...
Java 大视界 -- Java 大数据在生物信息学中的应用与挑战(67)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
NeuIPS 2024 | CoT推理的新突破:推理边界框架(RBF)
近年来,大型语言模型(LLMs)在推理任务上的能力不断提升,尤其是 思维链(Chain-of-Thought, CoT) 技术,使得模型可以逐步推演逻辑,提高预测准确率。然而,当前的CoT推理仍然…...
【C】memory 详解
<memory.h> 是一个 C 标准库头文件,提供了一组内存管理函数,用于分配、释放和操作动态内存。这些函数主要操作的是未初始化的内存块,是早期 C 编程中常用的内存操作工具。 尽管在现代 C 编程中更推荐使用<cstring>或<memory&…...
linux——进程树的概念和示例
一些程序进程运行后,会调用其他进程,这样就组成了一个进程树。 比如,在Windows XP的“运行”对话框中输入“cmd”启动命令行控制台,然后在命令行中输入“notepad”启动记事本,那么命令行控制台进程“cmd.exe”和记事本进程“note…...
分布式系统相关面试题收集
目录 什么是分布式系统,以及它有哪些主要特性? 分布式系统中如何保证数据的一致性? 解释一下CAP理论,并说明在分布式系统中如何权衡CAP三者? 什么是分布式事务,以及它的实现方式有哪些? 什么是…...
CSAPP学习:前言
前言 本书简称CS:APP。 背景知识 一些基础的C语言知识 如何阅读 Do-做系统 在真正的系统上解决具体的问题,或是编写和运行程序。 章节 2025-1-27 个人认为如下章节将会对学习408中的操作系统与计算机组成原理提供帮助,于是先凭借记忆将其简单…...
kaggle比赛入门 - House Prices - Advanced Regression Techniques(第三部分)
本文承接上一篇。 1. 数据预处理流水线(pipelines) from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEnc…...
Linux 命令之技巧(Tips for Linux Commands)
Linux 命令之技巧 简介 Linux 是一种免费使用和自由传播的类Unix操作系统,其内核由林纳斯本纳第克特托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户…...
从 GShard 到 DeepSeek-V3:回顾 MoE 大模型负载均衡策略演进
作者:小天狼星不来客 原文:https://zhuanlan.zhihu.com/p/19117825360 故事要从 GShard 说起——当时,人们意识到拥有数十亿甚至数万亿参数的模型可以通过某种形式的“稀疏化(sparsified)”来在保持高精度的同时加速训…...
【番外篇】鸿蒙扫雷天纪:运混沌灵智勘破雷劫天局
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节课我们不学习新的知识,我们来做一个扫雷小游戏 目录 扫雷小游戏概述一、扫雷游戏分析…...
