问题描述
我想使用 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()
函数,而我指的是稍后将进入 test
的 watchlist
数据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]