XGBoost使用多个功能预测()错误

时间:2016-05-16 15:15:04

标签: r predict xgboost

我无法看到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进行预测时,该函数的行为就像它只使用一个特征一样,如果它使用多个值,就像我转换测试集一样,不知道它是如何使用这些值的

1 个答案:

答案 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 :)

请确保你给它一个具有相同列数的矩阵或者所有地狱都会破坏:)