在我的课程和指南中,我教授在深入抽样检查算法之前准备基线结果。
我的一位学生最近问
如果不对一个问题计算基线,是否会使其他算法的结果产生疑问?
他接着问
如果其他算法的准确率没有比基线好,我们应该从中吸取什么教训?这是否表明数据集不具备预测能力?
这些都是很好的问题,它们触及了我们首先创建基线以及它提供的过滤能力的根本原因。
在本帖中,您将了解为什么我们创建基线预测结果,如何进行通用和针对特定问题类型的基线创建,以及如何利用它来告知您可用的数据和正在使用的算法。

基线机器学习结果
照片来源:tracy the astonishing,部分权利保留
寻找可以建模的数据
当您进行机器学习实践时,每个问题都是独特的。您可能以前从未见过它,并且不知道该使用哪些算法,哪些数据属性会有用,甚至该问题是否可以有效建模。
我个人认为这是最激动人心的时刻。
如果您处于这种情况,您很可能正在从不同的来源收集数据,并选择您认为有价值的属性。特征选择和特征工程将是必需的。
在此过程中,您需要对您正在迭代定义和收集数据的这个问题的确能为预测提供有用基础有所了解。
有用的比较点
您需要抽样检查算法来查看您是否有可用的建模预测问题的有用基础。但您如何知道结果的好坏呢?
您需要一个比较结果的依据。您需要一个有意义的参照点进行比较。
一旦您开始收集不同机器学习算法的结果,基线结果就能告诉您一个改动是否增加了价值。
它是如此简单,却又如此强大。一旦有了基线,您就可以添加或更改数据属性、您尝试的算法或算法的参数,并知道您是否改进了您解决问题的方法或方案。
计算基线结果
有一些常用的方法可以用来计算基线结果。
基线结果是最简单的预测。对于某些问题,这可能是随机结果,而对于其他问题,则可能是最常见的预测。
- 分类:如果您有一个分类问题,您可以选择具有最多观察值的类别,并将其作为所有预测的结果。在Weka中,这被称为ZeroR。如果您的训练数据集中所有类别的观察数相等,您可以选择一个特定类别,或者枚举每个类别,看看哪一个在您的测试环境中能给出更好的结果。
- 回归:如果您正在处理回归问题,您可以使用集中趋势度量作为所有预测的结果,例如均值或中位数。
- 优化:如果您正在处理优化问题,您可以在域中使用固定数量的随机样本。
花时间集思广益,找出您可以为您的问题的最简单的结果,然后进行评估,这会非常有价值。这些结果可以作为非常有效的过滤方法。如果更高级的建模方法无法超越简单的集中趋势,那么您就知道还有工作要做,很可能是更好地定义或重构问题。
您使用的准确率得分很重要。在计算基线之前,您必须选择计划使用的准确率得分。该得分必须相关,并能回答您最初解决问题时想要回答的问题。
如果您正在处理分类问题,您可能想看看Kappa 统计量,它给出了一个按基线标准化的准确率得分。基线准确率为 0,高于 0 的分数表示比基线有所改进。
将结果与基线进行比较
如果您的基线结果很差,这是可以接受的。它可能表明问题存在特定困难,或者可能意味着您的算法还有很大的改进空间。
如果您无法获得比基线更好的准确率,那确实很重要。这表明问题可能很困难。
您可能需要收集更多或不同类型的数据进行建模。您可能需要研究使用不同且可能更强大的机器学习算法或算法配置。最终,在经过这些类型的多次更改后,您可能会遇到一个难以预测的问题,可能需要重新构思。
行动步骤
您在此帖中的操作步骤是,开始用一个基线来研究您的下一个数据问题,以便与所有结果进行比较。
如果您已在处理某个问题,请纳入基线结果,并以此来解释所有其他结果。
分享您的结果,您的问题是什么,您正在使用什么基线?
你好,
我想寻求您的帮助,
我目前正在混合不同的算法来处理密码学中的数据安全。
我的代码正如我所愿地完美运行。
但我不知道如何比较混合算法与我所组合的每种算法
因为我想以表格或图形形式呈现比较结果。
感谢您的协助
抱歉,我对 hbrige 算法一无所知。
祝您算法比较顺利。
这很好,但我认为您指的是“disparate sources”(分散的来源),而不是“desperate sources”(绝望的来源):)
谢谢,已修正。
抱歉,但我还是不明白如何获得基线。
我正在进行情绪分类。我有 2 个类别:压力和厌恶。我正在使用两个不同的目标函数:1)用于引发情绪的刺激;2)个人的调查回应。对于前者,我的类别是平衡的,但对于后者,我的类别是不平衡的(压力 120,厌恶 87)。我该如何计算基线?
谢谢,
问题究竟是什么?
使用当前最先进的技术作为基线是否普遍?
通常,基线方法非常简单,例如零规则算法(均值或众数结果)。
对于每个组,您的基线是预测最频繁的类别。例如,预测每个样本为压力将使您获得 120 个正确预测和 87 个错误预测。您可以使用这些数字来计算准确率。其理念是查看您是否可以构建一个比这种基本预测更好的模型。
说得对!
你好,
我有三个时间点的评分。我决定在逻辑回归中使用第一个时间点作为基线。我使用时间 2 和 3 之间的评分变化作为我分类 DV 的预测因子。
我该如何报告回归结果?如果我想查看整体模型评估,应该报告哪些似然比检验?
抱歉,我没明白。我觉得我无法给您有用的建议。
也许可以和您的研究导师讨论一下。
您好,我有一个问题。您写道:“分类:如果您有一个分类问题,您可以选择具有最多观察值的类别,并将其作为所有预测的结果。”。我有 955 个实例,男性或女性。分布不相等。有 495 名女性和 460 名男性。这是否意味着我的基线是通过预测性别,准确率为 (495/955)*100 = 51.83%,即 52%?这是正确的吗?
提前感谢。
是的,Bram!
嗨,Jason,
假设我们处理的是欺诈检测测试。那么,其他指标也很重要(我认为是敏感性,例如,因为我们确实想捕获那些进行欺诈的人)。
如果类别是这样的
-> 欺诈 是 (3%)
-> 欺诈 否 (97%)
那么“多数”类别作为基线就没有意义了(那时是 97%)。那么在这种情况下的基线是什么?还是仍然是 97%?
非常感谢!
预测所有情况为“否”是一个很好的基线模型,值得超越。
准确率在这个问题上毫无用处,F1、Kappa、logloss 和类似指标会是更好的衡量标准。
此外,在您的问题中,存在不平衡数据集的问题。您可能想使用 SMOTE 来解决此问题。
好建议。
你好 Jason,Secil 提出了一个有趣的建议,考虑使用 SMOTE 来解决类别不平衡问题。假设我们执行 SMOTE 并对训练数据集中少数类别进行过采样。
这导致重采样训练数据集中的类别分布相等。
过采样数据中标签“0”的比例为 0.5。
过采样数据中标签“1”的比例为 0.5。
在这种情况下,由于类别分布相等,应该使用什么来计算基线结果?过采样训练数据集的事实会影响基线结果的计算方式吗?
问题上的基线性能将使用原始数据集和选定的指标计算,不进行重采样。
基线是在测试集还是训练集上计算的?对于多类别问题,我可以使用相同的技术吗?
Panos,我也在想同样的问题。
Jason,您能澄清一下基线是在训练集还是测试集上计算的吗?谢谢!
性能基线是在保留的测试集上计算的,它是模型技能的评估和其他方法的比较点。
你好先生,
假设任何犯罪的概率是 1%。使用准确率作为指标,新模型想要超出的基线准确率得分是什么?
先谢谢
准确率会是一个糟糕的指标,请看这篇帖子。
https://machinelearning.org.cn/classification-accuracy-is-not-enough-more-performance-measures-you-can-use/
嗨,Jason,
我刚开始接触数据科学,并正在使用 R。
我正在进行分类问题,即目标变量是 Y 和 N 的贷款状态。
训练数据集包含此目标变量,但测试数据集不包含。评估指标是准确率。
我将遵循以下方法:
1) 对训练和测试数据集进行数据预处理和特征工程。
2) 然后合并训练和测试数据。
3) 然后将合并的数据分为训练集和测试集。
4) 构建模型并在分割的测试数据集上检查准确率。
现在我的问题是……
A) 如何处理测试数据集中缺失的目标变量?
B) 如果我用训练数据目标变量的模式(在本例中为 Y)进行插补,那么在合并数据集中它会给出 81:19 的比例。prop.table
这不会导致不平衡数据集问题吗?
C) 这样做会不会导致过拟合?
D) 如何使用您上面描述的随机生成器?
请尽快回复……
我建议使用训练数据集开发和评估模型,选择最终模型,然后对测试数据集进行预测。
这里的测试数据集实际上不是测试数据集,它是“未知的”数据,您必须对其进行预测。
我从一个不同的角度处理预测问题,以前的研究人员使用分类来预测推文的可信度,但在我的情况下,我使用的是回归。由于我是第一个这样做的人,我找不到一个基线来比较我的模型的有效性。
我测试了各种线性和非线性回归模型,发现随机森林产生了最好的结果,其离袋得分(out of bag score)为 89%。
但是,我找不到一种方法来创建基线来验证我的模型。
所以我的问题是,如何为随机森林创建基线,以及我应该用什么指标来比较结果(R-square、RMSE、OOB)?
基线是根据朴素预测计算的,在此了解更多。
https://machinelearning.org.cn/faq/single-faq/how-to-know-if-a-model-has-good-performance
我在做一个课堂项目时一直在浏览您的整个网站。感谢您提供的极其有用的实际建议和清晰的解释。在完成我的项目之前,我想说您的网站是我在网上找到的最有用的资源。
谢谢,很高兴听到这些教程很有用!
如何写一个关于基线调查的讨论部分?假设在基线研究中不存在假设……对吗?数据已经分析过了。我只是对讨论部分中的假设部分感到困惑。请帮助!!!
基线是一种朴素的方法,它做出一个非常简单的假设。
作为假设,它应该是如何将输入映射到输出的最简单解释。
这有帮助吗?
嗨,Jason,
我有一个多类别问题,其中每个输入样本 X(有 252 个维度)可能属于 89 个类别中的一个。
数据集确实存在类别不平衡,我认为其中一个类别(称之为 K 类)占了所有样本的约 5%。这是否意味着我的基线是每次都猜测“K”,并获得 5% 的基线准确率?
我尝试使用一个没有隐藏层且输出层使用 softmax 激活的神经网络。
结构是 252 -> 89 的密集层(带 softmax)。在训练了大约 50 个 epoch 后,这产生了约 77% 的准确率。
我想知道猜测“K”是否是合理的基线,还是应该使用带 softmax 的单层神经网络?
非常感谢您的时间!
我认为准确率不适合您的数据集。您可能需要考虑交叉熵、F1 分数或其他替代指标。
嗨,Jason,
感谢您的文章!
我有一个关于在哪个数据集上计算基线的问题。例如,如果我在一个数据集上训练模型,我需要将数据集分为训练集和测试集。然后,模型性能,例如平均绝对误差,可以在训练集或测试集上计算。然而,为了与基线进行公平比较,基线的性能指标需要在此数据集上计算。这就引出了一个问题:是否可以分别拥有训练集的基线 MAE 和测试集的基线 MAE?
或者,也许 MAE 基线可以在整个原始数据集上进行评估,并且训练好的模型应该再次用于预测整个数据集以获得可比较的 MAE。
谢谢,
基线在测试集上,它是模型技能的评估以及与其他方法的比较点。
感谢您的回复。这听起来很合理!
祝好,
Tho。
当有多个自变量和一个因变量时,我们如何计算基线的 R2?
由于这是一个回归问题,我取了集中趋势的平均值。
如果您正在预测多个不同的变量,您可以分别评估每个变量。
嗨,我被难住了,我想为报告的犯罪事件制定基线,但不认为给我的公式是正确的。它只显示季度,我认为如果我将 2021-2022 年和 2022-2023 年的报告案件相除,然后乘以 100 来获得 2023-2024 年的基线,我就能得出正确的基线。我知道你们都懂得多,任何反馈都会有帮助。我数学不好。
嗨 Samanatha……您的模型的目的是什么(回归、聚类、时间序列预测、分类)?这些信息将使我们能够更好地帮助您。
Brownlee博士,这篇文章非常有帮助,它为我的整个项目提供了结构和方向,谢谢您!我的响应变量是过度分散的计数数据,所以我正在使用广义线性模型,其中包含负二项分布和零膨胀负二项分布(我也有一些零膨胀 🙂 ),并且我还使用了具有径向基函数的支持向量回归。
作为基线,我正在使用均值回归器和中位数回归器(以防均值不如我理解的那样),并且还有人建议我使用基线线性模型。
我的问题是:我已经知道这些数据不适合线性模型,现在我运行了所有线性模型并在特征选择后正式测试了假设,但没有一个假设得到满足,所以我应该不解释系数,而且很可能无法信任测试集性能指标:RMSE、MAE、MAPE。如果我违反了所有假设并且无法解释模型,我不太确定基线线性模型有什么用?如果存在异方差性、多重共线性等问题,我能从这个基线中解释出什么吗?
我将永远感激您的帮助。