二次特征:使用fit_transform进行预处理

时间:2015-04-08 17:57:42

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

以下示例是用Python编写的,取自本书Mastering Machine Learning

任务概述:

  • 训练数据存储在列向量 X_train (要素)和 y_train (响应变量)
  • 用于测试目的的数据分别存储在 X_test y_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 而不仅仅是转换来预处理训练数据?我的意思是实际的拟合是用 regressor_quad 对象,所以 fit_transform 是多余的,不是吗?

1 个答案:

答案 0 :(得分:2)

必须根据您的特定数据集调整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会根据X_train_quad方法对您的新培训数据(fit())进行培训,该方法与PolynomialFeatures完全分开,因此其fit()不会与fit()的{​​{1}}确实有任何关系。