news 2026/7/31 5:05:17

逻辑回归(Logistic Regression)详解:从原理、模型评价到 Python 实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
逻辑回归(Logistic Regression)详解:从原理、模型评价到 Python 实战

一、逻辑回归简介

1. 什么是逻辑回归?

逻辑回归(Logistic Regression)是一种经典的机器学习分类算法,主要用于解决二分类和多分类问题

虽然名字中包含"回归",但逻辑回归本质上是一种分类模型。

常见应用:

  • 银行贷款风险预测
  • 医疗疾病检测
  • 垃圾邮件分类
  • 用户流失预测
  • 信用评分

例如银行需要判断用户是否存在贷款风险:

0:正常用户 1:违约用户

输入用户信息:

年龄 收入 负债情况 信用评分 历史还款记录

模型输出:

用户违约概率

例如:

正常概率:0.2 违约概率:0.8

由于违约概率大于 0.5:

最终预测:

用户 = 违约

二、逻辑回归的数学原理

1. 线性计算

逻辑回归首先计算输入特征的线性组合:

z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b

其中:

符号含义
x输入特征
w模型权重
b偏置
z线性结果

例如贷款预测:

z = w₁ × 年龄 + w₂ × 收入 + w₃ × 信用评分 + b

但是:

z 的范围:

(-∞, +∞)

无法直接作为概率。

因此需要使用:


2. Sigmoid 函数

Sigmoid 函数:

σ(z) = 1 / (1 + e⁻ᶻ)

作用:

将任意数值转换到:

0 ~ 1

例如:

z概率
50.99
00.5
-50.006

最终:

输出一个概率值。


三、逻辑回归模型评价指标

在实际项目中:

不能只看准确率。

1. 为什么准确率不可靠?

例如银行贷款预测:

10000 个用户:

正常用户:9990 个 违约用户:10 个

模型:

所有用户预测正常

结果:

预测正确:

9990 个

准确率:

9990 / 10000 = 99.9%

但是:

10 个违约用户全部漏掉。

这种模型没有实际价值。

因此需要:

  • 混淆矩阵
  • Precision
  • Recall
  • F1-score

四、混淆矩阵

混淆矩阵用于比较:

真实结果 VS 模型预测结果。

预测正类预测负类
真实正类TPFN
真实负类FPTN

1. TP

True Positive:

真正例。

含义:

真实 = 1 预测 = 1

例如:

用户确实违约,模型判断违约。


2. TN

True Negative:

真负例。

真实 = 0 预测 = 0

例如:

正常用户被正确识别。


3. FP

False Positive:

假正例。

真实 = 0 预测 = 1

也叫:误报。

例如:

正常用户被认为违约。


4. FN

False Negative:

假负例。

真实 = 1 预测 = 0

也叫:漏报。

例如:

违约用户没有被发现。


五、分类评价指标

1. Precision(精确率)

公式:

Precision = TP / (TP + FP)

含义:

模型预测为正类的数据中,有多少是真的正类。

例如:

模型预测 100 人违约:

其中 80 人真的违约。

Precision:

80%

关注:

减少误报。


2. Recall(召回率)

公式:

Recall = TP / (TP + FN)

含义:

所有真实正类中,有多少被模型找到。

例如:

实际有 100 个违约用户:

模型发现 90 个。

Recall:

90%

关注:

减少漏报。


3. 为什么业务更关注 Recall?

医疗场景

疾病检测:

误诊:

健康人被判断患病。

影响:

需要复查。

漏诊:

患者没有发现疾病。

可能导致严重后果。

所以:

医疗更关注 Recall。


银行风控

预测贷款违约:

漏掉一个老赖:

损失 100 万元。

误拒一个正常用户:

损失 5 万元。

因此:

银行更关注:

Recall。


4. F1-score

Precision 和 Recall 存在矛盾。

因此使用:

F1-score。

公式:

F1 = 2PR / (P + R)

它综合考虑:

  • 精确率
  • 召回率

六、Python 实现逻辑回归

1. 导入库

import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix

七、加载数据

使用 sklearn 自带鸢尾花数据集。

iris = load_iris() X = iris.data y = iris.target

数据:

X: 花萼长度 花萼宽度 花瓣长度 花瓣宽度 y: 花的类别

八、划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split( X, y, test_size = 0.2, random_state = 42 )

作用:

80% 训练

20% 测试


九、训练逻辑回归模型

创建模型:

model = LogisticRegression()

训练:

model.fit( X_train, y_train )

训练过程中:

模型学习:

每个特征的重要程度

也就是:

权重 w。


十、模型预测

y_pred = model.predict(X_test)

得到:

预测类别。


十一、模型评价

1. 混淆矩阵

cm = confusion_matrix( y_test, y_pred ) print(cm)

输出:

[[10 0 0] [0 9 1] [0 0 10]]

表示:

模型大部分预测正确。


2. 分类报告

print( classification_report( y_test, y_pred ) )

输出:

precision recall f1-score support

说明模型综合表现。


十二、过拟合与正则化

1. 什么是过拟合?

过拟合:

模型在训练数据上表现很好:

训练准确率:99%

但是:

测试数据:

准确率:70%

原因:

模型记住了训练数据中的噪声。


十三、正则化解决过拟合

正则化思想:

在损失函数中加入惩罚项。

公式:

Loss = 原始损失 + λR(W)

目的:

限制模型复杂度。


十四、L1 和 L2 正则化

L1 正则化

公式:

R(W) = ∑|w|

特点:

部分权重变为 0。

作用:

自动选择重要特征。


L2 正则化

公式:

R(W) = ∑w²

特点:

让权重整体变小。

优点:

模型更加稳定。

sklearn 默认:

penalty = 'l2'

十五、LogisticRegression 重要参数

1. penalty

正则化方式:

penalty = 'l2'

2. C 参数

C 表示:

正则化强度的倒数。

关系:

C 值正则化

例如:

LogisticRegression(C = 0.1)

正则化更强。


3. solver

优化算法:

solver特点
liblinear小数据
lbfgs默认
sag大数据
saga大数据

4. max_iter

最大迭代次数:

max_iter = 1000

防止模型无法收敛。


5. class_weight

解决类别不平衡:

class_weight = 'balanced'

自动提高少数类别权重。


十六、交叉验证进行参数优化

为什么不能使用测试集调参?

错误:

测试不同 C 值 选择测试集效果最高的

问题:

测试集参与模型选择。

相当于提前看答案。


十七、K 折交叉验证

例如:

10 折交叉验证。

步骤:

数据分 10 份:

1 2 3 4 5 6 7 8 9 10

循环:

第一次:

训练:

1-9

验证:

10

第二次:

训练:

1-8 + 10

验证:

9

最终:

计算平均结果。

十八、完整机器学习流程

数据收集 ↓ 数据清洗 ↓ 划分训练集测试集 ↓ 建立逻辑回归模型 ↓ 交叉验证调参 ↓ 训练最终模型 ↓ 测试模型 ↓ 上线应用
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 5:04:52

高效团队建设的核心要素与实践方法

1. 团队建设的核心价值与挑战在当今快节奏的工作环境中,团队建设已经从"可有可无"的软技能变成了决定项目成败的关键因素。我经历过太多这样的场景:一群技术大牛组成的团队,因为缺乏有效协作,最终交付成果远低于预期&am…

作者头像 李华
网站建设 2026/7/31 5:01:02

XZ3621 4V至30V支持高电压输入的同步降压电源管理芯片,在4-30V的宽输入电压范围内可实现3A的连续电流输出。

概述 XZ3621是支持高电压输入的同步降压电源管理芯片,在4-30V的宽输入电压范围内可实现3A的连续电流输出。 通过调节FB端口的分压电阻,可以输出1.8V到28V的稳定电压。XZ3621具有优秀的恒压/恒流特性。XZ3621采 用电流模式的环路控制原理,实现…

作者头像 李华
网站建设 2026/7/31 5:00:17

C++智能指针源码解析:从RAII到内存安全实践

1. 项目概述:为什么我们需要智能指针?在C的世界里,内存管理一直是个让人又爱又恨的话题。爱的是,手动管理内存给了我们极致的控制权,性能调优的潜力巨大;恨的是,一个不小心,内存泄漏…

作者头像 李华
网站建设 2026/7/31 4:55:03

Windows C++进程终结:从PID、句柄到进程名的完整实现方案

1. 项目概述:为什么我们需要手动终结进程?在Windows平台的C开发中,尤其是涉及到系统工具、自动化脚本、游戏外挂检测、或者软件安装/卸载程序时,我们经常会遇到一个看似简单却暗藏玄机的需求:如何精准、安全地终止一个…

作者头像 李华
网站建设 2026/7/31 4:53:35

GDB ptype /o 命令实战:动态查看结构体内存布局与偏移量

1. 项目概述:为什么需要手动查看结构体成员偏移量?在嵌入式开发、系统编程或者深度调试C/C程序时,我们经常需要和内存布局打交道。结构体(struct)作为组织数据的核心方式,其成员在内存中的精确位置——也就…

作者头像 李华
网站建设 2026/7/31 4:52:58

第三方bean

由于component也是bean对象,所以会自动在方法传参时会自动注入AilyunOSSproperties对象,配置第三方bean单独定义配置类,且第三方类的bean对象名称默认为方法名(即为abc)这是第三方类的bean,不能直接加注解。…

作者头像 李华