如何为多个数据框列创建管道?

如何为多个数据框列创建管道?,第1张

如何为多个数据框列创建管道?

@elphz答案很好地介绍了如何使用

FeatureUnion
FunctionTransformer
完成此 *** 作,但是我认为它可以使用更多细节。

首先,我要说的是,您需要定义

FunctionTransformer
函数,以便它们可以正确处理和返回输入数据。在这种情况下,我假设您只想传递Dataframe,但要确保您获得正确形状的数组以供下游使用。因此,我建议仅传递Dataframe并按列名进行访问。像这样:

def text(X):    return X.text.valuesdef title(X):    return X.title.valuespipe_text = Pipeline([('col_text', FunctionTransformer(text, validate=False))])pipe_title = Pipeline([('col_title', FunctionTransformer(title, validate=False))])

现在,测试变压器和分类器的变体。我会建议使用一个转换器列表和一个分类器列表,并简单地对其进行迭代,就像进行网格搜索一样。

tfidf = TfidfVectorizer()cv = CountVectorizer()lr = LogisticRegression()rc = RidgeClassifier()transformers = [('tfidf', tfidf), ('cv', cv)]clfs = [lr, rc]best_clf = Nonebest_score = 0for tran1 in transformers:    for tran2 in transformers:        pipe1 = Pipeline(pipe_text.steps + [tran1])        pipe2 = Pipeline(pipe_title.steps + [tran2])        union = FeatureUnion([('text', pipe1), ('title', pipe2)])        X = union.fit_transform(df)        X_train, X_test, y_train, y_test = train_test_split(X, df.label)        for clf in clfs: clf.fit(X_train, y_train) score = clf.score(X_test, y_test) if score > best_score:     best_score = score     best_est = clf

这是一个简单的示例,但是您可以看到如何以这种方式插入各种转换和分类器。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5673749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存