python學習打卡day55

DAY 55 序列預測任務介紹

知識點回顧

  1. 序列預測介紹
    1. 單步預測
    2. 多步預測的2種方式
  2. 序列數據的處理:滑動窗口
  3. 多輸入多輸出任務的思路
  4. 經典機器學習在序列任務上的劣勢;以隨機森林為例

作業:手動構造類似的數據集(如cosx數據),觀察不同的機器學習模型的差異

使用lightgbm同樣效果非常差

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
import lightgbm as lgb# =============================================================
# ===== 步驟1:數據準備 (與之前完全相同) =====
# =============================================================# 生成合成時間序列
x = np.linspace(0, 100, 1000)
y = np.cos(x) + 0.1 * x + np.random.normal(0, 0.5, 1000)# 定義參數
train_size = int(len(y) * 0.8)
seq_length = 30# 正確的數據標準化
train_data_raw = y[:train_size]
scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit(train_data_raw.reshape(-1, 1))
scaled_y = scaler.transform(y.reshape(-1, 1)).flatten()# 創建時序數據集函數
def create_sequences(data, seq_length):X, y = [], []for i in range(len(data) - seq_length):X.append(data[i:i+seq_length])y.append(data[i+seq_length])return np.array(X), np.array(y)# 對完整數據應用滑動窗口
all_X, all_y = create_sequences(scaled_y, seq_length)# 劃分序列數據集
split_idx = train_size - seq_length
X_train_np = all_X[:split_idx]
y_train_np = all_y[:split_idx]
X_test_np = all_X[split_idx:]
y_test_np = all_y[split_idx:]# =========================================================================
# ===== 步驟2:為LightGBM模型準備數據 =====
# =========================================================================# 調整X的形狀為二維 [樣本數, 特征數]
n_samples_train = X_train_np.shape[0]
n_samples_test = X_test_np.shape[0]X_train_lgb = X_train_np.reshape(n_samples_train, -1)
X_test_lgb = X_test_np.reshape(n_samples_test, -1)print("為LightGBM準備的 X_train 形狀:", X_train_lgb.shape)  # (770, 30)
print("為LightGBM準備的 X_test 形狀:", X_test_lgb.shape)   # (200, 30)# =============================================================
# ===== 步驟3:創建、訓練和評估LightGBM模型 =====
# =============================================================# 創建LightGBM數據集
#train_data = lgb.Dataset(X_train_lgb, label=y_train_np)
#test_data = lgb.Dataset(X_test_lgb, label=y_test_np, reference=train_data)
lgb_model = lgb.LGBMRegressor(n_estimators=100,num_leaves=31,learning_rate=0.05,feature_fraction=0.9,random_state=42,n_jobs=-1
)# 訓練模型
print("\n開始訓練LightGBM模型...")
lgb_model.fit(X_train_lgb, y_train_np)
print("模型訓練完成!")# 做出預測
train_predict = lgb_model.predict(X_train_lgb)
test_predict = lgb_model.predict(X_test_lgb)# 反標準化預測結果
train_predict = scaler.inverse_transform(train_predict.reshape(-1, 1))
test_predict = scaler.inverse_transform(test_predict.reshape(-1, 1))# 原始標簽也需要反標準化
y_train_orig = scaler.inverse_transform(y_train_np.reshape(-1, 1))
y_test_orig = scaler.inverse_transform(y_test_np.reshape(-1, 1))# 計算均方根誤差 (RMSE)
train_rmse = np.sqrt(mean_squared_error(y_train_orig, train_predict))
test_rmse = np.sqrt(mean_squared_error(y_test_orig, test_predict))print(f"\n訓練集 RMSE: {train_rmse:.4f}")
print(f"測試集 RMSE: {test_rmse:.4f}")# =============================================================
# ===== 步驟4:可視化結果 =====
# =============================================================plt.figure(figsize=(15, 7))
plt.plot(y, label='原始數據', color='gray', alpha=0.5)# 繪制訓練集的預測結果
train_predict_plot = np.empty_like(y)
train_predict_plot[:] = np.nan
train_predict_plot[seq_length:seq_length+len(train_predict)] = train_predict.flatten()
plt.plot(train_predict_plot, label='訓練集預測值 (LightGBM)', color='blue')# 繪制測試集的預測結果
test_predict_plot = np.empty_like(y)
test_predict_plot[:] = np.nan
test_predict_plot[len(train_predict) + seq_length : len(y)] = test_predict.flatten()
plt.plot(test_predict_plot, label='測試集預測值 (RF)', color='red')plt.title('時間序列預測結果對比 (LightGBM)')
plt.xlabel('時間步')
plt.ylabel('值')
plt.legend()
plt.grid(True)
plt.show()# 特征重要性可視化
lgb.plot_importance(lgb_model, height=0.8, title='特征重要性', importance_type='gain')
plt.show()

?

@浙大疏錦行?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84763.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84763.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84763.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode hot100 Java刷題

文章目錄 快排146. LRU 緩存acm模式樹的前中后序遍歷acm模式鏈表的基本操作1. 兩數之和49. 字母異位詞分組128. 最長連續序列283. 移動零11. 盛最多水的容器15. 三數之和42. 接雨水53. 最大子數組和56. 合并區間73. 矩陣置零48. 旋轉圖像141. 環形鏈表142. 環形鏈表 II24. 兩兩…

Linux 命令詳解 —— 進程管理

文章目錄 精通Linux操作系統(以Centos7為例)進程管理ps常用組合進程狀態 STAT 詳解高級篩選與格式化輸出按條件過濾進程自定義輸出字段顯示進程樹關系排障場景定位高 CPU檢查僵尸進程查看進程的線程查看進程打開的文件/網絡連接常用組合速查top前5摘要區進程列表信息交互式命令…

【軟考高級系統架構論文】論湖倉一體架構及其應用

論文真題: 隨著5G、大數據、人工智能、物聯網等技術的不斷成熟,各行各業的業務場景日益復雜,企業數據呈現出大規模、多樣性的特點,特別是非結構化數據呈現出爆發式增長趨勢。在這一背景下,企業數據管理不再局限于傳統…

Docker 高級管理筆記

前言:Docker 高級管理概述 隨著 Docker 技術的廣泛應用,容器化已成為現代軟件開發與部署的核心方式。本筆記聚焦 Docker 高級管理中的兩大關鍵技術 —— 容器通信與數據持久化,深入解析 Docker 網絡模式、端口映射、容器互聯機制及數據卷管理…

Spring Boot 項目初始化

一、什么是 CommandLineRunner CommandLineRunner 是 Spring Boot 提供的一個 函數式接口,聲明如下: 該接口只有一個 run(String... args) 方法,會在 Spring Boot 容器啟動完成后被自動調用。 你可以將它理解為一種“鉤子函數”,…

C# winform教程(二)----ComboBox

一、作用 一個可以輸入也可以下拉的列表框。 二、屬性 一般我們都是使用下拉列表,不使用在線編輯(本人沒用過) 屬性 名稱內容含義items組合框中項可以定義下拉列表的值DropDownStyle外觀和功能是否可以填寫,一般選擇dropdownli…

FFmpeg裁剪視頻在Android上的實現

添加依賴: implementation com.arthenica:mobile-ffmpeg-full:4.4.LTS 代碼實現: fun cropMiddleThird(inputPath: String, outputPath: String) {val cmd arrayOf("-y", // 覆蓋輸出文件"-i", inputPath,"-filter:v&quo…

openEuler 22.03 sp1 更新openssh 10.0p2 —— 筑夢之路

華為歐拉openEuler制作openssh 9.1/9.2/9.3 p1 rpm——筑夢之路_歐拉構建openssh-CSDN博客 上面是需要修改的sshd_config配置,將這3行注釋掉。 附上22.03 sp1的yum源文件 # cat openEuler.repo #generic-repos is licensed under the Mulan PSL v2. #You can use t…

AGI(4)大模型的推理綜述

本文源自基于基礎模型的推理綜述《A Survey of Reasoning with Foundation Models》,因為原文有點難于理解,在這個論文的基礎上增加了自己的解釋和理解,重新整理成此文。大家可以通過查看原文閱讀原始論文。 1、推理的概念 推理是解決復雜問題…

Rust 中的宏與函數

在 Rust 編程中,宏(Macro)和函數(Function)是兩種非常重要的編程工具。雖然它們都可以用來組織代碼和實現復用,但它們在定義方式、作用原理、性能、靈活性以及適用場景等方面存在諸多不同。本文將詳細介紹 …

c++中左值與右值

在 C++ 中,左值(lvalue) 和 右值(rvalue) 是表達式的基本屬性,它們決定了表達式能否被賦值、取地址等操作。 1. 核心定義 左值(lvalue) 特點:表示一個具名的、持久的對象,可位于賦值語句左側。示例: int x = 42; // x是左值 x = 100; // 合法:左值可…

DeepSeek14-open-webui 常用概念區分

I、“Tools & Functions” 與 Pipelines(工作流系統)區別 以下是“Tool & Functions”與“Pipelines”的區別、適用場景及作用的詳細分析,內容基于參考文檔提取與總結: 一、本質區別 維度Tool & FunctionsPipeline…

PaddleOCR + Flask 構建 Web OCR 服務實戰

1、前言 隨著圖像識別技術的發展,OCR(光學字符識別)已經成為很多應用場景中的基礎能力。PaddleOCR 是百度開源的一個高性能 OCR 工具庫,支持中英文、多語言、輕量級部署等特性。 而 Flask 是一個輕量級的 Python Web 框架,非常適合快速構建 RESTful API 或小型 Web 應用…

C++結構體初始化與成員函數實現語法詳解

C結構體初始化與成員函數實現語法詳解 一、結構體靜態成員初始化語法 在C中,靜態成員變量需要在類外部進行定義和初始化。提供的代碼展示了如何為MAIN_PROPULSION_CAN類的靜態成員變量進行初始化: MAIN_PROPULSION_CAN::VoltageThresholds MAIN_PROPU…

買了新內存條插上bios識別,進入系統不可用,b450主板,內存插槽A1A2 可以點亮,B1B2不可以,A2B2不可以,B1B2還是不可以

提示:買了新內存條插上bios識別,進入系統不可用,b450主板,內存插槽A1A2 可以點亮,B1B2不可以,A2B2不可以 文章目錄 前言——環境一、第一種情況,開機不能點亮二、第二種情況, 總內存&#xff0c…

7.4.1_2B樹的插入刪除

B樹插入: 假如是m階B樹,插入關鍵字時都要滿足每個節點上的關鍵字個數最少為m/2向上取整-1關鍵字,最多有m-1個關鍵字,且每次插入的新元素一定是放在最底層的終端節點(因為如果不是放在終端節點,會導致該節點上可能有葉子…

Linux系統基本操作指令

Linux系統基本操作指令 文章目錄 Linux系統基本操作指令一、介紹二、基礎設置2.1 設置ubuntu與window的共享目錄2.2 ubuntu系統簡單介紹 三、Linux命令及工具介紹3.1 目錄管理命令(功能,格式,參數,系統參數)3.2 文件操作命令 四、網絡命令4.1…

系統思考VS心智模式

在這張圖片中,我們看到的是兩杯相同價格的咖啡,它們的價格顯示方式不同。一杯咖啡的原價和現價都寫得很大,而另一杯的價格則以較小的字體呈現。這種微妙的設計差異揭示了一個有趣的心理現象——心智模式。 人們在面對同樣的價格時&#xff0…

all()函數和any()函數

參考文獻 在if上使用.all和.any # 中心點未改變,說明達到穩態,結束遞歸if (self.points new_center).all():sum self.__sumdis(result)return result, self.points, sum

Maven:依賴管理就像樂高拼裝的藝術

目錄 🏗? 第一章:Maven是高級樂高玩家🔍 依賴管理的基本單元 🧩 第二章:多模塊項目——樂高巨艦組裝術🌟 為什么要拆分模塊?🛠? 父子POM配置示范 ?? 第三章:依賴沖突…