集成学习算法Stacking组合随机森林+AdaBoost+检验评估+未来预测 Stacking 的原理是通过组合多个不同的学习模型,将它们的预测作为输入,训练一个元学习器来进行最终的预测 不同于 Bagging 和 Boosting,Stacking 的核心是使用一个新的模型来学习如何有效地整合其他模型的预测 该程序可以用于研究预测气温、降水、风速、太阳能等,该方法非常新颖,便于发表高质量文章,另外由于程序包含了未来预测的因此还可用于要素预测平台建设 1、该python程序的输入数据是两个excel文件,第一个输入数据是建模文件,包含多个特征量和单个目标量(预测值),用于模型的训练和测试;第二个excel文件用于未来预测的输入数据,包含未来多个特征量 2、本程序集合了随机森林和AdaBoost单个模型的预测可能存在偏差或方差,难以表现出最佳效果,但通过集成多个模型,能够综合各自的优点,减少预测误差,提升模型的鲁棒性和准确性(创新点) 3、程序自动采用均方误差 (MSE)、均方根误差 (RMSE)、平均绝对误差 (MAE)、拟合优度 (R-squared)对模型进行评估 4、另外,本程序采用y=x的散点图的形式配合上面的评估结果,便于出论文 5、程序输入的第二个excel文件,用于未来预测,因此本程序还具备应用的功能,程序最后还带有未来预测的代码,能够用于要素预测的平台建设 6、本程序的输出结果出了图形和模型的评估结果外,还生成了两个excel文件,一个是预测值excel文件(相对于测试集),一个是未来值excel文件 本程序的使用方法,只需要修改更新两个excel文件,该程序就能运行

在数据科学领域,集成学习算法一直是提升模型性能的有力武器。今天咱们就来唠唠一种超有趣的Stacking集成学习算法,它巧妙地组合了随机森林和AdaBoost,还自带检验评估和未来预测功能,简直是“六边形战士”!

Stacking原理速览

Stacking的原理,简单来说,就是把多个不同的学习模型组合起来。这些模型各自做出预测,然后把它们的预测结果作为新的输入,去训练一个元学习器,这个元学习器给出的就是最终预测啦。它和Bagging、Boosting可不一样,核心在于使用全新的模型来学习怎么把其他模型的预测有效整合起来,就像是给一群各有所长的小伙伴找了个“领导”,让大家发挥出最大合力。

这种方法为啥厉害呢?它可以用来研究预测好多东西,像气温、降水、风速、太阳能这些,非常适合发高质量文章。而且因为有未来预测功能,在要素预测平台建设里也能大显身手。

Python实现全解析

咱们直接看代码。这个程序的输入数据是两个Excel文件。第一个是建模文件,里面包含多个特征量和单个目标量(也就是预测值),用来训练和测试模型。第二个Excel文件则是未来预测要用的,里面是未来的多个特征量。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor, AdaBoostRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.metrics import r2_score
import matplotlib.pyplot as plt
import numpy as np

这里咱们导入了要用的各种库,pandas用来处理数据,sklearn里的各种工具帮咱们做模型训练和评估,matplotlib用来画图。

# 读取建模文件
data = pd.read_excel('modeling_file.xlsx')
X = data.drop('target_variable', axis = 1)
y = data['target_variable']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)

这部分代码读取了建模文件,把特征和目标值分开,然后又把数据分成训练集和测试集,test_size = 0.2表示测试集占20% 。

# 随机森林模型
rf = RandomForestRegressor(n_estimators = 100, random_state = 42)
rf.fit(X_train, y_train)
rf_pred = rf.predict(X_test)

随机森林模型这里,咱们设置了n_estimators = 100,也就是100棵树,然后用训练集训练模型,再用测试集做预测。

# AdaBoost模型
ada = AdaBoostRegressor(n_estimators = 100, random_state = 42)
ada.fit(X_train, y_train)
ada_pred = ada.predict(X_test)

AdaBoost模型类似,同样设置100个估计器,训练并预测。

集成学习算法Stacking组合随机森林+AdaBoost+检验评估+未来预测 Stacking 的原理是通过组合多个不同的学习模型,将它们的预测作为输入,训练一个元学习器来进行最终的预测 不同于 Bagging 和 Boosting,Stacking 的核心是使用一个新的模型来学习如何有效地整合其他模型的预测 该程序可以用于研究预测气温、降水、风速、太阳能等,该方法非常新颖,便于发表高质量文章,另外由于程序包含了未来预测的因此还可用于要素预测平台建设 1、该python程序的输入数据是两个excel文件,第一个输入数据是建模文件,包含多个特征量和单个目标量(预测值),用于模型的训练和测试;第二个excel文件用于未来预测的输入数据,包含未来多个特征量 2、本程序集合了随机森林和AdaBoost单个模型的预测可能存在偏差或方差,难以表现出最佳效果,但通过集成多个模型,能够综合各自的优点,减少预测误差,提升模型的鲁棒性和准确性(创新点) 3、程序自动采用均方误差 (MSE)、均方根误差 (RMSE)、平均绝对误差 (MAE)、拟合优度 (R-squared)对模型进行评估 4、另外,本程序采用y=x的散点图的形式配合上面的评估结果,便于出论文 5、程序输入的第二个excel文件,用于未来预测,因此本程序还具备应用的功能,程序最后还带有未来预测的代码,能够用于要素预测的平台建设 6、本程序的输出结果出了图形和模型的评估结果外,还生成了两个excel文件,一个是预测值excel文件(相对于测试集),一个是未来值excel文件 本程序的使用方法,只需要修改更新两个excel文件,该程序就能运行

单个模型预测可能有偏差或方差,表现不是最佳。但通过集成多个模型,就能综合优点,减少误差,让模型更稳更准。这就是咱这个方法的创新点啦。

# Stacking整合预测
stacked_pred = np.column_stack((rf_pred, ada_pred))
meta_model = RandomForestRegressor(n_estimators = 100, random_state = 42)
meta_model.fit(stacked_pred, y_test)

这里把随机森林和AdaBoost的预测结果整合起来,再训练一个随机森林作为元模型。

# 模型评估
mse = mean_squared_error(y_test, meta_model.predict(stacked_pred))
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, meta_model.predict(stacked_pred))
r2 = r2_score(y_test, meta_model.predict(stacked_pred))
print(f'Mean Squared Error: {mse}')
print(f'Root Mean Squared Error: {rmse}')
print(f'Mean Absolute Error: {mae}')
print(f'R - squared: {r2}')

程序自动用均方误差 (MSE)、均方根误差 (RMSE)、平均绝对误差 (MAE)、拟合优度 (R - squared) 对模型评估,然后打印结果。

# 绘制y=x散点图
plt.scatter(y_test, meta_model.predict(stacked_pred))
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw = 2)
plt.xlabel('True Values')
plt.ylabel('Predicted Values')
plt.title('Scatter Plot of True vs Predicted Values')
plt.show()

通过绘制y = x散点图,能更直观地看到预测值和真实值的关系,方便在论文里展示。

# 读取未来预测数据
future_data = pd.read_excel('future_prediction_file.xlsx')
future_X = future_data
rf_future_pred = rf.predict(future_X)
ada_future_pred = ada.predict(future_X)
stacked_future_pred = np.column_stack((rf_future_pred, ada_future_pred))
future_pred = meta_model.predict(stacked_future_pred)

读取第二个Excel文件做未来预测,经过一系列模型预测得到最终的未来预测值。

# 输出结果
test_pred_df = pd.DataFrame({'True Values': y_test, 'Predicted Values': meta_model.predict(stacked_pred)})
test_pred_df.to_excel('test_prediction.xlsx', index = False)

future_pred_df = pd.DataFrame({'Future Predicted Values': future_pred})
future_pred_df.to_excel('future_prediction.xlsx', index = False)

最后输出两个Excel文件,一个是测试集的预测值,一个是未来预测值。

整个程序使用起来超简单,只要更新两个Excel文件,程序就能跑起来。无论是做研究发文章,还是搭建要素预测平台,它都能轻松胜任,是不是超厉害!赶紧动手试试吧。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐