首页 文章

什么时候使用train_test_split的scikit学习

提问于
浏览
3

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

我的问题是我应该在使用scikit的train_test_split方法完成上述所有操作之前拆分此数据集,还是首先应该拆分为train和test,然后对每组数据进行拆分,并进行缺失值和编码 .

我担心的是,如果我首先拆分,然后对得到的两个集进行缺失值和其他编码,当在测试集中对变量进行编码时,测试集不应该为该变量丢失一些值,这可能导致更少的no . 傻瓜就像原始数据有3个级别的分类,我知道我们正在进行随机抽样,但有可能测试集可能没有为该变量提供所有三个级别,从而导致只有两个假人而不是第一个?

什么是正确的方法 . 首先拆分,然后在火车上进行上述所有测试,或者在整个数据集上进行缺失值和编码,然后进行拆分?

1 回答

  • 2

    我首先将数据拆分为训练和测试集 . 您的缺失值估算策略应该适用于培训数据,并应用于培训和测试数据 .

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

    以下是如何使用scikit-learn管道和imputer执行缺失值插补的示例:http://scikit-learn.org/stable/auto_examples/missing_values.html

相关问题