如何在 PySpark 中使用 StandardScaler 标准化测试数据集?

how do I standardize test dataset using StandardScaler in PySpark?

我有如下训练和测试数据集:

x_train:

inputs
[2,5,10]
[4,6,12]
...

x_test:

inputs
[7,8,14]
[5,5,7]
...

在将 VectorAssembler class 应用到 3 个单独的列后,输入列是一个包含模型特征的向量。

当我尝试使用如下所示的 StandardScaler 转换测试数据时,我收到一条错误消息,指出它没有转换方法:

from pyspark.ml.feature import StandardScaler 
scaler = StandardScaler(inputCol="inputs", outputCol="scaled_features")
scaledTrainDF = scaler.fit(x_train).transform(x_train)
scaledTestDF = scaler.transform(x_test)

有人告诉我,我应该只在训练数据上使用一次标准缩放器,然后使用这些参数来转换测试集,所以这样做是不准确的:

scaledTestDF = scaler.fit(x_test).transform(x_test)

那么我该如何处理上面提到的错误呢?

这是使用缩放器的正确语法。您需要在拟合模型上调用变换,而不是缩放器本身。

from pyspark.ml.feature import StandardScaler 
scaler = StandardScaler(inputCol="inputs", outputCol="scaled_features")
scaler_model = scaler.fit(x_train)

scaledTrainDF = scaler_model.transform(x_train)
scaledTestDF = scaler_model.transform(x_test)