在sklearn管道中使用标准化

时间:2019-01-04 07:52:07

标签: scikit-learn normalization pipeline

我正在使用Standardscaler标准化我的数据集,也就是说,通过减去均值并除以标准差,将每个特征转换为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)

1 个答案:

答案 0 :(得分:2)

Sklearn的pipeline将在调用transformer.fit_transform()时应用pipeline.fit(),并在调用transformer.transform()时应用pipeline.predict()。因此,对于您的情况,StandardScaler将适合X_train,然后使用X_train中的 mean stdev X_test

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

无论如何,重要的是将X_test视为样本外,以使其成为(希望)对看不见数据的可靠度量。由于您不知道看不见的数据的分布,因此您应该假装不知道X_test的分布,包括 mean stdev 。 / p>