在您为预测建模问题开发了机器学习模型后,您如何知道模型的性能是否良好?
这是初学者经常问我的问题。
作为初学者,您常常会寻求这个问题的答案,例如,您想有人告诉您准确率达到 X% 或错误得分 X 是否算好。
在这篇文章中,您将了解如何自己明确地回答这个问题,以及如何知道您的模型技能是否出色。
阅读本文后,你将了解:
- 我们可以使用基线模型来发现您问题中性能的基石,所有其他模型都可以据此进行评估。
- 所有预测模型都存在错误,鉴于数据的随机性质和算法,在实践中不可能获得完美得分。
- 应用机器学习的真正工作是探索可能模型的空间,并根据您特定数据集上的基线发现良好模型得分是什么样的。
让我们开始吧。

如何判断您的机器学习模型性能是否良好
图片作者:dr_tr,部分权利保留。
概述
本文分为 4 部分;它们是:
- 模型技能是相对的
- 基线模型技能
- 最佳得分是多少?
- 发现模型技能的极限
模型技能是相对的
您的预测建模问题是独一无二的。
这包括您拥有的具体数据、您使用的工具以及您将达到的技能。
您的预测建模问题以前从未被解决过。因此,我们不知道好的模型是什么样的,也不知道它可能具有什么样的技能。
您可能根据领域知识对熟练的模型是什么样的有一些想法,但您不知道这些技能得分是否可以实现。
我们所能做的最好的就是将机器学习模型在您特定数据上的性能与其他在相同数据上训练的模型进行比较。
机器学习模型的性能是相对的,关于好模型能达到什么得分的想法只有在与其他在相同数据上训练的模型进行比较时才有意义,也才能被解释。
基线模型技能
由于机器学习模型的性能是相对的,因此开发一个健壮的基线至关重要。
基线是针对您的预测建模问题进行预测的简单且易于理解的程序。该模型的技能为在您特定数据集上机器学习模型的最低可接受性能提供了基础。
基线模型的绩效结果是评估您数据上所有其他模型技能的起点。
基线模型的三个示例包括
- 对于回归问题,预测平均结果值。
- 对于分类问题,预测众数结果值。
- 对于单变量时间序列预测问题,将输入作为输出(称为滞后)。
然后,您可以将您问题上的基线性能作为衡量标准,用于比较和评估所有其他模型。
如果模型的性能低于基线,那可能出了问题(例如,存在错误)或者模型不适合您的问题。
最佳得分是多少?
如果您正在处理分类问题,最佳得分是 100% 的准确率。
如果您正在处理回归问题,最佳得分是 0.0 的误差。
这些得分是无法实现的上限/下限。所有预测建模问题都有预测误差。要有预期。误差来自多种来源,例如
- 数据样本不完整。
- 数据中的噪声。
- 建模算法的随机性。
您无法获得最佳得分,但了解您选择的度量标准可能达到的最佳性能是很有益的。您知道真实的模型性能将介于基线和最佳可能得分之间。
相反,您必须搜索数据集上可能模型的空间,并发现好坏得分是什么样的。
发现模型技能的极限
一旦有了基线,您就可以探索您的预测建模问题的模型性能范围。
事实上,这是项目中最艰巨的工作和目标:找到一个模型,您可以证明它能在您的特定数据集上可靠地做出预测。
这个问题有很多策略;您可能想考虑其中两种:
- 从高处着手。选择一种复杂且在各种预测模型问题上表现良好的机器学习方法,例如随机森林或梯度提升。在您的问题上评估模型,并使用结果作为近似的顶端基准,然后找到达到类似性能的最简单模型。
- 穷举搜索。评估您能想到的所有机器学习方法,并选择相对于基线表现最佳的方法。
“从高处着手”的方法速度很快,可以帮助您定义问题上模型技能的边界,并找到能够达到相似结果的简单模型(例如,奥卡姆剃刀)。它还可以帮助您快速了解问题是否可解/可预测,这很重要,因为并非所有问题都是可预测的。
“穷举搜索”速度较慢,主要用于模型技能比其他任何方面都更重要的长期项目。我经常采用这种方法的变体,批量测试相似方法组,并称之为抽样检查方法。
这两种方法都会为您提供一组模型性能得分,您可以与基线进行比较。
您将知道什么是一个好的得分,什么是一个坏的得分。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
总结
在这篇文章中,您了解到您的预测建模问题是独特的,并且好的模型性能得分只能相对于基线性能来了解。
具体来说,你学到了:
- 我们可以使用基线模型来发现您问题中性能的基石,所有其他模型都可以据此进行评估。
- 所有预测模型都包含错误,鉴于数据的随机性质和算法,在实践中不可能获得完美得分。
- 应用机器学习的真正工作是探索可能模型的空间,并根据您特定数据集上的基线发现良好模型得分是什么样的。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
好的模型有哪些标准要求或标准?
好的模型有哪些主要方面?
有很多评估指标,如准确率、AUC、顶部提升、时间等,如何确定标准标准?
也许选择一个能捕捉您和利益相关者对模型在领域中性能看重的度量指标。
良好性能的最低要求是模型性能优于朴素模型。
我希望给分类准确率一个背景。您有什么建议如何做到这一点吗?我就是不确定我的准确率应该与什么比较。具体来说,我正在对一台手压水泵的用户类型(男性、女性或儿童)进行分类,分类准确率约为 68%。据我所知,没有人做过这个,所以我很难向别人解释为什么这好或坏。我不能简单地说,“之前这个问题的最佳分类是 58%,所以这个更好”,就像其他人可以对 MNIST 或 ImageNet 那样,有已发布的先前性能。非常感谢任何建议!
很好的问题。
最佳方法是开发一个朴素或基线模型。在分类的情况下,它是零预测,例如将所有记录分类为一个类别。这是所有模型都必须超越的最差技能,才能证明它们具有技能。
有技能的模型可以用它们高于该基线的准确率来解释。
如果所有模型的准确率都相同,是否有什么问题?一切正常吗?
也许您的问题太简单或太难了,所有模型都找到了相同的解决方案?
机器学习的测试准确率的标准或可接受是多少?
比朴素预测好。对于分类,它是多数类别分类器。
https://machinelearning.org.cn/how-to-develop-and-evaluate-naive-classifier-strategies-using-probability/
那么,这是否意味着对于回归模型,我们查看误分类准确率来判断它们是否“好”?/对于分类模型,我们使用准确率??看起来误分类只是 1-准确率,所以我不确定。我有点困惑,因为我刚开始。谢谢!
“误分类”无法为回归计算。
看这里
https://machinelearning.org.cn/classification-versus-regression-in-machine-learning/
为什么任何机器学习模型在给定数据集上都能达到最佳效果?
好问题。
因为您将结果与其他方法进行比较,并发现它表现最佳。
92% 的准确率算好吗?
“好”是相对于朴素模型的。
也许重新阅读上面关于此主题的教程。
嗨,Jason,
您的建议对我从事预测问题非常有帮助。我目前正在处理一个薪资预测模型,并分别使用多元回归和随机森林。根据您的建议,我正在使用 sklearn 的 dummy regression 来建立我的基线模型,并预测预测变量的平均值。
然而,这给了我一个 1.0 的 r-squared 值。如果这个值是完美的,它如何用于建立基线?我可能做错了什么,希望能得到您的指导。我一直在理解基线方面卡了很长时间。
不客气。
干得好!
如果基线是完美的,您可能存在错误,或者问题很简单/琐碎,不需要机器学习。
尊敬的Jason博士,
谢谢。在另一个教程博客中,您提到了“DummyRegressor”是回归模型的基准模型。
请问三个问题:
* 如何为给定模型找到基准模型:一个一般性问题,如果使用 sklearn.ensemble.RandomForestClassifier(例如),在哪里找到基准模型。或者在使用“特定模型”时,在哪里找到基准模型?
* 给定特定模型,在哪里找到基准模型。例如,如果我们使用 from sklearn.tree import DecisionTreeRegressor,DecisionTreeRegressor 的基准模型是什么?
* 在本教程中,您给出了三个例子
我知道平均值、众数和预测的意思。但我们计算平均值、众数或预测的是什么?是实际数据、测试数据、训练数据吗?
谢谢你,
悉尼的Anthony
“朴素”模型和“基准”模型是不同的。
“朴素”模型是为度量指标选择的,而不是为模型选择的。例如,参见此处有关分类度量指标朴素模型的说明。
https://machinelearning.org.cn/naive-classifiers-imbalanced-classification-metrics/
“基准”模型是在集成中使用的一个模型,例如随机森林之类的集成中的决策树。指定为模型的参数。
尊敬的Jason博士,
谢谢你,
悉尼的Anthony
不客气。
您好,感谢您提供如此有用的主题。
事实上,我训练机器进行机器翻译、查找相似词等。
假设我不知道目标语言……而机器返回给我 70% 的准确率……我应该相信它吗?
这种情况经常发生,幸运的是,我两种语言都懂。所以我可以看到这个“70%”是真实的还是错误的。
我如何在此决定,尤其是我不知道目标语言时?
准确率不是翻译的适当度量。
信任模型是通过将结果与其他方法进行比较以确认它们是否具有技能,审查性能指标,检查预测来获得的。
如果您不懂该语言,也许可以找一个懂该语言的人,花几美元雇佣他们来审查结果。
如何轻松学习数据科学?
构建任何机器学习模型的步骤是什么?如何检查该模型对数据集是否好或坏?
通常,正确定义问题是成功的一半。您可能想阅读这篇帖子:https://machinelearning.org.cn/working-machine-learning-problem/