- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
为了进行适当的 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
时,您必须定义整个类以及 fit
和 transform
类的功能。所以你必须创建一个这样的类(示例代码取自 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/
我正在做一个小项目,我正在尝试应用 SMOTE“合成少数过采样技术”,但我的数据不平衡.. 我为 SMOTE 函数创建了一个自定义的 transformerMixin .. class smote(B
这个问题不是duplicate正如有人建议的那样。为什么?因为在那个例子中,所有可能的值都是已知的。在这个例子中,他们不是。此外,除了对未知值使用自定义转换器之外,这个问题还特别询问如何以与初始转换完
为了进行适当的 CV,建议使用管道,以便可以将相同的转换应用于 CV 中的每个折叠。我可以通过使用 sklearn.preprocessing.FunctionTrasformer 或通过 subcl
我想构建一个 sklearn 管道(更大管道的一部分),它: 编码分类列(OneHotEncoder) 降维(SVD) 添加数字列(无需转换) 聚合行(pandas groupby) 我用了this管
我是一名优秀的程序员,十分优秀!