具有多个标签输出的 sklearn 分类
sklearn classification with multiple label output
您好,我正在研究 AI 以构建聊天机器人,我现在正在使用 sklearn 测试分类,我设法通过以下代码获得了良好的结果。
def tuned_nominaldb():
global Tuned_Pipeline
pipeline = Pipeline([
('tfidf', TfidfVectorizer(analyzer=text_process)),
('clf', OneVsRestClassifier(MultinomialNB(
fit_prior=True, class_prior=None))),
])
parameters = {
'tfidf__max_df': (0.25, 0.5, 0.75),
'tfidf__ngram_range': [(1, 1), (1, 2), (1, 3)],
'clf__estimator__alpha': (1e-2, 1e-3)
}
Tuned_Pipeline = GridSearchCV(pipeline, parameters, cv=2, n_jobs=2, verbose=10)
Tuned_Pipeline.fit(cumle_train, tur_train)
我的标签是:
- 糟糕的语言
- 政治
- 宗教
- 一般
当我输入任何句子时,大部分时间我都会得到正确的标签作为输出。但我的问题是,我想获得多个标签,例如,如果我将糟糕的语言和政治结合起来,它只会预测糟糕的语言,我如何获得多个标签,例如,糟糕的语言 + 政治。
我尝试添加以下代码,但出现错误,提示字符串不是适合方法所期望的。
multiout = MultiOutputClassifier(Tuned_Pipeline, n_jobs=-1)
multiout.fit(cumle_train, tur_train)
print(multiout.predict(cumle_test))
非常感谢您的帮助
当您使用 OneVsRestClassifier
时,它会为每个使用的标签训练一个二元分类器,这意味着您可以在同一个句子中使用多个估计器并从中获得多个标签。我建议您查看此链接:
您好,我正在研究 AI 以构建聊天机器人,我现在正在使用 sklearn 测试分类,我设法通过以下代码获得了良好的结果。
def tuned_nominaldb():
global Tuned_Pipeline
pipeline = Pipeline([
('tfidf', TfidfVectorizer(analyzer=text_process)),
('clf', OneVsRestClassifier(MultinomialNB(
fit_prior=True, class_prior=None))),
])
parameters = {
'tfidf__max_df': (0.25, 0.5, 0.75),
'tfidf__ngram_range': [(1, 1), (1, 2), (1, 3)],
'clf__estimator__alpha': (1e-2, 1e-3)
}
Tuned_Pipeline = GridSearchCV(pipeline, parameters, cv=2, n_jobs=2, verbose=10)
Tuned_Pipeline.fit(cumle_train, tur_train)
我的标签是:
- 糟糕的语言
- 政治
- 宗教
- 一般
当我输入任何句子时,大部分时间我都会得到正确的标签作为输出。但我的问题是,我想获得多个标签,例如,如果我将糟糕的语言和政治结合起来,它只会预测糟糕的语言,我如何获得多个标签,例如,糟糕的语言 + 政治。
我尝试添加以下代码,但出现错误,提示字符串不是适合方法所期望的。
multiout = MultiOutputClassifier(Tuned_Pipeline, n_jobs=-1)
multiout.fit(cumle_train, tur_train)
print(multiout.predict(cumle_test))
非常感谢您的帮助
当您使用 OneVsRestClassifier
时,它会为每个使用的标签训练一个二元分类器,这意味着您可以在同一个句子中使用多个估计器并从中获得多个标签。我建议您查看此链接: