以下示例是用 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 而不仅仅是 transform 来预处理训练数据?我的意思是实际的拟合是通过 transform 完成的>regressor_quad 对象,所以 fit_transform 是多余的,不是吗?
最佳答案
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()
与 PolynomialFeatures
的 fit()
没有任何关系。
关于python-2.7 - 二次特征化器 : preprocessing with fit_transform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29521968/