比较模型的分数

数据挖掘 xgboost 概率校准 分数
2022-02-11 03:08:27

我们得到了几个带有预测的模型。我们如何比较不同模型的分数?

我们假设我们得到了 xgboost 模型,并且每个模型的分数分布可能不同,那么我们如何比较分数呢?

2个回答

我将假设您使用 python 和 scikit-learn 主要是因为它具有提供模型指标的方法。

from sklearn.metrics import classification_report

# I presume that you've already trained a model and it's saved as xgb
# X_test is your testing X data (NOT THE DATA YOU TRAINED ON!!!!)
# Y_test is the corresponding correct values
print('Accuracy score is: ',accuracy_score(Y_test, xgb.predict(X_test)) * 100)
print(classification_report(Y_test, xgb.predict(X_test)))
>>> Accuracy score is:  61.13989637305699
>>>           precision    recall  f1-score   support

           0       0.38      0.98      0.55        47
           1       0.99      0.49      0.66       146

   micro avg       0.61      0.61      0.61       193
   macro avg       0.68      0.74      0.60       193
weighted avg       0.84      0.61      0.63       193

如您所见,有很多可用的信息。准确度得分是总体正确预测的百分比。分类报告更深入地介绍了模型对每个类别的预测效果,更多信息在这里交叉验证 SE 解释

你包括了那个probability-calibration有先见之明的标签:有一些技术,都称为“概率校准”,可以调整模型输出的分数以更好地拟合观察到的概率。在此之后,分数应该接近代表真实概率,因此应该可以直接比较。

最常用的方法是 Platt 标度和等渗回归。还有第三种和更新的方法,beta 校准,还有一些更奇特的方法。我命名的三个都适合新数据集的单变量函数,输入模型的分数并输出实际观察到的标签。Platt 缩放拟合 sigmoid 函数,beta 校准拟合比 sigmoid 更通用的参数模型,等渗拟合非参数、任意非递减函数。XGBoost 的输出偏离 0 和 1,因此 sigmoid 通常不适合,所以在这种情况下使用 beta 或 isotonic(或找到其他你喜欢的东西)。Isotonic,更知名,有更多的开源实现。