数据泄露

参考:https://www.kaggle.com/alexisbcook/data-leakage

Data leakage

当您的训练数据包含有关目标的信息时,就会发生数据泄漏(或泄漏),但是当模型用于预测时,类似的数据将不可用。这将导致训练集(甚至可能包括验证数据)的高性能,但是模型在生产中的表现会很差。泄漏有两种主要类型:target leakage和train-test contamination。

Target leakage

当预测变量包含在进行预测时将不可用的数据时,就会发生目标泄漏。重要的是要根据数据可用的时间或时间顺序来考虑特征是否造成目标泄漏,而不仅仅是考虑特征是否有助于做出良好的预测。举个例子:我们不能使用患者的出院诊断来进行患者的病情预测。因为在实际医院模型使用中,我们并不能得知患者的出院诊断信息。
在这里插入图片描述

Train-Test Contamination

当您不小心将训练数据与验证数据区分开时,会发生另一种类型的泄漏。回想一下,验证旨在衡量模型对之前未考虑的数据的处理方式。如果验证数据影响预处理行为,则可以用微妙的方式破坏此过程。有时称为Train-Test Contamination。例如,假设您在调用train_test_split()之前运行了预处理(例如为缺少的值安装了嵌入式计算机)。最终结果?您的模型可能会获得良好的验证评分,这给您带来了很大的信心,但是在部署模型进行决策时却表现不佳。毕竟,您将验证或测试数据中的数据合并到了如何进行预测中,因此即使无法将其推广到新数据,也可能会对特定数据表现良好。举个例子:我们使用均值填补缺失值,我们应该使用训练集数据的均值来填补训练集和测试集的缺失值,而不是使用整个数据集来求均值进行填补整个数据集。当您执行更复杂的特征工程时,此问题将变得更加微妙(更加危险)。如果您的验证是基于简单的train-test拆分,则将验证数据排除在任何类型的拟合中,包括预处理步骤的拟合。如果使用scikit-learn管道,这会更容易。使用交叉验证时,在管道内进行预处理就显得尤为重要!

你可能感兴趣的:(sklearn)