一、生活中的决策难题:周末郊游的「天气判断」

周末计划郊游时,你是不是总会打开天气预报反复确认?看到 "25℃、微风、无雨" 就兴奋收拾行李,看到 "35℃、暴雨" 就果断取消计划。这个判断过程,其实就是一个典型的二分类问题

if 温度20-28℃ + 无降雨 + 风力<3级 → 适合郊游(y=1)

else → 不适合郊游(y=0)

这种根据多个天气因素做 "是 / 否" 判断的场景,正是逻辑回归的典型应用。今天我们就用 "是否适合郊游" 的天气预测为例,一步步揭开逻辑回归的神秘面纱。

二、从生活经验到数学模型:逻辑回归的核心逻辑
1. 特征收集:给天气「记账」

假设我们记录了 100 个周末的天气数据,每次记录四个关键特征:

  • \(x_1\):气温(℃)
  • \(x_2\):湿度(%)
  • \(x_3\):降雨量(mm)
  • \(x_4\):风力(级)

以及一个结果:当天是否适合郊游(\(y=1\)表示适合,\(y=0\)表示不适合)

我们的目标是找到一个公式,输入这四个天气特征就能预测是否适合郊游。

2. 线性组合:给天气因素「打分」

判断是否适合郊游时,不同天气因素的重要性不同。比如降雨量的影响通常比湿度大,我们可以用线性组合表示这种权重分配:

\(z = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_3 + \theta_4x_4\)

  • \(\theta_0\)是基础分(即使所有特征一般也有基础概率)
  • \(\theta_1\)是气温权重(正值,舒适温度加分)
  • \(\theta_2\)是湿度权重(负值,湿度过高减分)
  • \(\theta_3\)是降雨量权重(负值,下雨严重减分)
  • \(\theta_4\)是风力权重(负值,风太大减分)

举个例子:如果\(\theta_0=-10\),\(\theta_1=0.5\),\(\theta_2=-0.2\),\(\theta_3=-3\),\(\theta_4=-1\)

当气温 25℃,湿度 60%,降雨量 0mm,风力 2 级时:

\(z = -10 + 0.5×25 + (-0.2)×60 + (-3)×0 + (-1)×2\)

\(= -10 + 12.5 - 12 + 0 - 2 = -11.5\)?不对,这显然有问题!

哦,这里发现错误:舒适气温应该是中间值最好,太低或太高都不好。所以实际应用中特征可能需要转换(比如用气温与 25℃的差值),这里简化为:

修正后计算:\(z = -5 + 0.3×25 + (-0.1)×60 + (-2)×0 + (-0.5)×2 = -5 + 7.5 - 6 + 0 -1 = -4.5\)?还是不对,说明权重需要合理设置。

正确示例:当\(\theta_0=-20\),\(\theta_1=1.2\)(气温 20-28℃为正值),\(\theta_2=-0.1\),\(\theta_3=-5\),\(\theta_4=-1.5\)

\(z = -20 + 1.2×25 + (-0.1)×60 + (-5)×0 + (-1.5)×2\)

\(= -20 + 30 - 6 + 0 - 3 = 1\)(正值,适合郊游)

3. Sigmoid 函数:概率「转换器」

线性组合的结果\(z\)可正可负,我们需要把它转换成 0-1 之间的概率。Sigmoid 函数就像一个 "概率转换器":

\(\hat{y} = \frac{1}{1 + e^{-z}}\)

它的神奇特性:

  • 当\(z=0\)时,\(\hat{y}=0.5\)(一半概率适合郊游)
  • 当\(z=3\)时,\(\hat{y}≈0.95\)(很可能适合)
  • 当\(z=-3\)时,\(\hat{y}≈0.05\)(很可能不适合)

用刚才的正确示例,\(z=1\)时:

\(\hat{y} = 1/(1+e^{-1}) ≈ 0.73\)(73% 概率适合郊游)

三、模型学习:让电脑学会看天气
1. 损失函数:给预测「打分」

如果模型预测某天气 73% 适合郊游(\(\hat{y}=0.73\)),但实际当天大雨取消了(\(y=0\)),这就是预测错误。损失函数用来衡量错误程度:

\(\text{Loss} = -y \log(\hat{y}) - (1-y) \log(1-\hat{y})\)

通俗解释:

  • 实际适合郊游(\(y=1\))却预测概率低,损失大
  • 实际不适合(\(y=0\))却预测概率高,损失大
2. 梯度下降:优化预测模型

我们需要找到最优的\(\theta\)值让损失最小,梯度下降就像 "盲人找最低点":

  • 先随便猜一组参数(比如全为 0)
  • 计算当前 "坡度"(梯度)
  • 沿着坡度向下走一小步(更新参数)
  • 重复直到走到 "谷底"(损失最小)

更新公式:\(\theta_j = \theta_j - \alpha × 梯度\),\(\alpha\)是步长(学习率)

四、代码实战:手把手实现「郊游天气预测器」

# 1. 导入工具包

import numpy as np

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score

# 2. 生成模拟天气数据(100个周末)

np.random.seed(42) # 固定随机种子,结果可重复

n_samples = 100

# 特征1:气温(15-35℃)

temperature = np.random.uniform(15, 35, n_samples)

# 特征2:湿度(30%-90%)

humidity = np.random.uniform(30, 90, n_samples)

# 特征3:降雨量(0-50mm)

rainfall = np.random.uniform(0, 50, n_samples)

# 特征4:风力(1-8级)

wind = np.random.uniform(1, 8, n_samples)

# 组合特征

X = np.column_stack((temperature, humidity, rainfall, wind))

# 生成标签(是否适合郊游)

# 简单规则:气温适宜(20-28℃)+ 少雨 + 风力小更适合

y = (

(temperature > 20) & (temperature < 28) & # 气温适宜

(rainfall < 5) & # 少雨

(wind < 3) & # 风力小

(humidity < 70) # 湿度适中

).astype(int)

# 3. 划分训练集和测试集(80%训练,20%测试)

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=0.2, random_state=42

)

# 4. 创建并训练模型

model = LogisticRegression() # 初始化模型

model.fit(X_train, y_train) # 用训练数据学习参数

# 5. 测试模型效果

y_pred = model.predict(X_test) # 预测测试集

accuracy = accuracy_score(y_test, y_pred) # 计算准确率

print(f"模型准确率:{accuracy:.2f}(越高越好)") # 通常能达到0.8以上

# 6. 查看模型学到的参数(特征重要性)

print("\n模型学到的权重:")

print(f"基础分(θ₀):{model.intercept_[0]:.2f}")

print(f"气温权重(θ₁):{model.coef_[0][0]:.2f}")

print(f"湿度权重(θ₂):{model.coef_[0][1]:.2f}")

print(f"降雨量权重(θ₃):{model.coef_[0][2]:.2f}")

print(f"风力权重(θ₄):{model.coef_[0][3]:.2f}")

# 7. 预测新的天气情况

# 比如:25℃,60%湿度,0mm降雨,2级风

new_weather = np.array([[25, 60, 0, 2]])

pred_prob = model.predict_proba(new_weather)[0][1] # 适合郊游的概率

print(f"\n该天气适合郊游的概率:{pred_prob:.2f}")

print("预测结果:", "适合郊游" if pred_prob > 0.5 else "不适合郊游")

# 8. 可视化决策边界(取气温和降雨量两个特征)

plt.figure(figsize=(10, 6))

# 绘制训练数据点

plt.scatter(

X_train[:, 0], X_train[:, 2], # 气温和降雨量

c=y_train,

cmap='bwr', # 红色适合,蓝色不适合

alpha=0.6,

label='训练数据'

)

# 绘制测试数据点(X标记)

plt.scatter(

X_test[:, 0], X_test[:, 2],

c=y_test,

cmap='bwr',

marker='x',

s=100,

label='测试数据'

)

plt.xlabel('气温(℃)')

plt.ylabel('降雨量(mm)')

plt.title('郊游天气预测:是否适合郊游')

plt.legend()

plt.grid(alpha=0.3)

plt.show()

五、关键概念通俗解释

术语

通俗解释

天气类比

特征

影响结果的因素

气温、降雨量等天气因素

权重

特征的重要程度

降雨量比湿度影响更大

Sigmoid 函数

分数转概率的工具

60 分以上算及格的评分标准

损失函数

衡量预测错误的程度

预报晴天却下雨的错误程度

梯度下降

优化参数的方法

根据错误调整判断标准

准确率

预测正确的比例

10 次预报对了 8 次 → 80% 准确率

六、逻辑回归的天气预测能力分析
优点:
  1. 解释性强:能清晰看到 "降雨量权重最高",符合生活常识
  1. 速度快:手机 APP 能实时运行,快速给出预测结果
  1. 概率输出:不只是说 "适合郊游",还能告诉你 "85% 概率适合"
缺点:
  1. 线性限制:无法捕捉非线性关系(比如极端高温和极端低温都不适合)
  1. 特征依赖:需要人工选择有价值的特征(比如忘记考虑紫外线强度)
七、提升预测准确性的技巧
  1. 特征工程:对气温做分段处理(比如设置舒适区间得分)

# 气温舒适度特征:20-28℃得1分,否则得0分

temp_comfort = ((X[:,0] > 20) & (X[:,0] < 28)).astype(int)

X = np.column_stack((X, temp_comfort)) # 添加新特征

  1. 特征标准化:消除单位差异影响

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X) # 标准化所有特征

  1. 正则化调参:防止过度拟合个别极端天气

model = LogisticRegression(C=0.5) # C值越小,正则化越强

八、完整可运行代码

import numpy as np

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score

from sklearn.preprocessing import StandardScaler

# 生成天气数据

np.random.seed(42)

n_samples = 100

temperature = np.random.uniform(15, 35, n_samples)

humidity = np.random.uniform(30, 90, n_samples)

rainfall = np.random.uniform(0, 50, n_samples)

wind = np.random.uniform(1, 8, n_samples)

X = np.column_stack((temperature, humidity, rainfall, wind))

# 生成标签

y = (

(temperature > 20) & (temperature < 28) &

(rainfall < 5) &

(wind < 3) &

(humidity < 70)

).astype(int)

# 数据标准化

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

# 划分数据集

X_train, X_test, y_train, y_test = train_test_split(

X_scaled, y, test_size=0.2, random_state=42

)

# 训练模型

model = LogisticRegression()

model.fit(X_train, y_train)

# 评估模型

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)

print(f"模型准确率:{accuracy:.2f}")

# 预测新天气

new_weather = np.array([[25, 60, 0, 2]]) # 25℃,60%湿度,无雨,2级风

new_weather_scaled = scaler.transform(new_weather)

pred_prob = model.predict_proba(new_weather_scaled)[0][1]

print(f"适合郊游概率:{pred_prob:.2f} → {'适合' if pred_prob>0.5 else '不适合'}")

# 可视化

plt.figure(figsize=(10, 6))

plt.scatter(X_train[:, 0], X_train[:, 2], c=y_train, cmap='bwr', alpha=0.6, label='训练数据')

plt.scatter(X_test[:, 0], X_test[:, 2], c=y_test, cmap='bwr', marker='x', s=100, label='测试数据')

plt.xlabel('气温(标准化后)')

plt.ylabel('降雨量(标准化后)')

plt.title('天气预测决策图')

plt.legend()

plt.grid(alpha=0.3)

plt.show()

九、总结

逻辑回归本质上是把人类的经验判断转化为数学公式的过程:

  1. 观察影响结果的关键因素(天气特征)
  1. 给不同因素分配合理的重要性(权重)
  1. 通过数据学习找到最优的判断标准
  1. 用这个标准预测未来情况

下次查看天气预报时,你可以试着用逻辑回归的思路分析:哪些因素对决策影响最大?它们的 "权重" 应该是多少?通过今天的学习,你不仅掌握了逻辑回归的核心原理,还能亲手实现一个简单的天气预测模型。

现在,试着修改代码中的天气特征或参数,看看模型预测结果会如何变化吧! 🌤️

还想看更多,来啦!!!

1,大数据比赛篇全国职业院校技能大赛-大数据比赛心得体会_全国职业职业技能比赛 大数据-CSDN博客

2,求职简历篇(超实用)大学生简历写作指南:让你的简历脱颖而出-CSDN博客

3,AIGC心得篇aigc时代,普通人需要知道的-CSDN博客

4,数据分析思维篇学习数据分析思维的共鸣-CSDN博客

5,中年危机篇“中年危机”如何转变为“中年机遇”-CSDN博客

其他需求,看主页哦!

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTPS服务

HTTPS服务 一、常见的端口 http ------ 80 明文 https ------ 443 数据加密 dns ------ 53 ssh ------ 22 telent ------ 23 HTTPS http ssl或者tls &#xff08;安全模式&#xff09; 二、原理&#xff1a; c&#xff08;客户端…

【Android笔记】Android 自定义 TextView 实现垂直渐变字体颜色(支持 XML 配置)

Android 自定义 TextView 实现垂直渐变字体颜色&#xff08;支持 XML 配置&#xff09; 在 Android UI 设计中&#xff0c;字体颜色的渐变效果能让界面看起来更加精致与现代。常见的渐变有从左到右、从上到下等方向&#xff0c;但 Android 的 TextView 默认并不支持垂直渐变。…

CANopen Magic调试软件使用

一、软件安装与硬件连接1.1 系统要求操作系统&#xff1a;Windows 7/10/11 (64位)硬件接口&#xff1a;支持Vector/PEAK/IXXAT等主流CAN卡推荐配置&#xff1a;4GB内存&#xff0c;2GHz以上CPU1.2 安装步骤运行安装包CANopen_Magic_Setup.exe选择安装组件&#xff08;默认全选&…

前端css学习笔记3:伪类选择器与伪元素选择器

本文为个人学习总结&#xff0c;如有谬误欢迎指正。前端知识众多&#xff0c;后续将继续记录其他知识点&#xff01; 目录 前言 一、伪类选择器 1.概念 2.动态选择器&#xff08;用户交互&#xff09; 3.结构伪类 &#xff1a;first-child&#xff1a;选择所有兄弟元素的…

深入探索 PDF 数据提取:PyMuPDF 与 pdfplumber 的对比与实战

在数据处理和分析领域&#xff0c;PDF 文件常常包含丰富的文本、表格和图形信息。然而&#xff0c;从 PDF 中提取这些数据并非易事&#xff0c;尤其是当需要保留格式和颜色信息时。幸运的是&#xff0c;Python 社区提供了多个强大的库来帮助我们完成这项任务&#xff0c;其中最…

Springboot注册过滤器的三种方式(Order 排序)

一、使用 Component Order&#xff08;简单但不够灵活&#xff09; 适用于全局过滤器&#xff0c;无需手动注册&#xff0c;Spring Boot 会自动扫描并注册。 Component Order(1) // 数字越小&#xff0c;优先级越高 public class AuthFilter implements Filter {Autowired /…

电脑硬件详解

前几天我的风扇转的很快&#xff0c;而且cpu占用率很高&#xff0c;然后我在想怎么回事&#xff0c;然后就浅浅研究了一下电脑的硬件。 笔记本主板&#xff1a; 台式机主板&#xff1a; 图1&#xff1a; 图2&#xff1a; 电脑硬件详解 电脑的硬件是组成计算机系统的物理设…

力扣47:全排列Ⅱ

力扣47:全排列Ⅱ题目思路代码题目 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 思路 又是任意顺序和所有不重复的排列&#xff0c;显而易见我们要使用回溯的办法。 首先是回溯的结束条件即新数组的长度等于nums的长度。这道题的难点…

学习笔记091——如何实现web登录时,密码复杂度校验?(后端)

1、创建工具类 /*** 密码复杂度校验* param password 密码*/ public static void validatePassword(String password) {// 至少8位if (password.length() < 8) {throw new IllegalArgumentException("密码长度至少为8位");}// 包含大小写字母if (!password.matche…

雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论

一、前言在日趋复杂的分布式系统中&#xff0c;数据量越来越大&#xff0c;数据库分库分表是一贯的垂直水平做法&#xff0c;但是需要一个全局唯一ID标识一条数据或者MQ消息&#xff0c;数据库id自增就显然不能满足要求了。因为场景不同&#xff0c;分布式ID需要满足以下几个条…

【PCB设计经验】去耦电容如何布局?

0805 和 0603 以及更小 封装的电容用作于对中高频的去耦,其摆放位置是有要求的: 一、建议尽可能的靠近主控芯片的 电源管脚放置。 二、使用较宽和短的引线连接到电源和地过孔可以采用如下 图 4–1 中的图 ( 2 )、( 3)、 ( 4 )任意一种方式,避免使用长线或者较细的…

自动化运维实验

目录 一、实验拓扑 二、实验目的 三、实验步骤 实验思路&#xff1a; 代码部分&#xff1a; 四、实验结果&#xff1a; 一、实验拓扑 二、实验目的 利用python脚本&#xff0c;在本地&#xff0c;或者虚拟机里实现&#xff0c;设备CRC数量统计&#xff0c;并输出成表格 三、实验…

Wed前端第二次作业

一、作业1&#xff1a;完成自己学校的官网&#xff0c;动忘内容直接贴&#xff0c;至少三个不同的页面1、界面1&#xff08;1&#xff09;相关代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

第5节 大模型分布式推理通信优化与硬件协同

前言 在分布式推理中,多设备(如GPU、CPU)之间的数据传输(通信)是连接计算的“桥梁”。如果通信效率低下,即使单设备计算能力再强,整体性能也会大打折扣。想象一下:如果工厂之间的物流卡车跑得比生产速度还慢,再多的工厂也无法提高整体产量。 本节将从最基础的单设备内…

XGBoost 的适用场景以及与 CNN、LSTM 的区别

XGBoost 的核心优势与适用场景XGBoost 是一种梯度提升决策树算法&#xff0c;属于集成学习方法。它在处理结构化/表格化数据方面表现极其出色&#xff0c;是 Kaggle 竞赛和工业界广泛应用的“冠军”模型。其核心优势和应用场景包括&#xff1a;1. 结构化/表格化数据数据形式&a…

快速设计简单嵌入式操作系统(3):动手实操,基于STC8编写单任务执行程序,感悟MCU指令的执行过程

引言 前面我们陆续学习了操作系统常见的基础概念&#xff0c;接着简单了解了一下8051单片机的内存结构和执行顺序切换的相关概念。接下来&#xff0c;我们就开始进行实操&#xff0c;基于8051单片机STC8来编写一个简单的操作系统&#xff0c;这里我们先实现一个单任务的执行程…

Spring AI Alibaba - 聊天机器人快速上手

本节对应 Github&#xff1a;https://github.com/JCodeNest/JCodeNest-AI-Alibaba/tree/master/spring-ai-alibaba-helloworld 本文将以阿里巴巴的通义大模型为例&#xff0c;通过 Spring AI Alibaba 组件&#xff0c;手把手带你完成从零到一的构建过程&#xff1a;首先&#…

串口通信学习

不需要校验位就选8位&#xff0c;需要校验位就选9位&#xff01;USRTUSART框图STM32的外设引脚这是USART的基本结构。数据帧&#xff0c;八位是这个公式还是很重要的&#xff01;如果在编辑器里面使用printf打印汉字的话&#xff0c;会出现乱码的话&#xff0c;前提是你的编码格…

面试经典150题[001]:合并两个有序数组(LeetCode 88)

合并两个有序数组&#xff08;LeetCode 88&#xff09; https://leetcode.cn/problems/merge-sorted-array/?envTypestudy-plan-v2&envIdtop-interview-150 1. 题目背景 你有两个已经排好序的数组&#xff1a; nums1&#xff1a;前面是有效数字&#xff0c;后面是空位&…

快速安装达梦8测试库

计划&#xff1a;数据库名实例名PORT_NUMMAL_INST_DW_PORTMAL_HOSTMAL_PORTMAL_DW_PORTDMDWDBINST_1533615101192.168.207.612510135101*****[2025-08-11 15:14:34]***** Last login: Fri Jul 25 17:36:04 2025 from 192.168.88.48 [rootdm01 ~]# ip a 1: lo: <LOOPBACK,UP,…