Sklearn tfidf_vectorizer 的输出是什么
What is this output of Sklearn tfidf_vectorizer
首先,我将 tfidf_vectorizer 应用于我的训练数据。
X_train_counts = tfidf_vectorizer.fit_transform(X_train)
然后我尝试输出'programming'这句话的tf-idf值。
test = tfidf_vectorizer.transform(['programming']).reshape(1, -1)
print(test)
结果是
(0, 45295) 1.0
这个1.0代表什么?我认为它可能是单词 'programming' 的 tf-idf 或 idf 值,因为本例中的 tf 值是 1.
然后我试了
test = tfidf_vectorizer.transform(['programming upgrade']).reshape(1, -1)
print(test)
结果如下
(0, 60314) 0.7968362696657073
(0, 45295) 0.6041952990095505
如果tf-idf值是1,那么,在这种情况下,tf值是1/2,应该是0.5,但事实并非如此。
那么这个数字代表什么?好像不是 tf 值,不是 idf 值,也不是 tf-idf 值。
困惑
我认为您的问题是 tfidf_vectorizer 的默认设置是标准“l2”而不是“l1”。
tfidf_vectorizer 的输出是 tf-idf 矩阵,因此数字是 tf-idf 值。
默认情况下,tfidf_vectorizer 使用 'l2' 范数 (https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html)。
这里是对结果 tf-idf 值的一些并排比较:
from sklearn.feature_extraction.text import TfidfVectorizer
doc1 = ['programming upgrade']
tfidf_l1 = TfidfVectorizer(norm='l1')
tfidf_2 = TfidfVectorizer(norm='l2')
tfidf_l1.fit(docs)
tfidf_2.fit(docs)
print("Output tfidf_transformer with l1 norm:")
test = tfidf_l1.transform(['programming upgrade']).reshape(1, -1)
print(test)
print("Output tfidf_transformer with l2 norm:")
test = tfidf_2.transform(['programming upgrade']).reshape(1, -1)
print(test)
还有这个returns:
Output tfidf_transformer with l1 norm:
(0, 1) 0.5
(0, 0) 0.5
Output tfidf_transformer with l2 norm:
(0, 1) 0.7071067811865475
(0, 0) 0.7071067811865475
因此只需指定您的 tfidfVectorizer 即可使用规范“l1”。
首先,我将 tfidf_vectorizer 应用于我的训练数据。
X_train_counts = tfidf_vectorizer.fit_transform(X_train)
然后我尝试输出'programming'这句话的tf-idf值。
test = tfidf_vectorizer.transform(['programming']).reshape(1, -1)
print(test)
结果是
(0, 45295) 1.0
这个1.0代表什么?我认为它可能是单词 'programming' 的 tf-idf 或 idf 值,因为本例中的 tf 值是 1.
然后我试了
test = tfidf_vectorizer.transform(['programming upgrade']).reshape(1, -1)
print(test)
结果如下
(0, 60314) 0.7968362696657073
(0, 45295) 0.6041952990095505
如果tf-idf值是1,那么,在这种情况下,tf值是1/2,应该是0.5,但事实并非如此。
那么这个数字代表什么?好像不是 tf 值,不是 idf 值,也不是 tf-idf 值。
困惑
我认为您的问题是 tfidf_vectorizer 的默认设置是标准“l2”而不是“l1”。
tfidf_vectorizer 的输出是 tf-idf 矩阵,因此数字是 tf-idf 值。
默认情况下,tfidf_vectorizer 使用 'l2' 范数 (https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html)。
这里是对结果 tf-idf 值的一些并排比较:
from sklearn.feature_extraction.text import TfidfVectorizer
doc1 = ['programming upgrade']
tfidf_l1 = TfidfVectorizer(norm='l1')
tfidf_2 = TfidfVectorizer(norm='l2')
tfidf_l1.fit(docs)
tfidf_2.fit(docs)
print("Output tfidf_transformer with l1 norm:")
test = tfidf_l1.transform(['programming upgrade']).reshape(1, -1)
print(test)
print("Output tfidf_transformer with l2 norm:")
test = tfidf_2.transform(['programming upgrade']).reshape(1, -1)
print(test)
还有这个returns:
Output tfidf_transformer with l1 norm:
(0, 1) 0.5
(0, 0) 0.5
Output tfidf_transformer with l2 norm:
(0, 1) 0.7071067811865475
(0, 0) 0.7071067811865475
因此只需指定您的 tfidfVectorizer 即可使用规范“l1”。