2016-05-16 6 views
1

Я не вижу, как метод предсказания 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 функция ведет себя так, как будто она будет использовать только одну функцию, и если она использует несколько значений, например, когда я перенес транспонированный набор тестов, неизвестно, как они используют эти значения.

ответ

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

Просто убедитесь, что вы дать ему матрица с таким же количеством столбцов или всего ада разломается :)

+0

Спасибо. Точно, что мне нужно –