XGBoost 产生预测结果和概率
XGBoost produce prediction result and probability
我可能正在文档中查看它,但我想知道 XGBoost 是否有办法同时生成结果的预测和概率?就我而言,我正在尝试预测一个多 class class 运算符。如果我能 return 中等 - 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)
你可以试试pred_p = model.predict_proba(D_test)
我身边的一个例子(虽然不是多class):
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) 在评论中提到的注释:
predict_proba() method only exists for the scikit-learn interface
我可能正在文档中查看它,但我想知道 XGBoost 是否有办法同时生成结果的预测和概率?就我而言,我正在尝试预测一个多 class class 运算符。如果我能 return 中等 - 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)
你可以试试pred_p = model.predict_proba(D_test)
我身边的一个例子(虽然不是多class):
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) 在评论中提到的注释:
predict_proba() method only exists for the scikit-learn interface