我如何比较两种分类算法?

数据挖掘 分类 统计数据 xgboost 准确性
2022-03-12 09:50:00

全部,

我有两个分类器(xgboost 和光梯度增强)来预测是否是癌症。当我使用 roc_auc 作为我的评分方法时,我得到 xgboost 为 0.75,光梯度提升为 0.76。显然他们非常接近!我如何评估它们在统计上是否不同?

我使用了 mcnemars 测试:

从 mlxtend.evaluate 导入 mcnemar_table 从 mlxtend.evaluate 导入 mcnemar

lgbm_pred = second_best.predict(x_test)
xg_pred = chosen_model.predict(x_test)

tb = mcnemar_table(y_target=y_test, 
                   y_model1=lgbm_pred, 
                   y_model2=xg_pred)

chi2, p = mcnemar(ary=tb, corrected=True)
print('chi-squared:', chi2)
print('p-value:', p)

输出为:卡方:2.25 p 值:0.13361440253771584,所以我不会拒绝模型性能相等的空值。(希望我正确使用它,所以如果我不是,请告诉我。)

我已经看到了一些关于使用“置换测试”等的线程。但我不确定如何解释这些,而且我认为这些测试只有在你的样本量很小的情况下才适用,而我没有。

https://stackoverflow.com/questions/52373318/how-to-compare-roc-auc-scores-of-different-binary-classifiers-and-assess-statist

基本上我如何评估哪个分类器更好?在理想的世界中,我想要一个能够预测癌症的分类器。我可以比较模型的精度吗?什么是最好的方法 - 有没有人也知道我可以如何使用置换测试?

2个回答

一个模型的性能可以从几个维度来判断:

  1. 准确性 - 训练测试验证是否表现良好?

  2. 过度拟合 - 训练分数和验证分数之间的差异是否最小?

  3. 效率 - 模型轻量级,计算速度快吗?

  4. 复杂性 - 模型是否易于解释,是否使用最少的转换?

  5. 可部署性 - 我能否轻松部署和使用模型?

而不是从纯粹的统计角度(只是维度 1 和 2)从各个角度判断模型。如果它们的性能仍然与实际上相等(对于在同一数据集上执行的两个类似模型来说不足为奇)。

是的,当拥有相对大的数据时,排列测试非常慢。

出于这个原因,您引用的问题的答案是,boostrapping 是置换测试的替代方法。如果您想进行排列测试,那么该问题中有代码。

但是,一些从业者认为做交叉验证是比较模型的更好方法。本文讨论了通过交叉验证进行模型比较的频率论和贝叶斯方法。

主要思想是,我为我的模型计算 10 个不同折叠的交叉验证 AUC。然后我有模型 1 的 10 个样本的 AUC 和模型 2 的 10 个样本的 AUC。然后我执行一个测试来比较这些 AUC 分数(它可以是置换检验或 t 检验)。