【问题标题】:quadratic featurizer: preprocessing with fit_transform二次特征化器:使用 fit_transform 进行预处理
【发布时间】:2015-06-13 20:14:05
【问题描述】:

以下示例是用 Python 编写的,摘自《Mastering Machine Learning》一书。

任务概述:

  • 训练数据存储在列向量X_train(特征)和y_train(响应变量)中
  • 用于测试的数据分别存储在X_testy_test
  • 现在使用多项式回归(在本例中为二次回归)将模型拟合到训练数据中

作者的做法(不包括导入和数据初始化):

quad_featurizer = PolynomialFeatures(degree=2)
X_train_quad = quad_featurizer.fit_transform(X_train)
X_test_quad = quad_featurizer.transform(X_test)

regressor_quad = LinearRegression()
regressor_quad.fit(X_train_quad, y_train)

作者没有对代码进行评论,也没有对所使用的方法进行更多说明。由于 scikit-learn API 也无法给我满意的答案,所以想请教一下。

我为什么要使用 fit_transform 而不仅仅是 transform 来预处理训练数据?我的意思是实际的拟合是用 regressor_quad 对象,所以 fit_transform 是多余的,不是吗?

【问题讨论】:

    标签: python-2.7 machine-learning scikit-learn


    【解决方案1】:

    scikit 的那些特征化器必须根据您的特定数据集进行调整,然后才能将其转换为新的特征向量。 fit() 执行该调整。因此,您需要先拨打fit(),然后拨打transform(),或者同时拨打fit_transform()

    在您的示例中,PolynomialFeatures 用于将您的训练数据投影到新的高维空间中。所以向量(3, 6) 会变成(1, 3, 6, 3*3, 3*6, 6*6)。在fit()PolynomialFeatures 中学习你的训练向量的大小,在transform() 中它从旧的训练向量中创建新的训练向量。所以X_train_quad 是一个形状不同于X_train 的新矩阵。之后对X_test 进行相同操作,但随后PolynomialFeatures 已经知道向量的大小,因此不必再次为fit()。然后LinearRegression 通过其fit() 方法在您的新训练数据(X_train_quad)上进行训练,该方法与PolynomialFeatures 完全分离,因此其fit()fit() 没有任何关系PolynomialFeatures.

    【讨论】:

    • 非常感谢!我的误解是认为 PolynomialFeatures.fit() 等于 LinearRegression.fit()。
    猜你喜欢
    • 2015-08-07
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多