在机器学习中,有许多方法来构建产品或解决方案,每种方法都假设不同的东西。很多时候,如何识别哪些假设是合理的并不明显。刚接触机器学习的人会犯错误,事后想想,这些错误往往会让人觉得愚蠢。我列了一个清单,上面列出了机器学习工程师新手最常犯的错误。希望你能从这些常见的错误中吸取教训,创建更健壮的解决方案,从而带来真正的价值。
默认的损失函数
均方误差非常大!这确实是一个令人惊讶的默认设置,但在实际应用中,这种现成的损失函数很少适合于你试图解决的业务问题。
以欺诈检测为例。为了与商业目标保持一致,你真正想要的是按因欺诈而损失的金额比例来对假阴性样本进行惩罚。使用均方误差可能会得到不错的结果,但永远不会得到最好的结果。
要点:始终建立一个自定义的损失函数,密切配合你的解决方案目标。
对所有问题使用一种算法/方法
许多人完成他们的第一个教程,并立即开始使用他们在每个用例中所学到的相同算法。它很熟悉,他们认为它和其他算法一样有效。这是一个糟糕的假设,将导致糟糕的结果。
让你的数据为你选择模型。一旦你预处理了你的数据,把它输入到许多不同的模型中,看看结果是什么。你将对什么模型工作得最好和什么模型工作得不太好有一个很好的概念。
要点:如果你发现自己一次又一次地使用相同的算法,这可能意味着你没有得到最好的结果。
忽略离群点
离群点值可能很重要,也可能完全被忽略,这取决于上下文。以污染预测为例。空气污染可能会出现大的峰值,观察它们并了解其原因是一个好主意。在某些类型的传感器错误导致的异常值的情况下,忽略它们并从数据中删除它们是安全的。
从模型的角度来看,有些模型比其他模型对异常值更敏感。以Adaboost为例,它将这些异常值视为“困难”案例,并对异常值施加极大的权重,而决策树可能只是将每个异常值作为一个错误分类。
要点:在开始工作之前,一定要仔细查看数据,确定是否应该忽略或更仔细地查看离群值。
没有适当的处理周期特征
一天中的几个小时,一周中的几天,一年中的几个月,以及风向都是周期性的。许多新的机器学习工程师认为,不能将这些特征转换成一种表示形式,这种表示形式可以保存诸如小时23和小时0之类的信息,它们彼此之间很近,距离也不远。
按照小时的例子,处理这个问题的最好方法是计算sin和cos分量,这样就可以用(x,y)的圆坐标来表示循环特征。在这个表示小时中,23和0在数字上是相邻的,就像它们应该的那样。
要点:如果你有循环特征,而你没有转换它们,你就是在给你的模型垃圾数据。
做L1/L2正则化但是没有标准化
L1和L2正则化对大系数不利,是正则化线性回归或逻辑回归的常用方法,然而,许多机器学习工程师并没有意识到在应用正则化之前对特征进行标准化的重要性。
假设你有一个以事务为特征的线性回归模型。标准化所有的特征,并将它们放在平等的基础上,这样正则化在你的所有特征上都是一样的。不要用美分表示某些特征,而用美元表示其他特征。
要点:正则化很好,但是如果你没有标准化特征,它会让你头疼
将线性回归或逻辑回归的系数解释为特征重要性
线性回归通常为每个系数返回p值。这些系数很多时候会使机器学习新手认为对于线性模型来说,系数的值越大,特征越重要。因为变量的尺度改变了系数的绝对值,所以这并是不正确的。如果特征是共线的,系数可以从一个特征转移到另一个特征。数据集的特征越多,特征越有可能是共线性的,对特征重要性的简单解释就越不可靠。
要点:理解什么特征对结果最重要是重要的,但不要假设你可以查看系数来得到,系数通常不会告诉你事情的全貌。
做几个项目,得到好的结果,感觉就像赢了一百万美元。你努力工作,你有结果证明你做得很好,但就像其他任何行业一样,魔鬼是在细节中,甚至花哨的情节可以隐藏偏见和错误。这个列表并不是面面俱到的,只是让读者思考一下你的解决方案中可能隐藏的所有小问题。为了获得好的结果,遵循你的过程是很重要的,并且要反复检查你没有犯一些常见的错误。