web-dev-qa-db-ja.com

sklearn.feature_extraction.text.TfidfVectorizerを使用したtf-idf機能の重み

このページ: http://scikit-learn.org/stable/modules/feature_extraction.html 言及:

Tf–idfはテキスト機能に非常によく使用されるため、TfidfVectorizerTfidfTransformerのすべてのオプションを組み合わせたTfidfVectorizerという別のクラスもあります。単一のモデルで。

次に、コードに従い、コーパスでfit_transform()を使用します。 fit_transform()によって計算された各機能の重みを取得する方法は?

私は試した:

In [39]: vectorizer.idf_
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-39-5475eefe04c0> in <module>()
----> 1 vectorizer.idf_

AttributeError: 'TfidfVectorizer' object has no attribute 'idf_'

しかし、この属性はありません。

ありがとう

26
fast tooth

バージョン0.15以降、各機能のtf-idfスコアは、TfidfVectorizerオブジェクトのidf_属性を介して取得できます。

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["This is very strange",
          "This is very Nice"]
vectorizer = TfidfVectorizer(min_df=1)
X = vectorizer.fit_transform(corpus)
idf = vectorizer.idf_
print dict(Zip(vectorizer.get_feature_names(), idf))

出力:

{u'is': 1.0,
 u'Nice': 1.4054651081081644,
 u'strange': 1.4054651081081644,
 u'this': 1.0,
 u'very': 1.0}

コメントで説明したように、バージョン0.15より前の回避策は、ベクトライザーの非表示のidf_TfidfTransformerのインスタンス)を介して_tfidf属性にアクセスすることです。

idf = vectorizer._tfidf.idf_
print dict(Zip(vectorizer.get_feature_names(), idf))

上記と同じ出力が得られます。

78
YS-L

すべてのドキュメントのTF-IDF値を取得する方法については、 this も参照してください。

feature_names = tf.get_feature_names()
doc = 0
feature_index = X[doc,:].nonzero()[1]
tfidf_scores = Zip(feature_index, [X[doc, x] for x in feature_index])
for w, s in [(feature_names[i], s) for (i, s) in tfidf_scores]:
    print w, s

this 0.448320873199
is 0.448320873199
very 0.448320873199
strange 0.630099344518

#and for doc=1
this 0.448320873199
is 0.448320873199
very 0.448320873199
Nice 0.630099344518

結果はドキュメントごとに正規化されていると思います。

>>> 0.4483208731992 + 0.4483208731992 + 0.4483208731992 + 0.6300993445182 0.9999999999997548

1
aless80