在 sklearn 管道中使用标准化



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

我想在sklearn的管道中使用Standardscaler,我想知道如何将转换应用于X_test。也就是说,在下面的代码中,当我运行 pipeline.predict(X_test) 时,我的理解是StandardScalerSVC()是在X_test上运行的,但是Standardscaler究竟使用什么作为平均值和 StD?来自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 中,然后X_train平均值stdev 将用于缩放X_test

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

无论如何,重要的是要将X_test视为样本外,以便使其成为(希望)看不见数据的可靠指标。 由于你不知道看不见的数据的分布,你应该假装你不知道X_test的分布,包括均值stdev

相关内容

  • 没有找到相关文章

最新更新