数据科学和机器学习越来越火,这个领域的人数每时每刻都在增长天。这意味着有很多数据科学家在构建他们的第一个机器学习模型时没有太多经验,这就是错误可能发生的地方。最近,软件架构师、数据科学家和Kaggle大师AgnisLiukis写了一篇文章,其中他谈到了机器学习中一些最常见的初学者错误的解决方案,以确保初学者理解并避免这些错误。AgnisLiukis拥有超过15年的软件架构和开发经验,精通Java、JavaScript、SpringBoot、React.JS、Python等语言。此外,Liukis还对数据科学和机器学习感兴趣。多次参加Kaggle比赛并取得好成绩,已达到Kaggle比赛大师级别。以下为文章内容:在机器学习领域,这5个坑你踩过吗?1.在需要的地方不使用数据归一化,很容易对数据进行归一化,然后得到特征,输入到模型中,让模型进行预测。但在某些情况下,这种简单方法的结果可能会令人失望,因为它遗漏了一个非常重要的部分。有些类型的模型需要数据归一化,比如线性回归、经典神经网络等,这类模型使用特征值乘以训练值的权重。在非归一化特征的情况下,一个特征值的可能取值范围可能与另一个特征值的可能取值范围不同。假设一个特征的值在[0,0.001]范围内,另一个特征的值在[100000,200000]范围内。对于使两个特征同等重要的模型,第一个特征的权重将是第二个特征权重的1亿倍。巨大的权重会给模型带来严重的问题,例如当存在一些异常值时。此外,估计各种特征的重要性变得困难,因为大的权重可能意味着一个特征很重要,但也可能仅仅意味着它的特征值很小。归一化后,所有特征的值都在同一个范围内,通常是[0,1]或[-1,1]。在这种情况下,权重将处于相似的范围内,并且与每个特征的实际重要性密切相关。总的来说,在需要的地方使用数据标准化将产生更好、更准确的预测。2.认为特征越多越好,有人可能认为把所有的特征都加进去是个好主意,认为模型会自动选择和使用最好的特征。事实上,这个想法很难实现。模型具有的特征越多,过度拟合的风险就越大。即使在完全随机的数据中,该模型也能够找到一些特征(信号),尽管有时较弱有时较强。当然,随机噪声中没有真正的信号。但是,如果我们有足够多的噪声列,模型可能会根据检测到的故障信号使用其中的一些列。发生这种情况时,模型预测的质量会降低,因为它们部分基于随机噪声。现在有很多技术可以帮助我们进行特征选择。但是你必须记住,你需要解释你拥有的每一个特征,以及为什么这个特征对你的模型有帮助。3.当需要外推时,使用基于树的模型基于树的模型因其易用性和强大性而广受欢迎。但是,在某些情况下,使用基于树的模型可能是错误的。基于树的模型不能外推,这些模型永远不会预测大于训练数据中最大值的值,也永远不会在训练过程中输出小于最小值的预测值。在某些任务中,推断的能力可能非常重要。例如,如果模型预测股票价格,那么未来的股票价格可能会比以往任何时候都高。在这种情况下,基于树的模型将无法直接使用,因为它们的预测几乎会超过历史最高价格。这个问题有多种解决方案,一种解决方案是预测变化或差异,而不是直接预测值。另一种解决方案是针对此类任务使用不同类型的模型。线性回归或神经网络可以进行外推。4.在不需要的地方使用数据规范化。上一篇文章讲了数据归一化的必要性,但并非总是如此。基于树的模型不需要数据规范化。神经网络也可能不需要显式规范化,因为一些网络内部已经包含规范化层,例如Keras库的BatchNormalization操作。在某些情况下,即使是线性回归也可能不需要数据归一化,这意味着所有特征都已经处于相似的取值范围内并且具有相同的含义。例如,如果模型应用于时间序列数据,所有特征都是同一参数的历史值。5.训练集和验证/测试集之间的信息泄漏创建数据泄漏比人们想象的要容易,请考虑以下代码片段:数据泄漏的示例特征实际上,两个特征(sum_feature和diff_feature)都不正确。他们正在泄漏信息,因为在拆分为训练/测试之后,带有训练数据的部分将包含一些来自测试的信息。这将导致更高的验证分数,但在应用于真实数据模型时性能会更差。正确的方法是先拆分训练集/测试集,然后才应用特征生成函数。通常,将训练集和测试集分开处理是一个很好的特征工程模式。在某些情况下,可能需要在两者之间传递一些信息——例如,我们可能希望在测试集和训练集上使用相同的StandardScaler。总而言之,从错误中学习是一件好事,希望上面提供的错误示例对您有所帮助。
