【必收藏】Transformer+随机森林集成学习:构建精准股票开盘价预测模型,小白也能上手的大模型实战案例

📅 发布时间:2026/8/27 16:39:41
【必收藏】Transformer+随机森林集成学习:构建精准股票开盘价预测模型,小白也能上手的大模型实战案例
一、引言这个完整的股票开盘价预测案例结合了 Transformer 和随机森林通过集成学习提高模型性能。通过组合既用到了Transformer捕捉时序依赖的强大能力也用了随机森林的稳健集成优势得到了一个既灵活又易于调参的股票开盘价预测模型。整体流程如下数据准备收集历史股票开盘数据。按固定窗口切分成序列例如用过去7天的数据去预测下一天。Transformer 特征提取输入嵌入把每个时间点的流量值映射到高维向量。位置编码告诉模型“这是第几个时刻”因为Transformer本身不“记得”顺序。自注意力机制计算序列内部任意两时刻的关联程度突出重要上下文信息。多头注意力 前馈网络并行多个“视角”看数据再通过一层小型神经网进一步提纯特征。输出特征得到了每个时刻的高维表示我们选取最后一个位置或做池化得到一个代表整个输入序列的向量。随机森林回归用Transformer输出的向量作为输入特征。建立多棵决策树每棵树从这批特征中学习“如果这些数字长这样未来流量就可能是这个数”。多棵树预测后取平均值得到最终的股价预测。二、实现过程2.1 读取时序数据核心代码df pd.DataFrame(pd.read_csv(data.csv)) print(df)结果2.2 构建训练和测试数据集核心代码# 选择特征 features [Open, High, Low, Close, Adj Close] train_size int(len(df) * 0.8) train_df df[:train_size] test_df df[train_size:] # 构建训练和测试数据集 input_window 7 pred_window 1 train_dataset StockDataset(train_df[features], input_window, pred_window) test_dataset StockDataset(test_df[features], input_window, pred_window) train_loader DataLoader(train_dataset, batch_size32, shuffleFalse) test_loader DataLoader(test_dataset, batch_size32, shuffleFalse)2.3 定义 Transformer 模型核心代码class TransformerModel(nn.Module): def __init__(self, input_dim, d_model64, nhead4, num_layers2, dropout0.1): super().__init__() self.embedding nn.Linear(input_dim, d_model) encoder_layer nn.TransformerEncoderLayer(d_modeld_model, nheadnhead, dropoutdropout) self.transformer nn.TransformerEncoder(encoder_layer, num_layersnum_layers) self.decoder nn.Linear(d_model, 1) def forward(self, src): src self.embedding(src) src src.permute(1, 0, 2) # 转换为(seq_len, batch, feature) output self.transformer(src) output output[-1] # 最后一个时间步 output self.decoder(output) return output.squeeze() model TransformerModel(input_dimlen(features)) criterion nn.MSELoss() optimizer optim.Adam(model.parameters(), lr0.001)2.4 训练 Transformer 模型核心代码num_epochs 10 for epoch in range(num_epochs): model.train() epoch_loss 0 for X_batch, y_batch in train_loader: optimizer.zero_grad() y_pred model(X_batch) loss criterion(y_pred, y_batch.squeeze()) loss.backward() optimizer.step() epoch_loss loss.item() print(fEpoch {epoch1}/{num_epochs}, Loss: {epoch_loss/len(train_loader):.4f})结果2.5 得到 Transformer 预测结果作为随机森林输入核心代码model.eval() train_features, train_targets [], [] test_features, test_targets [], [] with torch.no_grad(): for X_batch, y_batch in train_loader: transformer_preds model(X_batch).numpy() High X_batch[:, -1, 1].numpy() Low X_batch[:, -1, 2].numpy() Close X_batch[:, -1, 3].numpy() Adj_Close X_batch[:, -1, 4].numpy() combined np.stack([transformer_preds, High, Low, Close, Adj_Close], axis1) train_features.extend(combined) train_targets.extend(y_batch.numpy()) for X_batch, y_batch in test_loader: transformer_preds model(X_batch).numpy() High X_batch[:, -1, 1].numpy() Low X_batch[:, -1, 2].numpy() Close X_batch[:, -1, 3].numpy() Adj_Close X_batch[:, -1, 4].numpy() combined np.stack([transformer_preds, High, Low, Close, Adj_Close], axis1) test_features.extend(combined) test_targets.extend(y_batch.numpy())2.6 随机森林模型训练核心代码rf RandomForestRegressor(n_estimators100, random_state42) rf.fit(train_features, np.array(train_targets).ravel()) rf_preds rf.predict(test_features)2.7 可视化分析图一实际 vs 预测图评估整体预测准确性核心代码plt.figure(figsize(14, 4)) plt.plot(np.array(test_targets).ravel(), labelActual, colorblack) plt.plot(rf_preds, labelPredicted, colorcrimson) plt.title(Actual vs Predicted Open Price) plt.xlabel(Time Index) plt.ylabel(Open Price) plt.legend() plt.grid(True) plt.tight_layout() plt.show()结果图二误差分布图了解误差的集中程度与偏差核心代码errors rf_preds - np.array(test_targets).ravel() sns.histplot(errors, bins30, kdeTrue, colordarkorange) plt.title(Prediction Error Distribution) plt.xlabel(Prediction Error) plt.ylabel(Frequency) plt.tight_layout() plt.show()结果图三特征重要性图理解哪些变量对预测贡献最大核心代码feature_importances rf.feature_importances_ print(feature_importances) feature_names [Transformer Output, High, Low, Close, Adj_Close] sns.barplot(xfeature_importances, yfeature_names, paletteviridis) plt.title(Feature Importance in Random Forest) plt.xlabel(Importance) plt.tight_layout() plt.show()结果模型评估指标mse mean_squared_error(test_targets, rf_preds) print(fRandom Forest Ensemble MSE: {mse:.2f})结果最后为什么要学AI大模型当下⼈⼯智能市场迎来了爆发期并逐渐进⼊以⼈⼯通⽤智能AGI为主导的新时代。企业纷纷官宣“ AI ”战略为新兴技术⼈才创造丰富的就业机会⼈才缺⼝将达 400 万DeepSeek问世以来生成式AI和大模型技术爆发式增长让很多岗位重新成了炙手可热的新星岗位薪资远超很多后端岗位在程序员中稳居前列。与此同时AI与各行各业深度融合飞速发展成为炙手可热的新风口企业非常需要了解AI、懂AI、会用AI的员工纷纷开出高薪招聘AI大模型相关岗位。最近很多程序员朋友都已经学习或者准备学习 AI 大模型后台也经常会有小伙伴咨询学习路线和学习资料我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频全系列的学习资料这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】AI大模型系统学习路线在面对AI大模型开发领域的复杂与深入精准学习显得尤为重要。一份系统的技术路线图不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点还能提供一条高效、有序的学习路径。但知道是一回事做又是另一回事初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性在这基础上找到高质量的学习资源不浪费时间、不走弯路又是重中之重。AI大模型入门到实战的视频教程项目包看视频学习是一种高效、直观、灵活且富有吸引力的学习方式可以更直观地展示过程能有效提升学习兴趣和理解力是现在获取知识的重要途径光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。海量AI大模型必读的经典书籍PDF阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。600AI大模型报告实时更新这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。AI大模型面试真题答案解析我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】