Xgboost:使用单一测试观察?

问题描述

我想使用 xgboost for R 拟合时间序列模型,并且我只想使用最后一次观察来测试模型(在滚动窗口预测中,总共会有更多)。但是当我在测试数据中只包含一个值时,我收到错误Error in xgb.DMatrix(data = X[n,],label = y[n]) : xgb.DMatrix does not support construction from double。是否可以这样做,或者我是否需要至少 2 个测试点?

可重现的例子:

library(xgboost)
n = 1000
X = cbind(runif(n,20),runif(n,20))
y = X %*% c(2,3) + rnorm(n,0.1)

train = xgb.DMatrix(data  = X[-n,label = y[-n])

test = xgb.DMatrix(data   = X[n,label = y[n]) # error here,y[.] has 1 value

test2 = xgb.DMatrix(data   = X[(n-1):n,label = y[(n-1):n]) # works here,y[.] has 2 values

还有另一篇文章 here 解决了类似的问题,但它指的是 predict() 函数,而我指的是稍后将进入 testwatchlist 数据xgboost 的参数并使用例如提前停止。

解决方法

password.getBytes(StandardCharsets.ASCII) for predict 确实适用于单个数据点。这里的问题是使用单个索引对 xgboost 进行子集操作。看,

matrix

使用class(X[n,drop = FALSE]) #[1] "matrix" "array" class(X[n,]) # [1] "numeric" 获取测试样本。

X[n,drop = FALSE]