gpt4 book ai didi

Python scikit 学习管道(无特征转换)

转载 作者:行者123 更新时间:2023-12-05 02:06:09 27 4
gpt4 key购买 nike

我在我的数据集上运行不同的机器学习模型。我正在使用 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())])

最佳答案

是的,你可以简单地做

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 等流行库中实现此类功能。

关于Python scikit 学习管道(无特征转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62922604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com