我们得到了几个带有预测的模型。我们如何比较不同模型的分数?
我们假设我们得到了 xgboost 模型,并且每个模型的分数分布可能不同,那么我们如何比较分数呢?
我们得到了几个带有预测的模型。我们如何比较不同模型的分数?
我们假设我们得到了 xgboost 模型,并且每个模型的分数分布可能不同,那么我们如何比较分数呢?
我将假设您使用 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,更知名,有更多的开源实现。