【R模型】R语言xgboost模型对时间序列数据进行预测

文章介绍了如何使用R语言的xgboost库来处理时间序列预测问题。首先,解释了xgboost作为提升算法的基本原理。接着,通过加载R包、构建数据集、转换时间序列、划分训练测试集、训练模型和计算均方绝对误差(MAE)来展示xgboost模型的构建过程。
  • 💂 个人信息酷在前行
  • 👍 版权: 博文由【酷在前行】原创、需要转载请联系博主
  • 👀 如果博文对您有帮助,欢迎点赞、关注、收藏 + 订阅专栏
  • 🔖 本文收录于【R模型】,该专栏主要介绍R语言各类型机器学习,如线性回归模型、广义线性模型、混合线性模型、随机森林模型、支持向量机模型、决策树模型等。请大家多多关注点赞和支持,共同进步~ 欢迎大家订阅!


   xgboost是时下一种热门的机器学习算法,在面试和竞赛中出现的频率非常高,最近了解到对于时间序列,xgboost也可以完成相应的预测。

🐣 一、xgboost简介

   xgboost是Boost(提升)算法家族中的一员,Boost根本思想在于通过多个简单的弱分类器,构建出准确率很高的强分类器。简单地来说,Boost(提升)就是指每一步我都产生一个弱预测模型,通过加权累加到总模型中,可以用于回归和分类问题。如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升(Gradient boosting),这样若干步以后就可以达到逼近损失函数局部最小值的目标。

   boosting集成学习,由多个相关联的决策树联合决策,什么叫相关联,举个例子,有一个样本[数据->标签]是[(2,4,5)-> 4],第一棵决策树用这个样本训练得预测为3.3,那么第二棵决策树训练时的输入,这个样本就变成了[(2,4,5)-> 0.7],也就是说,下一棵决策树输入样本会与前面决策树的训练和预测相关。其中,0.7是模型预测和样本标记的差,称为残差。我们每次要学习的目标是上次学习的残差,直到残差小到满足我们的要求或其他终止条件。这个残差就是一个加预测值后能得真实值的累加量。

   上面的例子,如果第二次直接预测得到0.7,并不一定好,因为每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。换句话说我们思想不完全信任每一个棵残差树,我们认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,只有通过多学几棵树才能弥补不足。

举一个简单的例子,同样使用年龄进行分枝,假设我们A的真实年龄是18岁,但第一棵树的预测年龄是12岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁……以此类推学习下去

与之对比的是random forest(随机森林)算法,各个决策树是独立的、每个决策树在样本堆里随机选一批样本,随机选一批特征进行独立训练,各个决策树之间没有关系。

   本文主要与大家分享xgboost预测时间序列数据的案例

🐤 二、xgboost的R语言过程

  🍎 1、R包加载及函数理解

先加载R包和查看对应函数

# 安装R包
install.packages("xgboost")
install.packages("dplyr")
# 加载R包
library(xgboost)
library(dplyr)
# 查询help
?xgboost

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  🍌 2、构建数据集

# 加载数据
# Generate some sample time series data
set.seed(123)
time_series_data <- data.frame(time = 1:100, value = cumsum(rnorm(100)))
head(time_series_data)

在这里插入图片描述

  🥝 3、转换时间序列数列类型

# Transform the time series data into a supervised learning problem
lagged_data <- time_series_data %>% 
  mutate(lag1 = lag(value), lag2 = lag(value, 2), lag3 = lag(value, 3)) %>% 
  na.omit()

  🍓 4、划分训练集和测试集

# Split the data into training and test sets
train_index <- 1:80
train_data <- lagged_data[train_index, ]
test_data <- lagged_data[-train_index, ]

  🍍 5、构建模型并预测

# Train an XGBoost model on the training data
xgb_model <- xgboost(data = as.matrix(train_data[, c("lag1", "lag2", "lag3")]), 
                     label = train_data$value, 
                     nrounds = 100, 
                     verbose = 0)

# Use the trained model to make predictions on the test data
predictions <- predict(xgb_model, as.matrix(test_data[, c("lag1", "lag2", "lag3")]))

  🍋 6、计算MAE评估模型

# Evaluate the performance of the model
# Calculate the mean absolute error
mean_absolute_error <- function(actual, predicted) {
  mean(abs(actual - predicted))
}

mean_absolute_error(test_data$value, predictions)

在这里插入图片描述

📇 三、附上所有代码

library(xgboost)
library(dplyr)

?xgboost

# Generate some sample time series data
set.seed(123)
time_series_data <- data.frame(time = 1:100, value = cumsum(rnorm(100)))
head(time_series_data)

# Transform the time series data into a supervised learning problem
lagged_data <- time_series_data %>% 
  mutate(lag1 = lag(value), lag2 = lag(value, 2), lag3 = lag(value, 3)) %>% 
  na.omit()

# Split the data into training and test sets
train_index <- 1:80
train_data <- lagged_data[train_index, ]
test_data <- lagged_data[-train_index, ]

# Train an XGBoost model on the training data
xgb_model <- xgboost(data = as.matrix(train_data[, c("lag1", "lag2", "lag3")]), 
                     label = train_data$value, 
                     nrounds = 100, 
                     verbose = 0)

# Use the trained model to make predictions on the test data
predictions <- predict(xgb_model, as.matrix(test_data[, c("lag1", "lag2", "lag3")]))

# Evaluate the performance of the model
# Calculate the mean absolute error
mean_absolute_error <- function(actual, predicted) {
  mean(abs(actual - predicted))
}

mean_absolute_error(test_data$value, predictions)

参考文献:https://www.jianshu.com/p/105faa5fb5c7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷在前行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值