初学者在从事机器学习或数据科学项目时经常会遇到一些常见的错误?在这里我们列出这些最常见的错误。
在机器学习中,构建产品或解决方案的方法有很多,每种方式的假设情况都不一样。很多时候,浏览和识别哪些假设是合理的不是很容易。刚刚接触机器学习的人都会犯错误,而事后看来往往会感到不应该。本文创建了新手机器学习工程师制作的一些常犯的错误清单。希望你能从这些常见错误中吸取教训,并创造更多可靠的解决方案,从而带来真正的价值。
将默认损失函数视为理所当然
在刚刚入门的时候,均方误差非常好,可以说这是一个惊人的默认设置,但是对于真实世界的应用程序来说,这种未经专门设计的损失函数很少能给出***解。
以欺诈检测为例。为了与业务目标保持一致,你真正想要的是按照由于欺诈而损失的美元金额成比例地惩罚漏报。而使用均方误差可能会给你良好的结果,但永远不会给你当前***进的结果。
成为机器学习工程师|第3步:选择你的工具看看这篇文章,了解你可以使用的不同的ML工具。
要点:始终建立一个与你的解决方案目标非常吻合的自定义损失函数。
针对所有问题使用一种算法/方法
许多人将完成他们的***个教程,并立即开始使用他们可以想象的每个用例中学到的相同算法。这是很熟悉的,他们认为它可以像任何其他算法一样工作。这是一个错误的假设,并且可能会导致糟糕的结果。
让你的数据为你选择模型。对数据进行预处理后,将其输入许多不同的模型并查看结果。你将会很好地了解哪些模型最适合工作,哪些模型效果不佳。
成为机器学习工程师|第2步:选择一个流程查看这篇文章,并掌握你的流程。
要点:如果你发现自己一遍又一遍地使用相同的算法,这可能意味着你没有得到***的结果。
忽略离群值
基于上下文,离群值可能很重要或者完全忽略。以污染预测为例,空气污染可能会出现大的峰值,***看看它们并理解它们发生的原因。在由某种类型的传感器错误引起的异常情况下,忽略它们并从数据中删除是安全的。
从模型角度来看,有些人对异常值比其他人更敏感。以Adaboost为例,它对离群值赋予极大的权重,而决策树可能只是简单地将每个异常值视为一个错误的分类。
成为机器学习工程师|第2步:选择一个流程,通过***实践来避免这种错误
要点:在开始工作之前,始终密切关注你的数据,并确定是否忽略离群值或仔细查看离群值
没有正确处理周期性特征
一天中的小时、一周中的几天、一年中的几个月以及风向都是周期性特征的例子。许多新的机器学习工程师不认为可以将这些功能转换为可以保留诸如23小时和0小时等彼此靠近且不远的信息的表示。
以小时为例,处理这个问题的***方法是计算sin和cos分量,以便将你的循环特征表示为(x,y)圆的坐标。在这个表示小时内,23和0小时在数字上是紧挨着的,就像它们应该是一样。
很多人都要求提供代码示例:在这里(https://gist.github.com/anonymous/7ce6274c630dabd70960c6d7fdd6c580)
要点:如果你有周期性的功能,而且你没有转换它们,那么你就开始使用模型垃圾数据。
没有标准化的L1 / L2正规化
L1和L2正则化惩罚大系数,是调整线性或逻辑回归的常用方法,然而,许多机器学习工程师在应用正则化之前并不知道这对于标准化功能很重要。
想象一下,你有一个线性回归模型,其中一个交易是一个特征。将所有功能标准化并将其放在平等的地位,这样正规化在所有功能中都是一样的。
要点:正则化是伟大的,但如果你没有标准化的功能可能会比较麻烦
将线性或逻辑回归的系数解释为特征重要性
线性回归函数通常为每个系数返回p值。很多时候,这些系数使新手机器学习工程师认为对于线性模型,系数值越大,特征越重要。由于变量的大小会改变系数的绝对值,所以这种情况几乎不存在。如果特征是共线的,则系数可以从一个特征转移到另一个特征。数据集的特征越多,特征共线性的可能性就越大,而对特征重要性的简单解释就越不可靠。
要点:了解哪些特征对结果影响大是很重要的,但不要假设可以查看系数。他们经常不讲述整个“故事”。
做几个项目并取得好成绩可能会赢得一百万美元。你努力工作,结果证明你做得很好,但和其他行业一样,魔鬼藏在细节中,甚至幻想的情节都可以隐藏偏见和错误。这份清单并不意味着详尽无遗,而仅仅是为了让读者思考可能隐藏在解决方案中的所有小问题。为了取得良好的效果,重要的是要遵循你的流程,并且要经常仔细检查你是否犯了一些常见的错误。
如果你发现这篇文章有用,你会从我的机器学习工程师|第2步中获得很多:选择流程文章。它可以帮助你解决一个过程,使你能够捕捉更简单的错误并获得更好的结果。