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

quadratic featurizer: preprocessing with fit_transform

下面的例子写在Python中,摘自书Mastering Machine Learning

任务概览:

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

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 是多余的,是不是不是吗?

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

同时调用两者

在您的示例中,PolynomialFeatures 用于将您的训练数据投影到新的更高维度 space。因此向量 (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() 不会确实与 PolynomialFeaturesfit() 有关。