python-2.7 - 二次特征化器 : preprocessing with fit_transform

标签 python-2.7 machine-learning scikit-learn

以下示例是用 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 来预处理训练数据?我的意思是实际的拟合是通过 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()PolynomialFeaturesfit() 没有任何关系。

关于python-2.7 - 二次特征化器 : preprocessing with fit_transform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29521968/

相关文章:

machine-learning - 使用经过训练的字符级 LSTM 模型生成文本

python - 箱线图(来自seaborn)不会按预期绘制

python - 列表中的字符串不接受赋值

python - super() 在类方法中不起作用

python - 如何在 PyScripter 中更改字体(大小/系列)?

android - Firebase MLKit 条码扫描器 : Adding supported formats

python - 需要在 bash 中传递 python 数组中的对象

python - 使用 python api 和 scikit-learn wapper 的 XGBoost 的不同结果

Python图形工具通过索引有效地访问顶点属性

python - sklearn log_loss 不同数量的类