实践中的机器学习

数据挖掘 机器学习 方法
2021-10-01 15:44:33

我参与了一个机器学习项目,我们处理相对较小的数据集。我注意到我们试图提高性能的方式基本上是尝试一堆具有不同超参数的不同模型,尝试一堆不同的特征集,等等。基本上,我们似乎相当随机地解决了这个问题,而且我们尝试过的任何事情都没有真正的理论基础。这让我大失所望,让我思考这是否是机器学习工程师在实践中所做的事情。

人们是否发现这相当普遍?您如何以非随机尝试一切的方式处理机器学习问题?

2个回答

以下是我的一些评论:

  • 首先,从方法论上讲,这种方法必须小心谨慎,但这样做的人很少小心。训练/评估许多不同类型的模型和/或参数相当于进行参数调整,即它本质上是训练模型因此,性能应该在验证集上进行评估,然后选择最佳模型,并且只有这个模型应该在(看不见的)测试集上进行评估。一个常见的错误是在同一个测试集上评估所有模型并假设这给出了真实的性能。这是错误的,最好的性能可能是偶然获得的,因此真正的性能可能会更低。
  • 虽然尝试最大化性能是正常的,并且在某种程度上这可能涉及大量的实验评估,但在我看来,盲目地尝试许多不同的模型/参数是非常糟糕的做法,它很少会带来最好的结果(但它可能会导致好结果的错觉,见上点)。大多数时候,通过对数据进行细粒度分析,包括研究有关上下文的专家知识,比盲目依赖黑盒算法可以获得更多收益。一个简单的例子是特征工程:有时对特征进行一些简单的重新设计可以显着提高性能,但是没有 ML 技术可以替代它(DL 方法可能接近它,但通常计算成本要高得多)。
  • 最后一点:追求最佳性能常常被误导。有时性能被用作没有正确完成工作的懒惰借口:生产中真正重要的是什么?F1 分数真的高出 0.3% 还是一个可解释的结果?选择评估措施是为了真正反映预测的质量还是仅仅“因为它是标准的”?以及训练/测试集,我们是否知道生产数据看起来是否完全相同?如果不是,ML 方法是否足够强大以处理这些变化?在优化性能时,通常依赖于模型捕捉最细微的模式,这意味着在生产中过度拟合和表现平庸的风险更高。更一般地说,关于可解释性、人类行为者在 ML 过程中的作用,还有更多问题(至少在研究中),当然还有机器学习方法的计算复杂度和环境成本。所有这些点都没有反映在绩效衡量标准中,但它们很重要。

总的来说,我认为这种方法是平庸的:它不优雅,容易出错(通常不会被检测到),而且目光短浅,因为它忽略了 ML 系统质量的其他方面。

顺便说一下,这种方法可以自动化。如果我的工作可以完全由程序完成,我个人不会感到非常自豪(甚至可能会担心)。

人们是否发现这相当普遍?

在研究中,我的猜测是这在低水平的出版物中很常见,但它不太可能在任何有声望的期刊/会议上通过(因为专家审稿人通常可以检测到它)。

您如何以非随机尝试一切的方式处理机器学习问题?

就是这样,没有食谱……但这就是它的美妙之处,不是吗?:)

在我看来,这有点像医学:一个好的医生有很好的直觉,因为他们有扎实的理论背景和大量的实践。他们不只是遵循一些死板的手册,他们将患者视为一个独特的个体,他们尽最大努力了解问题的各个方面。

在实践中,需要解释/记录模型性能中的所有“挤压”,这意味着理论是强制性的……在学术界,情况并非如此……

我投入生产的所有模型都需要简单、易于扩展和更少的“黑匣子”,否则 MRM 团队将不会验证和批准生产(高风险需要资金)。

例如:如果 logit 或 tree 给出的结果与 ANN 接近。将使用 logit 或树,因为我可以轻松解释它们,并且理论足以通过 MRM 验证和接受。

要了解在非学术界所做的事情,就是参加像 kaggle 这样的比赛(他们使用大量真实世界的数据),或者在互联网上找到任何开放的数据集并提问和回答问题。