我在Python中查看了这篇文章,但是我想要一个R语言的解决方案。 我在研究Kaggle的泰坦尼克号数据集,看起来像这样:
'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 ...
这是在我使用虚拟变量之后。我的测试集:
^{pr2}$我使用以下代码运行xgboost:
> 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是:
trmat = data.matrix(train)
特玛特是:
temat = data.matrix(test)
y是幸存变量:
y = train$Survived
但我运行预测函数:
> 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
所有的可能性都是一样的。在python问题中,有人说最大深度会有用,但没用。我做错什么了?在
为了使用xgboost,必须删除测试集中的
Survived
变量,因为这是您要预测的变量。它应该能解决你的问题。
我可能回答晚了,我第一次使用xgboost时也遇到过同样的问题。把“幸存”一栏从列车组中删除应该能解决你的问题。如果在xgboost中我们在train set中有一列用于标记,那么算法最终会预测所有概率都是相同的。
相关问题 更多 >
编程相关推荐