当前位置: 首页 > news >正文

Python Day55

Task:
1.序列预测介绍
a.单步预测
b.多步预测的2种方式
2.序列数据的处理:滑动窗口
3.多输入多输出任务的思路
4.经典机器学习在序列任务上的劣势;以随机森林为例


1. 序列预测介绍

序列预测是时间序列分析中的核心任务,旨在根据已知的过去数据,预测未来的数据点。

a. 单步预测

  • 定义:预测序列中下一时刻的值,基于当前位置之前的历史数据。
  • 应用:金融市场的股票价格预测下一天的股价。

示例:

# 简单的单步预测示例(未来值预测)
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression# 生成示例数据
np.random.seed(0)
data = np.cumsum(np.random.randn(100))  # 累积和,模拟时间序列
X = data[:-1].reshape(-1, 1)
y = data[1:]# 拟合模型
model = LinearRegression()
model.fit(X, y)# 预测下一步
last_value = data[-1].reshape(1, -1)
predicted_next = model.predict(last_value)
print("下一步预测值:", predicted_next[0])

b. 多步预测的两种方式

1. 逐步预测(Recursive)

  • 逐步用模型预测下一时刻,然后将预测值作为未来预测的输入。
  • 缺点:误差会累积。
# 递归多步预测示例
n_steps = 5
predictions = []
input_val = data[-1].reshape(1, -1)
for _ in range(n_steps):pred = model.predict(input_val)predictions.append(pred[0])input_val = np.array(pred).reshape(1, -1)
print("多步预测(递归):", predictions)

2. 直接多步预测(Multi-Output)

  • 训练模型直接输出多个未来值。
  • 适合长预测,但模型复杂。

示例(使用多输出回归):

from sklearn.multioutput import MultiOutputRegressor# 创建多输出目标
n_future = 3
X_multi = []
y_multi = []for i in range(len(data) - n_future):X_multi.append(data[i].reshape(1, -1))y_multi.append(data[i+1:i+1+n_future])
X_multi = np.vstack(X_multi)
y_multi = np.vstack(y_multi)multi_model = MultiOutputRegressor(LinearRegression())
multi_model.fit(X_multi, y_multi)# 预测
future_preds = multi_model.predict(data[-1].reshape(1,-1))
print("直接多步预测:", future_preds)

2. 序列数据的处理:滑动窗口

为了使用机器学习模型处理序列数据,通常需要构建具有固定长度的特征窗口。

示例:

def create_sliding_windows(data, window_size):X, y = [], []for i in range(len(data) - window_size):X.append(data[i:i+window_size])y.append(data[i+window_size])return np.array(X), np.array(y)# 创建窗口
window_size = 5
X, y = create_sliding_windows(data, window_size)
print("特征示例:", X[:2])
print("标签示例:", y[:2])

3. 多输入多输出任务的思路

多输入多输出(Multi-Input Multi-Output, MIMO)任务中,模型同时接受多个不同数据源作为输入,并预测多个目标。

示例场景:

  • 输入:多个特征(如历史价格、成交量等)
  • 输出:未来几天的价格(多输出)

实现方案:

  • 增加多个特征作为输入
  • 训练多输出模型,比如多输出回归

示例:

from sklearn.multioutput import MultiOutputRegressor
from sklearn.ensemble import RandomForestRegressor# 假设有两个输入特征(如价格和成交量)
# 生成示例数据
np.random.seed(0)
X1 = np.random.randn(100, 1)
X2 = np.random.randn(100, 1)
X_multi_input = np.hstack([X1, X2])# 目标是未来两个时间点的价格
Y_future = np.hstack([data[1:101].reshape(-1,1), data[2:102].reshape(-1,1)])# 训练多输出回归(随机森林)
model = MultiOutputRegressor(RandomForestRegressor(n_estimators=100))
model.fit(X_multi_input[:-2], Y_future[:-2])# 预测
preds = model.predict(X_multi_input[-1].reshape(1, -1))
print("多输入多输出预测:", preds)

4. 经典机器学习在序列任务上的劣势(以随机森林为例)

劣势总结

  • 无法捕获时间依赖性:传统机器学习模型需要提前构造特征(如滑动窗口),而不能本身理解序列的时间关系。
  • 对序列的长程依赖表现较差:模型难以捕获长时间跨度的依赖。
  • 缺乏序列的动态建模能力:无法自动学习状态转移规律。
  • 特征工程复杂:需手动创造特征,否则模型表现不佳。

示例:随机森林在序列预测中的表现(缺乏时间依赖建模)

from sklearn.ensemble import RandomForestRegressor# 利用滑动窗口生成特征
X, y = create_sliding_windows(data, window_size=5)# 训练模型
rf_model = RandomForestRegressor(n_estimators=100)
rf_model.fit(X, y)# 预测下一步
test_input = data[-5:].reshape(1, -1)
predicted_value = rf_model.predict(test_input)
print("随机森林预测值:", predicted_value[0])

总结:对于序列任务,深度学习模型(如RNN、LSTM)更适合捕获时间信息,而传统机器学习模型(如随机森林)仅作为特征预测,需要精心设计特征,且处理长序列依赖能力有限。


相关文章:

  • Taro 跨端开发:从调试到发布的完整指南
  • Odoo 17 Many2one字段内联编辑完整实现方案
  • Zephyr 调试实用指南:日志系统、Shell CLI 与 GDB 全面解析
  • gRPC 与 Protobuf 的深度集成 —— 从服务定义到多语言交互(Go + Java 示例)
  • 将浮点数转换为分数
  • C#测试调用ClosedXML根据批注设置excel单元格内容
  • 【舞蹈】编排:如何对齐拍子并让小节倍数随BPM递减
  • 经典控制理论:线性化笔记
  • PowerBI HtmlContent生成表格
  • 磁性传感器在电机控制闭环系统中的反馈作用
  • 【JAVA】数组的使用
  • 数据分析核心指标体系:从求和、计数到比较的全维度计算方法
  • 基于ARM ubuntu如何进行交叉编译
  • 针对机器人自修复材料的具体推荐及特性分析
  • 操作系统进程与线程核心知识全览
  • 如何定时发布WordPress文章(多种方法)
  • 日常开发常用工具和技巧以及遇到的问题
  • 闲庭信步使用SV进行图像处理系列教程介绍
  • 跟着AI学习C# Day29
  • Rabbitmq集成springboot,手动确认消息basicAck、basicNack、basicReject的使用
  • 产品网络推广方案范文/关键词优化排名公司
  • 网站建设规划ppt/常用的关键词优化策略有哪些
  • 企业怎么做网站建设/太原seo快速排名怎么样
  • 长滚动页网站怎么做/品牌seo是什么意思
  • 做网站服务好/模板免费下载网站
  • 大一网站开发项目答辩/百度网站推广电话