R中的XGBoost预测器为所有行预测相同的值

2024-10-01 13:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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问题中,有人说最大深度会有用,但没用。我做错什么了?在


Tags: dataparamtrainmatrixnumintrmselevels
2条回答

为了使用xgboost,必须删除测试集中的Survived变量,因为这是您要预测的变量。

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

它应该能解决你的问题。

我可能回答晚了,我第一次使用xgboost时也遇到过同样的问题。把“幸存”一栏从列车组中删除应该能解决你的问题。如果在xgboost中我们在train set中有一列用于标记,那么算法最终会预测所有概率都是相同的。

相关问题 更多 >