【问题标题】:Difference between transform and fit_transformtransform 和 fit_transform 的区别
【发布时间】:2021-03-11 09:43:42
【问题描述】:

我一直在上 Kaggle 的中级机器学习课程。在解释中,为了标记分类数据,他们使用了来自 sklearn.preprocessing 的LabelEncoder 库。

这里,对于训练数据集,他们使用了 fit_transform,而对于验证数据集,他们只使用了变换,为什么会这样?

此外,在处理空值时,他们在训练数据集中使用了 fit_transform,而对于验证数据集,他们使用了 transform。 那么fit_transform和transform有什么区别,可以在什么情况下使用呢?

【问题讨论】:

    标签: machine-learning scikit-learn cluster-analysis preprocessor kaggle


    【解决方案1】:

    fit_transform 既可以将转换器拟合到数据集,也可以转换给定的数据。

    Transform 只是转换给定的数据集。

    通常您在训练数据集上使用 fit_transform 以使转换器适应数据集并转换您的数据集。

    在您的测试和验证数据集上,您只想转换数据集。这是因为您想避免任何可能的数据泄漏。您希望您的测试集从未以任何形式被您创建的模型看到。一种形式会影响你如何拥有数据集。

    示例中使用的简单输入器的默认替换是用平均值替换。通过仅拟合训练数据集,您可以避免来自测试集的数据集影响输入器的平均值并泄漏信息的任何可能性。

    【讨论】:

    • 这是一个原因。另一个原因是,对于其他转换器,例如 OneHotEncoder,拟合可能意味着特征的数量在拟合过程中是固定的,并且为了稍后将模型应用于测试或生产数据,您需要保持相同特征(相同的数量和相同的语义)。所以你可能在训练后不再适合它们,否则你会破坏你的模型。
    【解决方案2】:

    我们在创建机器学习模型时使用 fit,但我们可以随时使用 fit_transform

    拟合数据以及转换这些值。

    例如 - 在标签编码和特征缩放的情况下,我们想要更改或缩放我们的值。因此,每当我们想要转换值时,我们都会使用 fit_transform。

    但是由于两个问题,我们不使用 fit_transform 进行验证数据:

                            1)Data Leakage,
                            
                            2)Overfitting
    

    我们可以用一个简单的例子来解释这两者-

    这就像试卷泄漏。如果我们看到试卷,那就没有

    考试点。如果我们拟合测试数据,那么模型就知道整个数据

    即“数据泄漏”可能导致“过度拟合”,这意味着我们可以在以下情况下做得很好

    试卷泄露,但如果校长更改试卷然后我们失败了怎么办 正在测试中。

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2014-07-13
      • 2016-12-06
      • 2018-08-25
      • 2022-08-20
      • 2020-06-23
      • 2020-11-05
      • 2016-08-25
      • 2011-03-18
      相关资源
      最近更新 更多