关于python:对训练数据进行拟合变换并对测试数据进行变换

fit-transform on training data and transform on test data

本问题已经有最佳答案,请猛点这里访问。

我很难理解transform()fit_transform()是如何合作的。

我在训练数据集上打电话给fit_transform(),之后在测试集上打电话给transform()

但是,如果我在测试集中调用fit_transform(),就会得到坏结果。

有人能给我解释一下为什么会发生这种情况吗?


让我们以转换为例,sklearn.preprocessing.standardscaler。

从文档中,这将:

Standardize features by removing the mean and scaling to unit variance

假设您使用的代码如下所示。

1
2
3
4
5
6
7
8
9
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# X is features, y is label

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.33, random_state=42
)

当您调用StandardScaler.fit(X_train)时,它所做的是计算与X_train中的值的平均值和方差。然后调用.transform()将通过减去平均值并除以方差来转换所有特性。为了方便起见,这两个函数调用可以使用fit_transform()一步完成。

您希望仅使用培训数据来适应定标器的原因是,您不希望使用来自测试数据的信息来偏袒您的模型。

如果您对您的测试数据使用cx1(4),您将为每个特性计算一个新的平均值和方差。理论上,如果您的测试和列车组具有相同的分布,这些值可能非常相似,但实际上情况并非如此。

相反,您只希望使用基于训练数据计算的参数来转换测试数据。