【问题标题】:ColumnTransformer fails with CountVectorizer/HashingVectorizer in a pipeline (multiple textfeatures)ColumnTransformer 在管道中使用 CountVectorizer/HashingVectorizer 失败(多个文本特征)
【发布时间】:2021-09-23 14:59:56
【问题描述】:

与此问题类似 (ColumnTransformer fails with CountVectorizer in a pipeline) 我想在管道中使用 ColumnTransformerCountVectorizer/HashingVectorizer 应用于具有文本功能的列。但我不只有一个文本功能,而是多个。如果我传递一个功能(而不是列表,就像另一个问题的解决方案中建议的那样)它工作正常,我该如何为多个做呢?

numeric_features = ['x0', 'x1', 'y0', 'y1']
categorical_features = []
text_features = ['text_feature', 'another_text_feature']

numeric_transformer = Pipeline(steps=[('scaler', StandardScaler())])
categorical_transformer = Pipeline(steps=[('encoder', OneHotEncoder())])
text_transformer = Pipeline(steps=[('hashing', HashingVectorizer())])

preprocessor = ColumnTransformer(transformers=[
    ('numeric', numeric_transformer, numeric_features), 
    ('categorical', categorical_transformer, categorical_features),
    ('text', text_transformer, text_features)
])
    
steps = [('preprocessor', preprocessor),
         ('clf', SGDClassifier())]
    
pipeline = Pipeline(steps=steps)
    
pipeline.fit(X_train, y_train)

【问题讨论】:

    标签: python scikit-learn pipeline


    【解决方案1】:

    只需为每个文本功能使用单独的转换器。

    preprocessor = ColumnTransformer(transformers=[
        ('numeric', numeric_transformer, numeric_features), 
        ('categorical', categorical_transformer, categorical_features),
        ('text', text_transformer, 'text_feature'),
        ('more_text', text_transformer, 'another_text_feature'),
    ])
    

    (变压器在装配过程中被克隆,因此您将拥有两个单独的 text_transformer 副本,一切都很好。如果您担心像这样指定同一个变压器两次,您总是可以在此之前手动复制/克隆它指定ColumnTransformer。)

    【讨论】:

    • 感谢本的快速回答!不久之后就想到了这一点,并且工作正常。为了使我的管道参数化,我从[other_transformers] + [(tf, text_transformer, tf) for tf in text_features] 选择的文本特征中创建了transformers 列表
    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 2021-09-26
    • 1970-01-01
    • 2019-06-15
    • 2021-03-05
    • 2020-01-12
    • 2016-07-12
    • 2020-02-10
    相关资源
    最近更新 更多