2016-06-27 1 views
1

Ich schaute in der Post auf die gleiche Sache in Python, aber ich möchte eine Lösung in R. Ich arbeite an der Titanic-Datensatz von Kaggle, und es sieht wie folgt:XGBoost Prädiktor in R prognostiziert den gleichen Wert für alle Zeilen

'data.frame': 891 obs. of 13 variables: 
$ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ... 
$ Survived : num 0 1 1 1 0 0 0 0 1 1 ... 
$ Pclass  : Factor w/ 3 levels "1","2","3": 3 1 3 1 3 3 1 3 3 2 ... 
$ Age  : num 22 38 26 35 35 ... 
$ SibSp  : int 1 1 0 1 0 0 0 3 0 1 ... 
$ Parch  : int 0 0 0 0 0 0 0 1 2 0 ... 
$ Fare  : num 7.25 71.28 7.92 53.1 8.05 ... 
$ Child  : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 2 1 1 ... 
$ Embarked.C : num 0 1 0 0 0 0 0 0 0 1 ... 
$ Embarked.Q : num 0 0 0 0 0 1 0 0 0 0 ... 
$ Embarked.S : num 1 0 1 1 1 0 1 1 1 0 ... 
$ Sex.female : num 0 1 1 1 0 0 0 0 1 1 ... 
$ Sex.male : num 1 0 0 0 1 1 1 1 0 0 ... 

Dies ist, nachdem ich Dummy-Variablen verwendet habe. Mein Test-Set:

'data.frame': 418 obs. of 12 variables: 
$ PassengerId: int 892 893 894 895 896 897 898 899 900 901 ... 
$ Pclass  : Factor w/ 3 levels "1","2","3": 3 3 2 3 3 3 3 2 3 3 ... 
$ Age  : num 34.5 47 62 27 22 14 30 26 18 21 ... 
$ SibSp  : int 0 1 0 0 1 0 0 1 0 2 ... 
$ Parch  : int 0 0 0 0 1 0 0 1 0 0 ... 
$ Fare  : num 7.83 7 9.69 8.66 12.29 ... 
$ Child  : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ... 
$ Embarked.C : num 0 0 0 0 0 0 0 0 1 0 ... 
$ Embarked.Q : num 1 0 1 0 0 0 1 0 0 0 ... 
$ Embarked.S : num 0 1 0 1 1 1 0 1 0 1 ... 
$ Sex.female : num 0 1 0 0 1 0 1 0 1 0 ... 
$ Sex.male : num 1 0 1 1 0 1 0 1 0 1 ... 

Ich lief xgboost mit dem folgenden Code:

> param <- list("objective" = "multi:softprob", 
    +    "max.depth" = 25) 
    > xgb = xgboost(param, data = trmat, label = y, nround = 7) 
    [0] train-rmse:0.350336 
    [1] train-rmse:0.245470 
    [2] train-rmse:0.171994 
    [3] train-rmse:0.120511 
    [4] train-rmse:0.084439 
    [5] train-rmse:0.059164 
    [6] train-rmse:0.041455 

trmat ist:

trmat = data.matrix(train) 

und temat ist:

temat = data.matrix(test) 

und y die überlebte Variable:

y = train$Survived 

Aber wen ich laufe die Funktion vorhersagen:

> x = predict(xgb, newdata = temat) 
> x[1:10] 
[1] 0.9584613 0.9584613 0.9584613 0.9584613 0.9584613 0.9584613 0.9584613 
[8] 0.9584613 0.9584613 0.9584613 

Alle Wahrscheinlichkeiten vorhergesagt werden die gleichen sein. In der Python-Frage hat jemand gesagt, dass max.depth funktionieren würde, aber es hat nicht funktioniert. Was mache ich falsch?

Antwort

1

Sie müssen die Variable Survived in Ihrem Testset entfernen, um xgboost zu verwenden, da dies die Variable ist, die Sie vorhersagen möchten.

trmat = data.matrix(train[, colnames(train) != "Survived"]) 

Es sollte Ihr Problem lösen.

0

Ich kann zu spät kommen, um zu antworten, ich habe das gleiche Problem konfrontiert, als ich zuerst xgboost verwendete. Das Entfernen der Spalte "Survived" aus dem Zug sollte Ihr Problem lösen. Wenn wir die Spalte in train set haben, die wir für label in xgboost verwenden, sagt der Algorithmus schließlich alle Wahrscheinlichkeiten als gleich voraus.

+0

Ich schätze den Beitrag, aber ist das anders als die Antwort von jlesuffleur? – Gregor

+0

Die Säule sollte aus dem Zugverband entfernt werden. Jlesuffleur erwähnte es als Testset, obwohl der Code, den sie gab, für den Zug bestimmt war. –

Verwandte Themen