详细内容或原文请订阅后点击阅览
解释预处理中的数据泄漏:带有代码示例的可视化指南
数据预处理预处理管道泄漏的 10 种隐秘方式在我教授机器学习的经验中,学生经常会遇到同样的问题:“我的模型表现很好——准确率超过 90%!但是当我将其提交给隐藏数据集进行测试时,它现在不那么好了。哪里出了问题?”这种情况几乎总是指向数据泄漏。当测试数据中的信息在数据准备步骤中潜入(或泄漏)到您的训练数据中时,就会发生数据泄漏。这通常发生在常规数据处理任务中,而您没有注意到。当发生这种情况时,模型会从它不应该看到的测试数据中学习,从而使测试结果具有误导性。让我们看看常见的预处理步骤,看看数据泄漏时究竟会发生什么——希望您可以在自己的项目中避免这些“管道问题”。所有视觉效果:作者使用 Canva Pro 创建。针对移动设备进行了优化;在桌面上可能会显得过大。定义数据泄露是机器学习中常见的问题,当模型不应该看到的数据(如测试数据或未来数据)被意外用于训练模型时,就会发生这种情况。这可能会导致模型过度拟合,并且在新的、看不见的数据上表现不佳。现在,让我们关注以下数据预处理步骤中的数据泄露。此外,我们还将使用特定的 scikit-learn 预处理方法名称来查看这些步骤,我们将在本文的最后看到代码示例。缺失值插补使用
来源:走向数据科学🌟数据预处理 +分类(带有泄漏)代码摘要
让我们看看在预测简单的高尔夫游戏数据集时会发生泄漏。这是一个不好的例子,不应遵循。仅出于演示和教育目的。
上面的代码使用columnTransFormer,这是Scikit-Learn中的实用程序,它允许我们将不同的预处理步骤应用于数据集中的不同列。
columntransformer
这是数据集中每一列的预处理策略的细分:
温度: - 处理任何缺失的值 - 标准缩放量表以将值(平均值= 0,std = 1) - 等同于4个箱相等,这意味着连续值分为4等宽度间隔
温度
: -
湿度: - 与温度相同的策略:平均插补→标准缩放→同等宽度离散(4箱)
湿度
Outlook(分类): - 序数编码:将分类值转换为数值 - 未知值通过将它们设置为-1
Outlook
(分类):
wind(二进制): - 缺少值的false持续插补 - 标准缩放以归一化0/1值
风
(二进制):
play(目标): - 编码将Yes/否转换为1/0-预处理后应用于1/0的标签,通过创建少数族裔类的合成示例来平衡类 - 使用简单的决策树来预测目标
Play
(目标):
整个管道都展示了数据泄漏,因为所有转换在拟合过程中都可以看到整个数据集,这在真实的机器学习方案中是不合适的,在该场景中,我们需要将测试数据与培训过程完全分开。
所有转换在拟合期间请参阅整个数据集这种方法也可能显示出人为的更高的测试准确性,因为在预处理步骤中使用了测试数据特征!
🌟数据预处理 +分类(无泄漏)代码摘要
这是没有数据泄漏的版本: