首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scikit-学习多标签分类

Scikit-学习多标签分类
EN

Stack Overflow用户
提问于 2016-06-16 20:05:26
回答 1查看 2.9K关注 0票数 1

我正在尝试使用Scikit-learn来学习文本的多标签分类,我正在尝试改编最初的示例教程之一,该教程随scikit一起提供,用于使用维基百科文章作为训练数据对语言进行分类。我试图在下面实现这一点,但代码仍然为每个标签返回一个标签,其中我希望最后一个预测返回fr,en

谁能建议一下启用多标签分类的正确方法。

代码语言:javascript
运行
复制
import sys

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.datasets import make_multilabel_classification
from sklearn.preprocessing import LabelBinarizer

from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
from sklearn.datasets import load_files
from sklearn.cross_validation import train_test_split
from sklearn import metrics
from sklearn.multiclass import OneVsRestClassifier
#change model_selection to cross_validation

# The training data folder must be passed as first argument - This uses the example wiki language data files
languages_data_folder = sys.argv[1]
dataset = load_files(languages_data_folder)

# Split the dataset in training and test set:
docs_train, docs_test, y_train, y_test = train_test_split(
dataset.data, dataset.target, test_size=0.5)


#pipeline
clf = Pipeline([
('vectorizer', CountVectorizer(ngram_range=(1,2))),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC())),
])
    target_names=dataset.target_names



# TASK: Fit the pipeline on the training set
clf.fit(docs_train, y_train)

# TASK: Predict the outcome on the testing set in a variable named y_predicted
y_predicted = clf.predict(docs_test)

print target_names


# Predict the result on some short new sentences:
sentences = [
    u'This is a language detection test.',
    u'Ceci est un test de d\xe9tection de la langue.',
    u'Dies ist ein Test, um die Sprache zu erkennen.',
    u'Bonjour Mon ami. This is a language detection test.',

]
predicted = clf.predict(sentences)

for s, p in zip(sentences, predicted):
    print(u'The language of "%s" is "%s"' % (s, target_names[p]))

退货-

“这是一个语言检测测试”的语言。是"en“

这是"Ceci est un test de de la langue“的语言。是"fr“

"Dies ist ein Test,um die Sprache zu erkennen“的语言。是"de“

"Bonjour Mon ami.这是一种语言检测测试“的语言。是"en“

EN

回答 1

Stack Overflow用户

发布于 2016-07-06 13:52:36

你可以使用scikit-multilearn进行多标签分类,它是一个建立在scikit learn之上的库。对于语言,标签之间的相关性并不那么重要,因此二进制分类器应该很适合。您可以在documentation中找到如何进行分类的示例,但在您的示例中,您需要替换:

代码语言:javascript
运行
复制
('clf', OneVsRestClassifier(LinearSVC())),

使用

代码语言:javascript
运行
复制
('clf', BinaryRelevance(LinearSVC())),

并在顶部添加导入:

代码语言:javascript
运行
复制
from skmultilearn.problem_transform import BinaryRelevance

只需记住先安装scikit-multilearn!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37858697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档