2016-05-16 5 views
1

Ich kann nicht sehen, wie XGBoost Vorhersage-Methode Vorhersagen mit mehr als einer Funktion macht.XGBoost Vorhersage() Fehler mit mehreren Features

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,])) 

mein Test-Set zur Umsetzung nicht einen Fehler zurück, was jedoch die Prädiktoren falsch verwendet, weil

predict(model,t(train[1:5,])) 

nur drei Werte prognostiziert statt der erwarteten fünf

Also meine Frage ist, Wie kann ich mit XGBoost Vorhersagen treffen, die die gleichen Funktionen wie das Modell verwenden? In diesem Beispiel habe ich ein Modell mit drei Funktionen erstellt: lag1, lag2 und lag3, um die Antwort, return, vorherzusagen. Wenn Sie jedoch versuchen, mit predict Vorhersagen zu treffen, verhält sich die Funktion so, als würde sie nur eine Funktion verwenden. Wenn sie mehrere Werte verwendet, wie wenn ich die Testmenge transponiert habe, ist unbekannt, wie diese Werte verwendet werden.

Antwort

3

sind Sie ganz in der Nähe ... bleib bei mir hier ...

> dim(train) 
[1] 2779 3 

ok Sie mit drei Funktionen bestimmen .. keine Überraschungen gibt

, wenn Sie tun, um diese

> predict(model,train[1,]) 
Error in xgb.DMatrix(newdata) : 
    xgb.DMatrix: does not support to construct from double 

xboost ist auf der Suche nach einer Matrix und Sie gaben ihm einen Vektor, weiter ...

##this works 

> predict(model,t(train[1,])) 
[1] -0.09167647 
> dim(t(train[1,])) 
[1] 1 3 

weil man einen Vektor transponierte, das eine 1 * 3-Matrix

gemacht aber diese durcheinander wird

> 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 

die Fehler, da ein (Spalte) Vektor der Umsetzung und die Umsetzung mit einer Matrix sind verschieden

Dinge

, was Sie wirklich wollen, ist dies

> 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 

AUCH

du musst wirklich vorsichtig sein, denn wenn Sie es nicht genügend Spalten geben xgboost werden die Spalten wie folgt recyceln ...

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

So stellen Sie sicher, dass Sie geben ein Matrix mit der gleichen Anzahl von Spalten oder die Hölle wird losbrechen :)

+0

Vielen Dank. Genau das, was ich brauchte –