タイトルにあるように:countvectorizer
はtfidfvectorizer
と同じで、use_idf = falseですか?そうでない場合はなぜですか?
つまり、ここにtfidftransformer
を追加するのは冗長であることも意味しますか?
vect = CountVectorizer(min_df=1)
tweets_vector = vect.fit_transform(corpus)
tf_transformer = TfidfTransformer(use_idf=False).fit(tweets_vector)
tweets_vector_tf = tf_transformer.transform(tweets_vector)
いいえ、同じではありません。 TfidfVectorizer
は結果を正規化します。つまり、出力の各ベクトルのノルムは1です。
>>> CountVectorizer().fit_transform(["foo bar baz", "foo bar quux"]).A
array([[1, 1, 1, 0],
[1, 0, 1, 1]])
>>> TfidfVectorizer(use_idf=False).fit_transform(["foo bar baz", "foo bar quux"]).A
array([[ 0.57735027, 0.57735027, 0.57735027, 0. ],
[ 0.57735027, 0. , 0.57735027, 0.57735027]])
これは、行の内積がコサイン類似性になるように行われます。また、オプションsublinear_tf=True
を指定すると、TfidfVectorizer
は対数的に割引された頻度を使用できます。
TfidfVectorizer
をCountVectorizer
として動作させるには、コンストラクターオプションuse_idf=False, normalize=None
を指定します。
Larsmansが言ったように、TfidfVectorizer(use_idf = False、normalize = None、...)はCountVectorizerと同じように動作するはずです。
現在のバージョン(0.14.1)には、TfidfVectorizer(binary = True、...)がbinary = Falseをサイレントに残すバグがあり、最適なパラメーターのグリッド検索中にユーザーをスローする可能性があります。 (対照的に、CountVectorizerはバイナリフラグを正しく設定します。)これは、将来の(0.14.1以降の)バージョンでは 修正済み のようです。