xgboost:虽然合理的准确性,但是巨大的logloss

时间:2017-06-20 18:56:03

标签: machine-learning xgboost cross-entropy bigdata

我在二进制分类问题上训练xgboost分类器。它可以产生70%的准确预测。 logloss非常大,为9.13。我怀疑这可能是因为一些预测非常偏离目标,但我不明白为什么会发生这种情况 - 其他人报告使用xgboost对相同数据进行了更好的logloss(0.55 - 0.6)。

exports.yourDeleteFunction = functions.database.ref(<your_ref>).onWrite(function (event) {

  // Exit if record still exists
  if (event.data.exists()) {
    return;
  }

  // Your code to handle delete

});

产生以下输出:

from readCsv import x_train, y_train
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, log_loss
from xgboost import XGBClassifier

seed=7
test_size=0.09

X_train, X_test, y_train, y_test = train_test_split(
    x_train, y_train, test_size=test_size, random_state=seed)

# fit model no training data
model = XGBClassifier(max_depth=5,
                      learning_rate=0.02,
                      objective= 'binary:logistic',
                      n_estimators = 5000)
model.fit(X_train, y_train)

# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]

accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

ll = log_loss(y_test, y_pred)
print("Log_loss: %f" % ll)
print(model)

任何人都知道我的高logloss的原因?谢谢!

1 个答案:

答案 0 :(得分:2)

解决方案:使用model.predict_proba(),而不是model.predict()

这将logloss从7+减少到0.52,这是预期的范围。 model.predict()输出的值非常大,如1e18,它似乎需要通过一些函数来使它成为一个有效的概率分数(介于0和1之间)。