web-dev-qa-db-ja.com

Python:マルチラベルクラスのSVMテキスト分類アルゴリズムで精度の結果を見つける方法

次の一連のコードを使用しました。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))

[〜#〜] output [〜#〜]

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:スコアはマルチラベル分類子ではサポートされていません

トレーニングとテストデータの正確な結果を取得し、分類ケースのアルゴリズムを選択するのを手伝ってください。

9
user_az

テストセットの精度スコアを取得する場合は、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

11
mayhewsw