当前位置:网站首页>15年软件架构师经验总结:在ML领域,初学者踩过的五个坑
15年软件架构师经验总结:在ML领域,初学者踩过的五个坑
2022-08-03 20:32:00 【软件测试网】
近日,软件架构师、数据科学家、Kaggle 大师 Agnis Liukis 撰写了一篇文章,他在文中谈了谈在机器学习中最常见的一些初学者错误的解决方案,以确保初学者了解并避免它们。
Agnis Liukis 拥有超过 15 年的软件架构和开发经验,他熟练掌握 Java、JavaScript、Spring Boot、React.JS 和 Python 等语言。此外,Liukis 还对数据科学和机器学习感兴趣,他多次参加 Kaggle 比赛并取得好成绩,已达到 Kaggle 比赛大师级别。
以下为文章内容:
在机器学习领域,这 5 个坑,你踩过吗?
1、在需要的地方没有使用数据归一化(data normalization)
对数据进行归一化操作,然后获取特征,并将其输入到模型中,让模型做出预测,这种方法是很容易的。但在某些情况下,这种简单方法的结果可能会让人失望,因为它缺少一个非常重要的部分。
一些类型的模型需要数据归一化,如线性回归、经典神经网络等。这类模型使用特征值去乘训练值的权重。在非归一化特征的情况下,一个特征值的可能范围可能不同于另一个特征值的可能范围。
假设一个特征的值在 [0,0.001] 范围内,另一个特征的值在 [100000,200000] 范围内。对于使两个特征同等重要的模型,第一个特征的权重将比第二个特征的权重大 1 亿倍。巨大的权重可能会给模型带来严重问题,比如存在一些异常值的时候。此外,估计各种特征的重要性变得困难,因为权重大可能意味着特征很重要,但也可能只是意味着其特征值很小。
归一化后,所有特征的值都在相同的范围内,通常为 [0,1] 或 [-1,1]。在这种情况下,权重将在相似的范围内,并与每个特征的实际重要性密切对应。
总的来说,在需要的地方使用数据归一化将产生更好、更准确的预测。
2、认为特征越多越好
有人可能会认为加入所有特征是一个好主意,认为模型会自动选择并使用最好的特征。实际上,这种想法很难成真。
模型的特征越多,过拟合的风险越大。即使在完全随机的数据中,模型也能够找到一些特征(信号),尽管有时较弱,有时较强。当然,随机噪声中没有真实信号。但如果我们有足够多的噪声列,则该模型有可能根据检测到的故障信号使用其中的一部分。当这种情况发生时,模型预测质量将会降低,因为它们一定程度上基于随机噪声。
现在有许多技术帮助我们进行特征选择。但你要记住,你需要解释你拥有的每一个特征,以及为什么这个特征会帮助你的模型。
3. 在需要外推的情况下,使用基于树的模型
基于树的模型易于使用,功能强大,这也是其受欢迎的原因。然而,在某些情况下,使用基于树的模型可能是错误的。
基于树的模型无法外推,这些模型的预测值永远不会大于训练数据中的最大值,而且在训练中也永远不会输出比最小值更小的预测值。
在某些任务中,外推能力可能非常重要。例如,如果该模型预测股票价格,那么未来股票价格可能会比以往任何时候都高。在这种情况下,基于树的模型将无法直接使用,因为它们的预测几乎会超过最高历史价格。
这个问题有多种解决方案,一种解决方案是预测变化或差异,而不是直接预测价值。另一种解决方案是为此类任务使用不同类型的模型。线性回归或神经网络就可以进行外推。
4、在不需要的地方使用数据归一化
之前文章谈到了数据归一化的必要性,但情况并非总是如此,基于树的模型不需要数据归一化。神经网络可能也不需要明确的归一化,因为有些网络内部已经包含归一化层,例如 Keras 库的 BatchNormalization 操作。
在某些情况下,即使是线性回归也可能不需要数据归一化,这是指所有特征都已处于类似的值范围,并且具有相同的含义。例如,如果模型适用于时间序列数据,并且所有特征都是同一参数的历史值。
5. 在训练集和验证集 / 测试集之间泄漏信息
造成数据泄漏比人们想象的要容易,考虑以下代码段:
数据泄漏的示例特性
实际上,这两种特征(sum_feature 和 diff_feature)都不正确。它们正在泄漏信息,因为在拆分到训练集 / 测试集后,具有训练数据的部分将包含来自测试的一些信息。这将导致更高的验证分数,但当应用于实际的数据模型时,性能会更差。
正确的方法是首先将训练集 / 测试集分开,然后才应用特征生成功能。通常,分别处理训练集和测试集是一种很好的特征工程模式。
在某些情况下,可能需要在两者之间传递一些信息 —— 例如,我们可能希望在测试集和训练集上使用相同的 StandardScaler。
总而言之,从错误中吸取教训是件好事,希望上述所提供的错误示例能帮助到你。
边栏推荐
- Use ControlTemplate or Style from resource file in WPF .cs and find the control
- 第三方验收测试报告有什么作用?如何获取权威软件测试报告?
- leetcode 2119. Numbers reversed twice
- Auto.js实现朋友圈自动点赞
- 直播平台怎么搭建,针对输入框的各种组件
- tkwebview2创作心得
- leetcode 1837. The sum of the digits in the K-base representation
- 高并发,你真的理解透彻了吗?
- Li Mu hands-on learning deep learning V2-BERT fine-tuning and code implementation
- ES6 introduction and let, var, const
猜你喜欢
盲埋孔PCB叠孔设计的利与弊
leetcode 231. 2 的幂
RNA核糖核酸修饰RNA-HiLyte FluorTM 405荧光染料|RNA-HiLyte FluorTM 405
数学之美 第六章——信息的度量和作用
Li Mu hands-on learning deep learning V2-BERT fine-tuning and code implementation
Power button - 203 - remove the list elements linked list
不知道这4种缓存模式,敢说懂缓存吗?
博士申请 | 美国明尼苏达大学葛畅教授招收隐私数据管理方向全奖博士/硕士/博后/访问学者...
Lecture topics and guest blockbuster, TDengine developers conference to promote data technology "broken"
后台图库上传功能
随机推荐
抖音web逆向教程
RNA核糖核酸修饰Alexa 568/[email protected] 594/[email prote
Detailed explanation of JWT
直播平台怎么搭建,针对输入框的各种组件
leetcode 1837. K 进制表示下的各位数字总和
染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56
ESP8266-Arduino编程实例-BH1750FVI环境光传感器驱动
云服务器如何安全使用本地的AD/LDAP?
C51 存储类型与存储模式
若依集成easyexcel实现excel表格增强
8.2模拟赛总结
php截取中文字符串实例
解决This application failed to start because no Qt platform plugin could be initialized的办法
高并发,你真的理解透彻了吗?
第三方验收测试报告有什么作用?如何获取权威软件测试报告?
一种能有效缓解环境噪声对音频质量干扰的方案
Kubernetes资源编排系列之三: Kustomize篇 作者 艄公(杨京华) 雪尧(郭耀星)
简单又有效的基本折线图制作方法
svg胶囊药样式切换按钮
leetcode 899. 有序队列