我无法看到XGBoost预测方法如何使用多个功能进行预测。
library(xgboost)
library(MASS)
sp500=data.frame(SP500)
label=sp500[,1]
lag1=sp500[-1,]
lag2=lag1[-1]
lag3=lag2[-1]
train=cbind(lag1,lag2,lag3)
model=xgboost(data=train[50:1000,],label=label[50:1000],
objective="reg:linear",booster="gbtree",nround=50)
predict(model,train[1,]) #returns an error, because it will not accept multiple columns
predict(model,t(train[1,]))
转置我的测试集不会返回错误,但这是错误地使用预测变量,因为
predict(model,t(train[1:5,]))
仅预测三个值而不是预期的五个
所以我的问题是,如何使用与构建模型相同的功能使用XGBoost进行预测?在这个例子中,我构建了一个具有三个特征的模型,lag1,lag2和lag3,以预测响应,返回。但是当尝试使用predict
进行预测时,该函数的行为就像它只使用一个特征一样,如果它使用多个值,就像我转换测试集一样,不知道它是如何使用这些值的
答案 0 :(得分:3)
你真的很亲密......和我在一起......
> dim(train)
[1] 2779 3
好的,你训练有三个功能......没有惊喜
当你这样做时
> predict(model,train[1,])
Error in xgb.DMatrix(newdata) :
xgb.DMatrix: does not support to construct from double
xboost
正在寻找一个矩阵,你给了它一个向量,继续......
##this works
> predict(model,t(train[1,]))
[1] -0.09167647
> dim(t(train[1,]))
[1] 1 3
因为你转置了一个矢量,它产生了1 * 3矩阵
但是这已经搞砸了
> predict(model, t(train[1:5,]))
[1] -0.09167647 0.31090808 -0.10482860
> dim(t(train[1:5,]))
[1] 3 5
### Xgboost used the 3 rows and the first three columns only to predict
## the transpose didn't do the same thing here
错误是因为转置(列)向量并转置矩阵是不同的事情
你真正想要的是这个
> predict(model,train[1:5,])
[1] -0.09167647 0.31090808 -0.10482860 -0.02773660 0.33554882
> dim(train[1:5,]) ## five rows of three columns
[1] 5 3
同时强>
你必须要小心,因为如果你没有给它足够的列xgboost
将像这样回收列......
predict(model,train[1:5,1:2])
[1] -0.07803667 -0.25330877 0.10844088 -0.04510367 -0.27979547
## only gave it two columns and it made a prediction :)
请确保你给它一个具有相同列数的矩阵或者所有地狱都会破坏:)