何时使用 scikit learn 的 train_test_split

Posted

技术标签:

【中文标题】何时使用 scikit learn 的 train_test_split【英文标题】:When to use train_test_split of scikit learn 【发布时间】:2015-07-14 12:29:56 【问题描述】:

我有一个包含 19 个特征的数据集。现在我需要进行缺失值插补,然后使用 scikit 的 OneHOtEncoder 对分类变量进行编码,然后运行机器学习算法。

我的问题是我应该在使用 scikit 的 train_test_split 方法执行上述所有操作之前拆分此数据集,还是应该先拆分为训练和测试,然后对每组数据进行缺失值和编码。

我担心的是,如果我先拆分然后对结果两组进行缺失值和其他编码,在对测试集中的变量进行编码时,测试集不应该缺少该变量的一些值,这可能导致更少.的假人。就像原始数据有 3 个分类级别并且我知道我们正在进行随机抽样,但是是否有可能测试集可能没有该变量的所有三个级别,从而导致只有两个虚拟变量而不是三个虚拟变量?

什么是正确的方法。先拆分,然后在训练和测试上执行上述所有操作,还是先对整个数据集执行缺失值和编码,然后拆分?

【问题讨论】:

您应该先估算然后拆分,否则拆分上的估算可能会引入冲突编码,这将使您的训练模型处于冲突状态 【参考方案1】:

我会首先将数据拆分为训练和测试集。您的缺失值插补策略应适用于训练数据,并适用于训练和测试数据。

例如,如果您打算用最频繁的值或中位数替换缺失值。必须在没有看到测试集的情况下获得这种知识(中值,最常见的值)。否则,您的缺失值估算将有偏差。如果在训练数据中看不到某些特征值,那么您可以例如增加样本总数或采用对异常值稳健的缺失值插补策略。

Here 是一个如何使用 scikit-learn 管道和 imputer 执行缺失值插补的示例:

【讨论】:

以上是关于何时使用 scikit learn 的 train_test_split的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit-learn 进行多目标回归

scikit learn的train_test_split()方法

带有索引的 Scikit-learn train_test_split

带有索引的 Scikit-learn train_test_split

scikit-learn train_test_split 中与平台无关的随机状态

scikit-learn实现ebay数据分析 的随笔