【问题标题】:XGBoost produce prediction result and probabilityXGBoost 产生预测结果和概率
【发布时间】:2020-07-19 18:49:11
【问题描述】:

我可能正在文档中查看它,但我想知道 XGBoost 是否有办法生成结果的预测和概率?就我而言,我试图预测一个多类分类器。如果我能返回 Medium - 88%,那就太好了。

  • 分类器 = 中
  • 预测概率 = 88%

参数

params = {
    'max_depth': 3,
    'objective': 'multi:softmax',  # error evaluation for multiclass training
    'num_class': 3,
    'n_gpus': 0
}

预测

pred = model.predict(D_test)

结果

array([2., 2., 1., ..., 1., 2., 2.], dtype=float32)

用户友好(标签编码器)

pred_int = pred.astype(int)
label_encoder.inverse_transform(pred_int[:5])
array(['Medium', 'Medium', 'Low', 'Low', 'Medium'], dtype=object)

编辑: @Reveille 建议 predict_proba。我没有实例化 XGBClassifer()。我可以做?如果是这样,我将如何修改我的管道以使用它?

params = {
    'max_depth': 3,
    'objective': 'multi:softmax',  # error evaluation for multiclass training
    'num_class': 3,
    'n_gpus': 0
}

steps = 20  # The number of training iterations

model = xgb.train(params, D_train, steps)

【问题讨论】:

  • 您要求的结果不清楚; “中等 - 88%”是什么意思?
  • @desertnaut 更新了我的问题

标签: python machine-learning xgboost


【解决方案1】:

你可以试试pred_p = model.predict_proba(D_test)

我有一个例子(虽然不是多类):

import xgboost as xgb
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

X, y = make_moons(noise=0.3, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

xgb_clf = xgb.XGBClassifier()
xgb_clf = xgb_clf.fit(X_train, y_train)

print(xgb_clf.predict(X_test))
print(xgb_clf.predict_proba(X_test))


[1 1 1 0 1 0 1 0 0 1]
[[0.0394336  0.9605664 ]
 [0.03201818 0.9679818 ]
 [0.1275925  0.8724075 ]
 [0.94218    0.05782   ]
 [0.01464975 0.98535025]
 [0.966953   0.03304701]
 [0.01640552 0.9835945 ]
 [0.9297296  0.07027044]
 [0.9580196  0.0419804 ]
 [0.02849442 0.9715056 ]]

@scarpacci (ref) 在 cmets 中提到的注意事项:

predict_proba() 方法只存在于 scikit-learn 接口

【讨论】:

  • 我没有实例化 XGBClassifier 来使用它(也许我应该是?)。 params = { 'max_depth': 3, 'objective': 'multi:softmax', # 多类训练的错误评估 'num_class': 3, 'n_gpus': 0 } steps = 20 # 训练迭代次数 model = xgb.火车(参数,D_train,步骤)
  • 如果predict 方法运行良好(从您的代码中似乎可以),那么predict_proba 方法也应该运行良好。我能想到的唯一原因是您的案例是多类的。 This 可能会有所帮助。
  • 我明白了。您出于某种原因不想使用 scikit-learn 界面?
  • 我想我必须修改它才能使用它。不反对,只是让我的管道以不同的方式建造。感谢您的帮助!
  • 完美!谢谢你。非常感谢。
猜你喜欢
  • 2022-11-25
  • 2019-07-21
  • 1970-01-01
  • 2016-05-23
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多