web-dev-qa-db-ja.com

scikit-learn TfidfVectorizerの意味?

TfidfVectorizer 実装 scikit-learnについて読んでいましたが、メソッドの出力が何であるかわかりません。たとえば、次のようになります。

new_docs = ['He watches basketball and baseball', 'Julie likes to play basketball', 'Jane loves to play baseball']
new_term_freq_matrix = tfidf_vectorizer.transform(new_docs)
print tfidf_vectorizer.vocabulary_
print new_term_freq_matrix.todense()

出力:

{u'me': 8, u'basketball': 1, u'julie': 4, u'baseball': 0, u'likes': 5, u'loves': 7, u'jane': 3, u'linda': 6, u'more': 9, u'than': 10, u'he': 2}
[[ 0.57735027  0.57735027  0.57735027  0.          0.          0.          0.
   0.          0.          0.          0.        ]
 [ 0.          0.68091856  0.          0.          0.51785612  0.51785612
   0.          0.          0.          0.          0.        ]
 [ 0.62276601  0.          0.          0.62276601  0.          0.          0.
   0.4736296   0.          0.          0.        ]]

何ですか?(例:u'me ':8):

{u'me': 8, u'basketball': 1, u'julie': 4, u'baseball': 0, u'likes': 5, u'loves': 7, u'jane': 3, u'linda': 6, u'more': 9, u'than': 10, u'he': 2}

これは行列ですか、それとも単なるベクトルですか?、出力の意味がわかりません。

[[ 0.57735027  0.57735027  0.57735027  0.          0.          0.          0.
   0.          0.          0.          0.        ]
 [ 0.          0.68091856  0.          0.          0.51785612  0.51785612
   0.          0.          0.          0.          0.        ]
 [ 0.62276601  0.          0.          0.62276601  0.          0.          0.
   0.4736296   0.          0.          0.        ]]

誰かがこれらの出力をより詳細に説明できますか?

ありがとう!

18
anon

TfidfVectorizer-テキストを、推定器への入力として使用できる特徴ベクトルに変換します。

vocabulary_は、各トークン(Word)をマトリックス内の特徴インデックスに変換するディクショナリーです。各一意のトークンは、特徴インデックスを取得します。

何ですか?(例:u'me ':8)

これは、トークン「me」が出力マトリックスでフィーチャー番号8として表されていることを示しています。

これは行列ですか、それとも単なるベクトルですか?

各文はベクトルであり、入力した文は3つのベクトルの行列です。各ベクトルで、数値(重み)は特徴のtf-idfスコアを表します。例: 'julie':4->各文に「Julie」が表示されると、重みがゼロ(tf-idf)になることを通知します。 2番目のベクトルでわかるように、

[0. 0.68091856 0. 0. 0.51785612 0.51785612 0. 0. 0. 0. 0.]

5番目の要素のスコアは0.51785612-「ジュリー」のtf-idfスコア。 Tf-Idfスコアリングの詳細については、こちらをご覧ください: http://en.wikipedia.org/wiki/Tf%E2%80%93idf

15
D Volsky

したがって、tf-idfは、一連のドキュメント全体から独自の語彙のセットを作成します。これは出力の最初の行に表示されます。 (理解を深めるためにソートしました)

{u'baseball': 0, u'basketball': 1, u'he': 2, u'jane': 3, u'julie': 4, u'likes': 5, u'linda': 6,  u'loves': 7, u'me': 8, u'more': 9, u'than': 10, }

そして、ドキュメントがそのtf-idfを取得するために解析されるとき。資料:

彼はバスケットボールと野球を見ています

そしてその出力、

[0.57735027 0.57735027 0.57735027 0. 0. 0. 0. 0. 0. 0. 0.]

同等です、

[ジェーンジュリーが好きな野球のバスケットボールリンダが私を愛する以上に]

私たちのドキュメントには次の単語しかないため、作成された語彙からの野球、バスケットボール、彼。ドキュメントベクトルの出力には、これらの3つの単語についてのみ、tf-idfの値があり、同じソートされた語彙の位置にあります。

tf-idfは、ドキュメントの分類、検索エンジンでのランキングに使用されます。 tf:用語の頻度(独自の語彙からのドキュメントに存在する単語の数)、idf:逆のドキュメントの頻度(各ドキュメントに対する単語の重要性)。

5
Rajesh Mappu

この方法は、すべての単語に均等に重み付けするべきではないという事実に対処し、重みを使用して、ドキュメントに最も固有であり、それを特徴付けるために最もよく使用される単語を示します。

new_docs = ['basketball baseball', 'basketball baseball', 'basketball baseball']
new_term_freq_matrix = vectorizer.fit_transform(new_docs)
print (vectorizer.vocabulary_)
print ((new_term_freq_matrix.todense()))


{'basketball': 1, 'baseball': 0}
    [[ 0.70710678  0.70710678]
     [ 0.70710678  0.70710678]
     [ 0.70710678  0.70710678]]

new_docs = ['basketball baseball', 'basketball basketball', 'basketball basketball']
new_term_freq_matrix = vectorizer.fit_transform(new_docs)
print (vectorizer.vocabulary_)
print ((new_term_freq_matrix.todense()))

{'basketball': 1, 'baseball': 0}
    [[ 0.861037    0.50854232]
     [ 0.          1.        ]
     [ 0.          1.        ]] 

new_docs = ['basketball basketball baseball', 'basketball basketball', 'basketball 
basketball']
new_term_freq_matrix = vectorizer.fit_transform(new_docs)
print (vectorizer.vocabulary_)
print ((new_term_freq_matrix.todense())) 


{'basketball': 1, 'baseball': 0}
[[ 0.64612892  0.76322829]
[ 0.          1.        ]
[ 0.          1.        ]]
0
David Miller