Python:如何在多标签类的 SVM 文本分类器算法中找到准确度结果

Posted

技术标签:

【中文标题】Python:如何在多标签类的 SVM 文本分类器算法中找到准确度结果【英文标题】:Python : How to find Accuracy Result in SVM Text Classifier Algorithm for Multilabel Class 【发布时间】:2013-11-06 21:39:56 【问题描述】:

我使用了以下一组代码: 我需要检查 X_train 和 X_test 的准确性

以下代码适用于我的多标签类分类问题

import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.multiclass import OneVsRestClassifier

X_train = np.array(["new york is a hell of a town",
                    "new york was originally dutch",
                    "the big apple is great",
                    "new york is also called the big apple",
                    "nyc is nice",
                    "people abbreviate new york city as nyc",
                    "the capital of great britain is london",
                    "london is in the uk",
                    "london is in england",
                    "london is in great britain",
                    "it rains a lot in london",
                    "london hosts the british museum",
                    "new york is great and so is london",
                    "i like london better than new york"])
y_train = [[0],[0],[0],[0]
            ,[0],[0],[1],[1]
            ,[1],[1],[1],[1]
            ,[2],[2]]
X_test = np.array(['nice day in nyc',
                   'the capital of great britain is london',
                   'i like london better than new york',
                   ])   
target_names = ['Class 1', 'Class 2','Class 3']

classifier = Pipeline([
    ('vectorizer', CountVectorizer(min_df=1,max_df=2)),
    ('tfidf', TfidfTransformer()),
    ('clf', OneVsRestClassifier(LinearSVC()))])
classifier.fit(X_train, y_train)
predicted = classifier.predict(X_test)
for item, labels in zip(X_test, predicted):
    print '%s => %s' % (item, ', '.join(target_names[x] for x in labels))

输出

nice day in nyc => Class 1
the capital of great britain is london => Class 2
i like london better than new york => Class 3

我想检查训练和测试数据集之间的准确性。 评分函数对我不起作用,它显示一个错误,指出不能接受多标签值

>>> classifier.score(X_train, X_test)

NotImplementedError: 多标签分类器不支持分数

请帮助我获得训练和测试数据的准确度结果,并为我们的分类案例选择一种算法。

【问题讨论】:

【参考方案1】:

如果您想获得测试集的准确度分数,您需要创建一个答案键,您可以调用y_test。除非您知道正确的答案,否则您无法知道您的预测是否正确。

一旦你有了答案,你就可以获得准确性。你想要的方法是sklearn.metrics.accuracy_score。

我已经写在下面了:

from sklearn.metrics import accuracy_score

# ... everything else the same ...

# create an answer key
# I hope this is correct!
y_test = [[1], [2], [3]]

# same as yours...
classifier.fit(X_train, y_train)
predicted = classifier.predict(X_test)

# get the accuracy
print accuracy_score(y_test, predicted)

此外,sklearn 除了准确性之外还有其他几个指标。在这里看到他们:sklearn.metrics

【讨论】:

我发现classification_report(来自 sklearn)非常有用,因为它包含一个包含最常见指标的表格。

以上是关于Python:如何在多标签类的 SVM 文本分类器算法中找到准确度结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使用线性支持向量机 (SVM) 分类器确定最重要/信息量最大的特征

Sklearn Linear SVM 无法在多标签分类中进行训练

机器学习的分类算法之SVM(支持向量机)

如何在多类文本分类问题中平衡数据?

如何进行交叉验证 SVM 分类器

统一文本和图像分类(Python)