📋 文章目录
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
文章介绍了如何使用R语言的xgboost库来处理时间序列预测问题。首先,解释了xgboost作为提升算法的基本原理。接着,通过加载R包、构建数据集、转换时间序列、划分训练测试集、训练模型和计算均方绝对误差(MAE)来展示xgboost模型的构建过程。
1075

被折叠的 条评论
为什么被折叠?



