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


几乎所有的数据准备技术都会导致相同类型的泄漏 。 例如 , 标准化估计了域的平均值和标准差 , 以便缩放变量;甚至是估算缺失值的模型或统计方法也会从全部数据集中采样来填充训练数据集中的值 。
解决方案很简单 。
数据准备工作只能在训练数据集中进行 。 也就是说 , 任何用于数据准备工作的系数或模型都只能使用训练数据集中的数据行 。
一旦拟合完 , 就可以将数据准备算法或模型应用于训练数据集和测试数据集 。
1.分割数据 。
2.在训练数据集上进行数据准备 。
3.将数据准备技术应用于训练和测试数据集 。
4.评估模型 。
更普遍的是 , 仅在训练数据集上进行整个建模工作来避免数据泄露 。 这可能包括数据转换 , 还包括其他技术 , 例如特征选择 , 降维 , 特征工程等等 。 这意味着所谓的“模型评估”实际上应称为“建模过程评估” 。
“为了使任何重采样方案都能产生可泛化到新数据的性能估算 , 建模过程中必须包含可能显著影响模型有效性的所有步骤 。
—第54-55页 , 特征工程与选择 , 2019年 。 ”
既然我们已经熟悉如何应用数据准备以避免数据泄漏 , 那么让我们来看一些可行的示例 。
准备训练和测试数据集在本节中 , 我们利用合成二进制分类数据集分出训练集和测试集 , 并使用这两个数据集评估逻辑回归模型, 其中输入变量已归一化 。
首先 , 让我们定义合成数据集 。
我们将使用make_classification()函数创建包含1000行数据和20个数值型特征的数据 。 下面的示例创建了数据集并总结了输入和输出变量数组的形状 。
辛德蕾拉|准备数据时如何避免数据泄漏运行这段代码会得到一个数据集, 数据集的输入部分有1000行20列, 20列对应20个输入变量, 输出变量包含1000个样例对应输入数据,每行一个值 。
辛德蕾拉|准备数据时如何避免数据泄漏接下来我们要在缩放后的数据上评估我们的模型, 首先从原始或者说错误的方法开始 。
用原始方法进行训练集-测试集评估原始方法首先对整个数据集应用数据准备方法 , 其次分割数据集 , 最后评估模型 。
我们可以使用MinMaxScaler类对输入变量进行归一化 , 该类首先使用默认配置将数据缩放到0-1范围 , 然后调用fit_transform()函数将变换拟合到数据集并同步应用于数据集 。 得到归一化的输入变量 , 其中数组中的每一列都分别进行过归一化(例如 , 计算出了自己的最小值和最大值) 。
辛德蕾拉|准备数据时如何避免数据泄漏下一步 , 我们使用train_test_split函数将数据集分成训练集和测试集, 其中67%的数据用作训练集,剩下的33%用作测试集 。
辛德蕾拉|准备数据时如何避免数据泄漏通过LogisticRegression 类定义逻辑回归算法 , 使用默认配置, 并拟合训练数据集 。
辛德蕾拉|准备数据时如何避免数据泄漏拟合模型可以对测试集的输入数据做出预测 , 然后我们可以将预测值与真实值进行比较 , 并计算分类准确度得分 。
辛德蕾拉|准备数据时如何避免数据泄漏把上述代码结合在一起 , 下面列出了完整的示例 。


推荐阅读