二次特征化器:使用 fit_transform 进行预处理
Posted
技术标签:
【中文标题】二次特征化器:使用 fit_transform 进行预处理【英文标题】:quadratic featurizer: preprocessing with fit_transform 【发布时间】:2015-06-13 20:14:05 【问题描述】:以下示例是用 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 来预处理训练数据?我的意思是实际的拟合是用 regressor_quad 对象,所以 fit_transform 是多余的,不是吗?
【问题讨论】:
【参考方案1】: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()
与fit()
没有任何关系PolynomialFeatures
.
【讨论】:
非常感谢!我的误解是认为 PolynomialFeatures.fit() 等于 LinearRegression.fit()。以上是关于二次特征化器:使用 fit_transform 进行预处理的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: fit_transform() 接受 2 个位置参数,但给出了 3 个
sklearn fit transform fit_transform