1. ホーム
  2. python

scikit-learnの分類器に対して最も情報量の多い特徴量を得るには?

2023-10-06 11:24:25

質問

liblinear や nltk などの機械学習パッケージの分類器には、以下のようなメソッドがあります。 show_most_informative_features() を提供しており、これは機能のデバッグにとても便利です。

viagra = None          ok : spam     =      4.5 : 1.0
hello = True           ok : spam     =      4.5 : 1.0
hello = None           spam : ok     =      3.3 : 1.0
viagra = True          spam : ok     =      3.3 : 1.0
casino = True          spam : ok     =      2.0 : 1.0
casino = None          ok : spam     =      1.5 : 1.0

私の質問は、同様のものがscikit-learnの分類器に対して実装されているかどうかです。ドキュメントを検索してみましたが、そのようなものは見つかりませんでした。

もしそのような関数がまだないのであれば、これらの値を取得するための回避策をどなたかご存知でしょうか?

どのように解決するのですか?

larsmansのコードを参考に、バイナリの場合のコードを考えてみました。

def show_most_informative_features(vectorizer, clf, n=20):
    feature_names = vectorizer.get_feature_names()
    coefs_with_fns = sorted(zip(clf.coef_[0], feature_names))
    top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1])
    for (coef_1, fn_1), (coef_2, fn_2) in top:
        print "\t%.4f\t%-15s\t\t%.4f\t%-15s" % (coef_1, fn_1, coef_2, fn_2)