4

記事をカスタム カテゴリに分類する必要があります。そこで、SciKit から MultinomialNB を選択しました。教師あり学習を行っています。そのため、記事を毎日見てタグ付けする編集者がいます。それらがタグ付けされたら、学習モデルなどに含めます。以下は、私が何をしていて何を使用しているかを理解するためのコードです。(私が何をしているかのアイデアを提供しようとしているだけなので、インポート行は含めていません) (参照)

corpus = (train_set)
vectorizer = HashingVectorizer(stop_words='english', non_negative=True) 
x = vectorizer.transform(corpus)
x_array = x.toarray()
data_array = np.array(x_array)

cat_set = list(cat_set)
cat_array = np.array(cat_set)
filename = '/home/ubuntu/Classifier/Intelligence-MultinomialNB.pkl'

if(not os.path.exists(filename)):
    classifier.partial_fit(data_array,cat_array,classes)
    print "Saving Classifier"
    joblib.dump(classifier, filename, compress=9)
else:
    print "Loading Classifier"
    classifier = joblib.load(filename)
    classifier.partial_fit(data_array,cat_array)
    print "Saving Classifier"
    joblib.dump(classifier, filename, compress=9)

カスタムタグ付け後の分類子の準備が整いました。これは新しい記事でうまく機能し、魅力のように機能します。ここで、各カテゴリに対して最も頻繁に使用される単語を取得する必要が生じました。つまり、学習したモデルから機能を抽出する必要があります。ドキュメントを調べたところ、学習時にテキストの特徴を抽出する方法しかわかりませんでした。

しかし、学習したらモデル ファイル (.pkl) しか持っていないので、その分類器を読み込んで特徴を抽出することはできますか?

各クラスまたはカテゴリに対して最も頻繁な用語を取得することは可能でしょうか?

4

2 に答える 2

2

プロパティを使用して機能にアクセスできますfeature_count_。これにより、特定の機能が何回発生したかがわかります。例えば:

# Imports
import numpy as np
from sklearn.naive_bayes import MultinomialNB

# Data
X   = np.random.randint(3, size=(3, 10))
X2  = np.random.randint(3, size=(3, 10))
y   = np.array([1, 2, 3])

# Initial fit
clf = MultinomialNB()
clf.fit(X, y)

# Check to see that the stored features are equal to the input features
print np.all(clf.feature_count_ == X)

# Modify fit with new data
clf.partial_fit(X2, y)

# Check to see that the stored features represents both sets of input
print np.all(clf.feature_count_ == (X + X2))

上記の例では、feature_count_プロパティが各クラスの機能数の現在の合計にすぎないことがわかります。これを使用して、分類子モデルから特徴までさかのぼって、特徴の頻度を決定できます。残念ながら、問題はより複雑です。機能は単なる言葉ではないため、もう 1 ステップ戻る必要があります。

ここで悪い知らせが来ます - あなたはHashingVectorizer特徴抽出器を使用しました。ドキュメントを参照する場合:

逆変換 (フィーチャ インデックスから文字列フィーチャ名への変換) を計算する方法はありません。これは、どのフィーチャがモデルにとって最も重要であるかを内省しようとするときに問題になる可能性があります。

したがって、特徴の頻度はわかっていても、それらの特徴を言葉に戻すことはできません。別のタイプの特徴抽出ツール (おそらく同じページで参照されているものCountVectorizer) を使用していたら、状況はまったく異なっていたでしょう。

要するに、モデルから特徴を抽出し、クラスごとに頻度を決定することはできますが、それらの特徴を単語に戻すことはできません。

必要な機能を得るには、可逆マッピング関数 (単語を特徴にエンコードし、特徴を単語にデコードできる特徴抽出機能) を使用して最初からやり直す必要があります。

于 2015-03-13T03:50:13.490 に答える