【问题标题】:Using Standardization in sklearn pipeline在 sklearn 管道中使用标准化
【发布时间】:2019-05-30 19:01:02
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: scikit-learn normalization pipeline


    【解决方案1】:

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

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

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

    【讨论】:

    • 很高兴听到这个消息,这很有道理。非常感谢克里斯的解释!!
    • @Tartaglia 很高兴能够提供帮助。
    猜你喜欢
    • 2018-07-18
    • 2018-04-16
    • 2014-11-07
    • 2015-03-26
    • 1970-01-01
    • 2021-08-04
    • 2021-09-26
    • 2017-11-10
    • 2017-08-01
    相关资源
    最近更新 更多