我有可以简化为此的数据框:
import pandas as pd
df = pd.DataFrame([{
'title': 'batman',
'text': 'man bat man bat',
'url': 'batman.com',
'label':1},
{'title': 'spiderman',
'text': 'spiderman man spider',
'url': 'spiderman.com',
'label':1},
{'title': 'doctor evil',
'text': 'a super evil doctor',
'url': 'evilempyre.com',
'label':0},])
我想尝试不同的特征提取方法:TFIDF,word2vec,具有不同ngram设置的Coutvectorizer等。但是我想以不同的组合尝试:一个特征集将包含使用TFIDF转换的“文本”数据和使用Countvectoriser和second将具有通过w2v转换的文本数据,以及通过TFIDF等转换的“
url”。最后,当然,我想比较不同的预处理策略并选择最佳的。
这里是问题:
有没有办法使用标准sklearn工具(例如管道)来做这些事情?
我的想法有常识吗?也许有个好主意,如何处理我缺少的数据框中有很多列的文本数据?
非常感谢!
@elphz答案很好地介绍了如何使用FeatureUnion
和FunctionTransformer
完成此操作,但是我认为它可以使用更多细节。
首先,我要说的是,您需要定义FunctionTransformer
函数,以便它们可以正确处理和返回输入数据。在这种情况下,我假设您只想传递DataFrame,但要确保您获得正确形状的数组以供下游使用。因此,我建议仅传递DataFrame并按列名进行访问。像这样:
def text(X):
return X.text.values
def title(X):
return X.title.values
pipe_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 = None
best_score = 0
for 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
这是一个简单的示例,但是您可以看到如何以这种方式插入各种转换和分类器。
本文向大家介绍如何在R中创建具有一列或多列作为列表的数据框?,包括了如何在R中创建具有一列或多列作为列表的数据框?的使用技巧和注意事项,需要的朋友参考一下 创建一个以列为列表的数据框架并不困难,但是我们需要对列表使用I,以使列表元素不会作为单独的列工作。在这里,您会发现创建列表的常用方法,如果我们想在数据中插入该列表,则该方法是不正确的,最后还会提到正确的方法。 错误的方式- 示例 正确的方法-
我想在我的系统中创建多个数据库。大多数时候数据库是MySQL;但将来可能会有所不同,即管理员可以生成这样的报告,这是异构数据库系统的使用源。
问题内容: 我有一个数据框 我有另一个数据框df2 我希望我的最终数据框看起来像: 即从一个数据框映射到另一个创建新列 问题答案: + 假设您的数据框已经在上排序,则第一次排序调用是多余的,在这种情况下,您可以删除它。 / 或者,显式创建映射。如果您以后要使用它,它将起作用。
如何配置执行器/health以显示两个数据源的health状态?
问题内容: 我正在使用MVC创建一个基本的计算器。到目前为止,我正在改编一个教程,该教程仅将两个用户输入的值加在一起。 目前,我要添加到视图中的每个按钮都有其自己的侦听器,可以。但是,根据教程的控制器每个按钮只有一个ActionListener内部类。这重复了大量代码。 如何为所有按下的按钮创建一个ActionListener类,并在按下的按钮的ID上使用case语句? 在视图中注册oneButt
我有一个数据框 我有另一个数据帧df2 我希望我的最终数据帧看起来像: i、 e从一个数据帧映射到另一个数据帧,创建新列