二次特征化器:使用 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_testy_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 个

DictVectorizer中的fit_transform

sklearn fit transform fit_transform

三天爆肝快速入门机器学习:KNN算法朴素贝叶斯算法决策树第二天

Sklearn PCA:列车和测试的组件数量不同

Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别