用天氣預測理解分類算法-從出門看天氣到邏輯回歸

一、生活中的決策難題:周末郊游的「天氣判斷」

周末計劃郊游時,你是不是總會打開天氣預報反復確認?看到 "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,…