结合Sklearn管道中的功能

龙竹

我想使用包含aTfidfVectorizer和a的管道SVC但是,在这两者之间,我想将从非文本数据中提取的某些功能连接到的输出TfidfVectorizer

我尝试创建一个自定义类(基于本教程的方法)来执行此操作,但这似乎不起作用。

到目前为止,这是我尝试过的:

pipeline = Pipeline([
    ('tfidf', TfidfVectorizer()),
    ('transformer', CustomTransformer(one_hot_feats)),
    ('clf', MultinomialNB()),
])

parameters = {
    'tfidf__min_df': (5, 10, 15, 20, 25, 30),
    'tfidf__max_df': (0.8, 0.9, 1.0),
    'tfidf__ngram_range': ((1, 1), (1, 2)),
    'tfidf__norm': ('l1', 'l2'),
    'clf__alpha': np.linspace(0.1, 1.5, 15),
    'clf__fit_prior': [True, False],
}

grid_search = GridSearchCV(pipeline, parameters, cv=5, n_jobs=-1, verbose=1)
grid_search.fit(df["short description"], labels)

这是CustomTransformer课程

class CustomTransformer(TransformerMixin):
"""Class that concatenates the one hot encode category feature with the tfidf data."""

def __init__(self, one_hot_features):
    """Initializes an instance of our custom transformer."""
    self.one_hot_features = one_hot_features

def fit(self, X, y=None, **kwargs):
    """Dummy fit function that does nothing particular."""

    return self

def transform(self, X, y=None, **kwargs):
    """Adds our external features"""
    return numpy.hstack((one_hot_feats, X))   

只要X不会在自定义类中更改尺寸(可能是与TransformerMixin相关的限制),此方法就可以使用,但是,就我而言,我将在数据中附加其他功能。我的自定义类是否应该继承自其他基类,或者有其他方法可以解决此问题?

您可以使用Sklearn的FeatureUnion组合多个功能,并使用ColumnTransformer转换特定的列

来自docs

FeatureUnion

连接多个转换器对象的结果。

此估算器将变形器对象列表与输入数据并行应用,然后将结果连接起来。将多个特征提取机制组合到单个转换器中很有用。

列转换器

将转换器应用于数组或熊猫DataFrame的列。

该估计器允许分别转换输入的不同列或列子集,并且将每个转换器生成的特征连接起来以形成单个特征空间。这对于异构数据或列状数据很有用,可以将多种特征提取机制或变换组合到单个转换器中。

在您的情况下,您可以使用make_column_transformer

from sklearn.compose import make_column_transformer
pipeline = Pipeline([
    ('transformer',  make_column_transformer((TfidfVectorizer(), ['text_column']),
                                             (OneHotEncoder(), ['categorical_column']),)),
    ('clf', MultinomialNB()),
])

编辑:

make_column_transformer中设置remainder'passthrough'以便所有未在转换器中指定的列都将自动通过。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章