【问题标题】:Python scikit learn pipelines (no transformation on features)Python scikit 学习管道(特征没有转换)
【发布时间】:2022-04-16 07:17:07
【问题描述】:

我正在我的数据集上运行不同的机器学习模型。我正在使用 sklearn 管道尝试对数字特征进行不同的转换,以评估一种转换是否能提供更好的结果。我使用的基本结构很简单:

from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScalar

pipe = Pipeline(steps=[('stdscaler', StandardScaler()), ('clf', RandomForestClassifier())])

pipe.fit(X_train, y_train)

我正在尝试一系列转换,但我还想测试未对数字特征集执行转换的场景(即按原样使用特征)。有没有办法将其包含在管道中?比如:

pipe = Pipeline(steps=[('do nothing', do_nothing()), ('clf', RandomForestClassifier())])

【问题讨论】:

  • 什么是“python 管道”?请不要让人猜测您使用的是什么库,请始终提供您在做什么的完整描述或minimal reproducible example
  • 我很抱歉并感谢您的回复。我已经添加了更多具体信息以及我正在尝试做的事情。

标签: python scikit-learn


【解决方案1】:

是的,你可以这样做

pipe = Pipeline(steps=[('clf', RandomForestClassifier())])

此外,如果您有一些您几乎总是想要的自定义基础转换,并且它还具有某些超参数或附加功能,您还可以执行类似的操作(有点蹩脚的例子,但只是为了想法......)

from sklearn.base import TransformerMixin

class Transform(TransformerMixin):
    def __init__(self, **kwargs):
        print(kwargs)
        self.hyperparam = kwargs

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        if self.hyperparam["square"]:
            X = [x**2 for x in X]
        # elif "other_transform" in self.hyperparam:
            # pass_val = self.hyperparam['other_transform']
            # X = other_transform(X, pass_val)
        return X  # default to no transform if no hyperparameter is provided as argument of Transform()

pass_pipe = Pipeline(steps=[('do nothing', Transform()),
                            ('clf', RandomForestClassifier())])
square_pipe = Pipeline(steps=[('square', Transform(square=True)),
                              ('clf', RandomForestClassifier())])

以上是一种相互排斥的转换方式,即一种或另一种。相反,如果你有一堆转换并且你想以特定的顺序应用它们,那么实现回调可能是正确的方法。看看这种东西是如何在 sklearn、pytorch 或 fastai 等流行库中实现的。

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 2018-02-06
    • 1970-01-01
    • 2016-03-26
    • 2016-12-11
    • 2020-07-23
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多