何时使用scikit的train_test_split学习

Bak*_*war 5 python numpy machine-learning pandas scikit-learn

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

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

我担心的是,如果我先拆分然后对结果的两个集合进行缺失值和其他编码,则在对测试集中的变量进行编码时,测试集不应为该变量缺少一些值,否则可能会导致编号减少。的假人。就像原始数据具有3个类别的分类,并且我知道我们正在进行随机抽样,但是测试集是否有可能不存在该变量的所有三个层次,从而仅导致两个假人而不是第三个假人?

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

Arn*_*oly 3

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

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

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