【问题标题】:Why do I need to call fit() before transform() when using PolynomialFeatures?为什么在使用 PolynomialFeatures 时需要在 transform() 之前调用 fit()?
【发布时间】:2021-07-19 15:38:24
【问题描述】:

向所有伟大的思想家致敬,

我试图更严格地理解多项式拟合与 scikit 一起工作的方式。更具体地说,我要做的是分解过程,并仅显示具有基于单个值生成的新多项式特征的数据框。

所以我有几个条目的数据,每个条目都是一维的。我想生成一个适合多项式拟合的设计矩阵。我目前正在做的事情是这样的:

pd.DataFrame(PolynomialFeatures(k).fit_transform(X))

这按预期工作。

但是,我正在努力解决的是 fit_transform() 的作用。就我而言,我还没有尝试适合任何安静的东西,只是产生一个具有新构建的多项式特征的数据框。我天真地尝试将 fit_transform() 更改为 transform(),但显然我必须在允许转换之前使用 fit。

如果有人能指出我的错误,我将不胜感激。我还没有尝试在数据上拟合模型,只是为了创建一个具有多项式特征的设计矩阵,那么为什么我必须使用 fit()(或 fit_transform(),就此而言)?事实上,我并不真正理解 fit() 在这里实际上做了什么,documentation 并没有帮助我理解它。

谢谢!

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    我认为这样做的原因是为了与他们的 API 保持一致。在进行预处理时,您仍然希望“拟合”一些训练数据并将相同的预处理步骤应用于训练和测试数据。 一个更清楚的例子是标准缩放(这是一个不同的预处理步骤)。您从训练数据中计算均值和标准差,并将相同的缩放比例 (X - 均值)/标准差应用于训练和测试数据(均值和标准差取自训练数据。 因此fittransform这两个方法是分开的。

    在您的多项式特征的情况下,“拟合”可能没有意义,因为没有从训练数据中提取任何信息,并且该步骤可以在不知道训练数据的情况下直接应用于测试数据。但是在PolynomialFeatures 中包含fit 使其与整个API 保持一致。当您通过管道传输多个预处理步骤时,一致性就变得很有必要了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      相关资源
      最近更新 更多