以下示例是用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 而不仅仅是转换来预处理训练数据?我的意思是实际的拟合是用 regressor_quad 对象,所以 fit_transform 是多余的,不是吗?
答案 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}}确实有任何关系。