下面的例子是用Python编写的,取自《掌握机器学习》一书。
任务概述:
- 训练数据存储在列向量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来预处理训练数据我的意思是,实际的拟合是用regression _quad对象完成的,所以fit_transform是多余的,不是吗?
scikit的那些特征化器必须根据您的特定数据集进行调整,然后才能将其转换为新的特征向量。CCD_ 1执行该调整。因此,您需要首先调用fit()
,然后调用transform()
,或者通过fit_transform()
同时调用两者。
在您的示例中,PolynomialFeatures
用于将训练数据投影到新的更高维空间中。因此向量(3, 6)
将变为(1, 3, 6, 3*3, 3*6, 6*6)
。在fit()
中,PolynomialFeatures
学习训练向量的大小,在fit()
0中,它从旧的训练向量创建新的训练向量。因此CCD_ 11是一个新的矩阵,其形状不同于CCD_。之后,对X_test
也进行了同样的操作,但PolynomialFeatures
已经知道向量的大小,因此不必再次为fit()
。然后,LinearRegression
通过其fit()
方法在新的训练数据(X_train_quad
)上进行训练,该方法与PolynomialFeatures
完全分离,因此其fit()
与PolynomialFeatures
的fit()
实际上没有任何关系。