在 sklearn 管道中使用标准化

Using Standardization in sklearn pipeline

我正在使用 Standardscaler 对我的数据集进行归一化,也就是说,我通过减去平均值并除以 Std 将每个特征转换为 z 分数。

我想在 sklearn 的管道中使用 Standardscaler,我想知道如何将转换应用到 X_test。也就是说,在下面的代码中,当我 运行 pipeline.predict(X_test) 时,我的理解是 StandardScalerSVC() 是 X_test 上的 运行 ,但是 Standardscaler 究竟使用什么作为均值和标准差?来自 X_Train 的那些还是仅针对 X_test 计算的?例如,如果 X_test 仅包含 2 个变量,那么归一化看起来与我将 X_trainX_test 一起归一化会有很大不同,对吗?

steps = [('scaler', StandardScaler()),
     ('model',SVC())] 
pipeline = Pipeline(steps)
pipeline.fit(X_train,y_train)
y_pred = pipeline.predict(X_test)

Sklearn 的 pipeline 将在调用 pipeline.fit() 时应用 transformer.fit_transform(),在调用 pipeline.predict() 时应用 transformer.transform()。因此,对于您的情况,StandardScaler 将适合 X_train,然后 meanstdev 来自 X_train 将用于缩放 X_test.

X_train 的变换看起来确实与 X_trainX_test 的变换不同。差异的程度将取决于 X_trainX_test 组合之间分布的差异程度。但是,如果从相同的原始数据集随机分区,并且大小合理,X_trainX_test 的分布可能相似。

无论如何,重要的是要将 X_test 视为样本外,以便它成为(希望如此)看不见数据的可靠指标。既然你不知道看不见的数据的分布,你应该假装你不知道 X_test 的分布,包括 meanstdev.