【问题标题】:Adding transformers into sklearn pipeline, for cross validation将转换器添加到 sklearn 管道中,以进行交叉验证
【发布时间】:2020-12-26 12:26:55
【问题描述】:

我想将目标变量转换器添加到我的 sklearn 管道中。通常对于像 PCA 或任何类型的回归分类器这样的操作,sklearn 支持 CV 的参数网格,例如:

        param_grid = [{
            "pca__n_components": [5, 10, 25, 50, 125, 250, 625, 1500, 3000],
            "rdf__n_estimators": n_estimators,
            "rdf__bootstrap": bootstrap,
            "rdf__max_depth": max_depth,
            "rdf__class_weight": class_weight}]

是否也可以在此网格中添加可变变压器?例如,我想先训练我的回归器而不转换目标变量,然后使用PowerTransformer(),我想缩放我的目标变量并想看看它是否能改善我的结果。是否也可以将这些集成到参数网格中?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    是的,可以将不同的转换器集成到您的 param_grid 字典中:

    from sklearn.datasets import make_classification
    from sklearn.preprocessing import PowerTransformer
    from sklearn.model_selection import GridSearchCV
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    from sklearn.pipeline import Pipeline
    from sklearn.svm import SVC
    
    X, y = make_classification(random_state=0)
    X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=0)
    pipe = Pipeline([('transformer', PowerTransformer()), ('svc', SVC())])
    
    param_grid  = {"svc__C":[1, 10], "transformer":[PowerTransformer(), StandardScaler()]}
    
    clf = GridSearchCV(pipe, param_grid )
    clf.fit(X_train, y_train)
    
    print(clf.best_params_)
    

    【讨论】:

    • 很好,我正在考虑这方面的一些事情。您知道是否可以避免在 Pipeline 中添加转换器(或任何步骤),但仍将其添加到网格中?
    • 否,因为您只能在 gridSearchCV 方法中指定您的估算器及其参数,因此无需额外的转换器。因此,您必须将转换器添加到您的管道中,作为 gridSearchCV 的估计器提供,以便您可以通过管道参数访问转换器。在此处查看文档:scikit-learn.org/stable/modules/generated/…
    • 感谢您的回答。就我而言,我需要转换目标变量;是;那么是否仍然可以将其集成到管道中? TransforMixin 类的变形金刚似乎只适用于 X,而不适用于 y。
    • 是的,我想。现在很高兴知道:)
    • 是的,这也应该是可能的。 Sklearn 有几个用于目标的转换器。看看这里:scikit-learn.org/stable/modules/preprocessing_targets.html 或这里的线程stackoverflow.com/questions/18602489/…,它们指的是 TransformedTargetRegressor。如果您没有找到解决方案,只需围绕您的 GridSearchCV 构建一个循环并将您的“y”转换到它之外。
    猜你喜欢
    • 2021-03-25
    • 2020-09-16
    • 2018-05-17
    • 2022-01-25
    • 2015-06-11
    • 2021-08-29
    • 2016-11-15
    • 2017-12-22
    • 2021-11-24
    相关资源
    最近更新 更多