#!/usr/bin/env python
# coding: utf-8
# In[1]:
from numpy import asarray # 导入asarray函数,用于将输入转换为数组
import numpy as np # 导入numpy库
import matplotlib.pyplot as plt # 导入matplotlib库,用于绘图
import pandas as pd # 导入pandas库,用于数据处理和分析
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # 导入评估指标函数
from sklearn.ensemble import GradientBoostingRegressor # 从sklearn.ensemble模块导入GradientBoostingRegressor类
import math # 导入math库
from sklearn import preprocessing # 导入preprocessing模块,用于数据预处理
# In[2]:
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['Times New Roman']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# In[3]:
feanum = 1 # 特征数量
window = 5 # 窗口大小
Ra = 0.8 # 训练集所占比例
#更多模型咸鱼搜索机器学习之心,支持模型定制
df1 = pd.read_csv('焦作.csv', usecols=[1]) # 从CSV文件中读取数据,仅使用第二列数据
train_d, test_d = df1[0:int(len(df1)*Ra)], df1[int(len(df1)*Ra):] # 将数据集划分为训练集和测试集
#更多模型咸鱼搜索机器学习之心,支持模型定制
# In[4]:
min_max_scaler = preprocessing.MinMaxScaler() # 创建MinMaxScaler对象
df0 = min_max_scaler.fit_transform(df1) # 对df1进行归一化处理
df = pd.DataFrame(df0, columns=df1.columns) # 将归一化后的数据转换为DataFrame,列名与df1保持一致
#更多模型咸鱼搜索机器学习之心,支持模型定制
# In[5]:
stock = df # 将归一化后的DataFrame赋值给stock
seq_len = window # 设置序列长度为window
amount_of_features = len(stock.columns) # 获取列数,即特征数量
data = stock.values # 将DataFrame转换为矩阵,即将stock的值提取出来
sequence_length = seq_len + 1 # 序列长度加1
result = []#更多模型咸鱼搜索机器学习之心,支持模型定制
for index in range(len(data) - sequence_length): # 循环 len(data) - sequence_length 次
result.append(data[index: index + sequence_length]) # 将每个窗口大小为sequence_length的数据段添加到result中
result = np.array(result) # 将result转换为NumPy数组
cut = len(test_d) # 定义切割点,即测试集的长度
train = result[:-cut, :] # 切割训练集,取前面的部分作为训练集
x_train = train[:, :-1] # 训练集的特征部分,即除最后一列外的所有列
y_train = train[:, -1][:, -1] # 训练集的目标值,即最后一列的最后一个元素
x_test = result[-cut:, :-1] # 测试集的特征部分,即除最后一列外的所有列
y_test = result[-cut:, -1][:, -1] # 测试集的目标值,即最后一列的最后一个元素
#更多模型咸鱼搜索机器学习之心,支持模型定制
X_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], amount_of_features)) # 将x_train的形状调整为(样本数量, 时间步长, 特征数量)
X_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], amount_of_features)) # 将x_test的形状调整为(样本数量, 时间步长, 特征数量)
# In[6]:
X_train = X_train.reshape(len(X_train), window) # 将X_train的形状调整为(样本数量, 窗口大小)
y_train = y_train.reshape(len(X_train)) # 将y_train的形状调整为(样本数量,)
X_test = X_test.reshape(cut, window) # 将X_test的形状调整为(样本数量, 窗口大小)
y_test = y_test.reshape(cut) # 将y_test的形状调整为(样本数量,)
# In[8]:
model = GradientBoostingRegressor(loss='squared_error', learning_rate=0.1, n_estimators=100, subsample=1.0, max_depth=3)
# 参数解释:
# loss:优化过程中使用的损失函数,可以选择 'ls'(最小二乘回归)、'lad'(最小绝对偏差回归)、'huber'(Huber损失,介于最小二乘和最小绝对偏差之间)、'quantile'(分位数回归)
# learning_rate:学习率,控制每个树的贡献程度。较小的学习率需要更多的树来拟合数据,但可以提高泛化性能。
# n_estimators:基础模型的数量(树的数量)。增加基础模型通常可以提高性能,但会增加训练时间。
# subsample:每个基础模型使用的样本比例。可以设置为小于1.0的值,引入随机梯度提升,有助于减少过拟合。
# max_depth:每个基础模型的最大深度。它限制每棵树的节点数,有助于控制过拟合。
# min_samples_split:拆分内部节点所需的最小样本数。通过防止树进行过于细分的拆分来帮助控制过拟合。
model.fit(X_train, y_train) # 使用训练数据X_train和标签y_train拟合模型
# In[9]:
#在训练集上的拟合结果
y_train_predict=model.predict(X_train)#更多模型咸鱼搜索机器学习之心,支持模型定制
#在测试集上的预测
y_test_predict=model.predict(X_test)
# In[10]:
X = pd.DataFrame(y_test) # 将y_test转换为DataFrame,并将其赋值给变量X
Y = pd.DataFrame(y_test_predict) # 将y_test_predict转换为DataFrame,并将其赋值给变量Y
X = min_max_scaler.inverse_transform(X) # 使用min_max_scaler对X进行逆标准化
Y = min_max_scaler.inverse_transform(Y) # 使用min_max_scaler对Y进行逆标准化
#更多模型咸鱼搜索机器学习之心,支持模型定制
# In[11]:
testScore = math.sqrt(mean_squared_error(X, Y)) # 计算X和Y之间的均方根误差(RMSE)
print('RMSE为:%.3f ' %(testScore)) # 打印RMSE的值
#更多模型咸鱼搜索机器学习之心,支持模型定制
testScore = mean_absolute_error(X, Y) # 计算X和Y之间的平均绝对误差(MAE)
print('MAE为:%.3f ' %(testScore)) # 打印MAE的值
testScore = r2_score(X, Y) # 计算X和Y之间的R平方值(R2)
print('R2为:%.3f ' %(testScore)) # 打印R2的值
# In[12]:
plt.figure(figsize=(12, 3), dpi=150) # 创建一个图形窗口,设置图形的尺寸为宽度10英寸,高度4英寸,dpi为150
plt.plot(X, label="Actual", color='red', linewidth=1) # 绘制实际值曲线,设置线条颜色为红色,线宽为4
plt.plot(Y, color='blue', label='Prediction', linewidth=1, linestyle="--") # 绘制预测值曲线,设置线条颜色为蓝色,线宽为2.5,线型为虚线
plt.title('Prediction', size=15) # 设置图表的标题为'Prediction',字体大小为15
plt.ylabel('AQI', size=15) # 设置y轴的标签为'AQI',字体大小为15
plt.xlabel('time/day', size=15) # 设置x轴的标签为'time/day',字体大小为15
#更多模型咸鱼搜索机器学习之心,支持模型定制
plt.legend() # 显示图例
plt.show() # 显示图形
# In[ ]:
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.Python实现GBDT时间序列预测(完整源码和数据) anaconda + pycharm + python +Tensorflow 注意事项:保姆级注释,几乎一行一注释,方便小白入门学习! 2.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 4.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+
资源推荐
资源详情
资源评论
收起资源包目录
GBDT.zip (3个子文件)
GBDT.py 7KB
焦作.csv 62KB
焦作全.csv 112KB
共 3 条
- 1
资源评论
机器学习之心
- 粉丝: 2w+
- 资源: 1095
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5 薪酬结构统计分析表(依据基本信息自动生成).xlsx
- 4 员工工资表-部门薪酬分析.xlsx
- 8 公司工程部人事薪酬分析.xlsx
- 13 公司人力资源薪酬工资统计表.xlsx
- 7 薪酬市场数据统计分析.xlsx
- 9 公司员工薪酬统计分析表.xlsx
- 10 财务分析员工薪酬统计表.xlsx
- 12 财务报表员工薪酬结算.xlsx
- 11 财务报表员工薪酬分析.xlsx
- 15 薪资情况分析表.xlsx
- 14 薪资筹划财务分析表.xlsx
- 18 财务汇报部门历年薪酬统计图表.xlsx
- 16 月度工资支出数据汇总图表.xlsx
- 17财务报告年度工资统计图表1.xlsx
- 20 工资表-部分统计-图表展示.xlsx
- 21 公司部门工资情况汇报图表模板.xlsx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功