辛德蕾拉|准备数据时如何避免数据泄漏


辛德蕾拉|准备数据时如何避免数据泄漏作者:Jason Brownlee
翻译:张一然
校对:李洁
本文约5000字 , 建议阅读10分钟 。
本篇文章主要介绍了几种常用的数据准备方法,以及在数据准备的过程中如何避免数据泄露 。
数据准备是将原始数据转换为适合建模的形式的过程 。
原始的数据准备方法是在评估模型性能之前对整个数据集进行处理 。 这会导致数据泄漏的问题, 测试集中的数据信息会泄露到训练集中 。 那么在对新数据进行预测时 , 我们会错误地估计模型性能 。
为了避免数据泄漏 , 我们需要谨慎使用数据准备技术 ,同时也要根据所使用的模型评估方案灵活选择 , 例如训练测试集划分或k折交叉验证 。
在本教程中 , 您将学习在评估机器学习模型时如何避免在数据准备过程中的数据泄漏 。
完成本教程后 , 您将会知道:

  • 应用于整个数据集的简单的数据准备方法会导致数据泄漏 , 从而导致对模型性能的错误估计 。
  • 为了避免数据泄漏 , 数据准备应该只在训练集中进行 。
  • 如何在Python中用训练测试集划分和k折交叉验证实现数据准备而又不造成数据泄漏 。 在我的新书()中了解有关数据清理 , 特征选择 , 数据转换 , 降维以及更多内容 , 包含30个循序渐进的教程和完整的Python源代码 。
让我们开始吧 。
目录本教程分为三个部分:
1. 原始数据准备方法存在的问题
2. 用训练集和测试集进行数据准备
  • 用原始数据准备方法进行训练-测试评估
  • 用正确的数据准备方法进行训练-测试评估
3 .用K折交叉验证进行数据准备
  • 用原始数据准备方法进行交叉验证评估
  • 用正确的数据准备方法进行交叉验证评估
原始数据准备方法的问题应用数据准备技术处理数据的方式很重要 。
一种常见的方法是首先将一个或多个变换应用于整个数据集 。 然后将数据集分为训练集和测试集 , 或使用k折交叉验证来拟合并评估机器学习模型 。
1.准备数据集
2.分割数据
3.评估模型
尽管这是一种常见的方法 , 但在大多数情况下很可能是不正确的 。
在分割数据进行模型评估之前使用数据准备技术可能会导致数据泄漏 ,进而可能导致错误评估模型的性能 。
数据泄漏是指保留数据集(例如测试集或验证数据集)中的信息出现在训练数据集中,并被模型使用的问题 。 这种泄漏通常很小且微妙 , 但会对性能产生显著影响 。
‘’…泄漏意味着信息会提供给模型 , 这给它做出更好的预测带来了不真实的优势 。 当测试数据泄漏到训练集中时 , 或者将来的数据泄漏到过去时 , 可能会发生这种情况 。 当模型应用到现实世界中进行预测时 , 只要模型访问了它不应该访问的信息 , 就是泄漏 。
—第93页 , 机器学习的特征工程 , 2018年 。 ”
将数据准备技术应用于整个数据集会发生数据泄漏 。
数据泄漏的直接形式是指我们在测试数据集上训练模型 。 而当前情况是数据泄漏的间接形式 , 是指训练过程中 , 模型可以使用汇总统计方法捕获到有关测试数据集的一些知识 。 对于初学者而言很难察觉到第二种类型的数据泄露 。
“重采样的另一个方面与信息泄漏的概念有关 , 信息泄漏是在训练过程中(直接或间接)使用测试集数据 。 这可能会导致过于乐观的结果 , 这些结果无法在将来的数据上复现 。
—第55页 , 特征工程与选择 , 2019年 。 ”
例如 , 在某些情况下我们要对数据进行归一化 , 即将输入变量缩放到0-1范围 。
当我们对输入变量进行归一化时 , 首先要计算每个变量的最大值和最小值, 并利用这些值去缩放变量. 然后将数据集分为训练数据集和测试数据集 , 但是这样的话训练数据集中的样本对测试数据集中的数据信息有所了解 。 数据已按全局最小值和最大值进行了缩放 , 因此 , 他们掌握了更多有关变量全局分布的信息 。


推荐阅读