gpt4 book ai didi

python - Sklearn 自定义转换器 : difference between using FunctionTransformer and subclassing TransformerMixin

转载 作者:太空狗 更新时间:2023-10-29 21:38:35 26 4
gpt4 key购买 nike

为了进行适当的 CV,建议使用管道,以便可以将相同的转换应用于 CV 中的每个折叠。我可以通过使用 sklearn.preprocessing.FunctionTrasformer 或通过 subclassing sklearn.base.TransformerMixin 来定义自定义转换。推荐的方法是哪一种?为什么?

最佳答案

这完全取决于您,两者或多或少会达到相同的结果,只是您编写代码的方式不同。

例如,在使用 sklearn.preprocessing.FunctionTransformer 时,您可以简单地定义要使用的函数并像这样直接调用它 (code from official documentation)

def all_but_first_column(X):
return X[:, 1:]

def drop_first_component(X, y):
"""
Create a pipeline with PCA and the column selector and use it to
transform the dataset.
"""
pipeline = make_pipeline(PCA(), FunctionTransformer(all_but_first_column),)

X_train, X_test, y_train, y_test = train_test_split(X, y)
pipeline.fit(X_train, y_train)
return pipeline.transform(X_test), y_test

另一方面,在使用子类化 sklearn.base.TransformerMixin 时,您必须定义整个类以及 fittransform 类的功能。所以你必须创建一个这样的类(示例代码取自 this blog post )

class FunctionFeaturizer(TransformerMixin):
def __init__(self, *featurizers):
self.featurizers = featurizers

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

def transform(self, X):
#Do transformations and return
return transformed_data

如您所见,与 FunctionTransformer 相比,TransformerMixin 在转换函数方面为您提供了更大的灵 active 。您可以应用多个转换,或根据值进行部分转换等。例如,对于您想要记录的前 50 个值,而对于接下来的 50 个值,您希望采用逆对数等。您可以轻松定义转换方法以有选择地处理数据。

如果你只是想直接使用一个函数,使用sklearn.preprocessing.FunctionTrasformer,否则如果你想做更多的修改或者说复杂的转换,我会建议子类化sklearn.base.TransformerMixin

在这里,看看下面的链接以获得更好的想法

关于python - Sklearn 自定义转换器 : difference between using FunctionTransformer and subclassing TransformerMixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50965004/

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