我在理解 sklearn 的 TfidfVectorizer 结果时遇到问题
I have a problem understanding sklearn's TfidfVectorizer results
给定一个包含 3 个文档的语料库,例如:
sentences = ["This car is fast",
"This car is pretty",
"Very fast truck"]
我正在手动执行 tf-idf 的计算。
对于文档 1 和单词 "car",我可以找到:
TF = 1/4
IDF = log(3/2)
TF-IDF = 1/4 * log(3/2)
相同的结果应该适用于文档 2,因为它有 4 个单词,其中之一是 "car"。
我已经尝试在 sklearn 中应用它,代码如下:
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
data = {'text': sentences}
df = pd.DataFrame(data)
tv = TfidfVectorizer()
tfvector = tv.fit_transform(df.text)
print(pd.DataFrame(tfvector.toarray(), columns=tv.get_feature_names()))
我得到的结果是:
car fast is pretty this truck very
0 0.500000 0.50000 0.500000 0.000000 0.500000 0.000000 0.000000
1 0.459854 0.00000 0.459854 0.604652 0.459854 0.000000 0.000000
2 0.000000 0.47363 0.000000 0.000000 0.000000 0.622766 0.622766
我可以理解sklearn使用了L2归一化,但是,前两个文档中"car"的tf-idf分数不应该相同吗?谁能帮我理解结果?
这是因为规范化。如果将参数 norm=None
添加到 TfIdfVectorizer(norm=None)
,您将得到以下结果,其值与 car
相同
car fast is pretty this truck very
0 1.287682 1.287682 1.287682 0.000000 1.287682 0.000000 0.000000
1 1.287682 0.000000 1.287682 1.693147 1.287682 0.000000 0.000000
2 0.000000 1.287682 0.000000 0.000000 0.000000 1.693147 1.693147
给定一个包含 3 个文档的语料库,例如:
sentences = ["This car is fast",
"This car is pretty",
"Very fast truck"]
我正在手动执行 tf-idf 的计算。
对于文档 1 和单词 "car",我可以找到:
TF = 1/4
IDF = log(3/2)
TF-IDF = 1/4 * log(3/2)
相同的结果应该适用于文档 2,因为它有 4 个单词,其中之一是 "car"。
我已经尝试在 sklearn 中应用它,代码如下:
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
data = {'text': sentences}
df = pd.DataFrame(data)
tv = TfidfVectorizer()
tfvector = tv.fit_transform(df.text)
print(pd.DataFrame(tfvector.toarray(), columns=tv.get_feature_names()))
我得到的结果是:
car fast is pretty this truck very
0 0.500000 0.50000 0.500000 0.000000 0.500000 0.000000 0.000000
1 0.459854 0.00000 0.459854 0.604652 0.459854 0.000000 0.000000
2 0.000000 0.47363 0.000000 0.000000 0.000000 0.622766 0.622766
我可以理解sklearn使用了L2归一化,但是,前两个文档中"car"的tf-idf分数不应该相同吗?谁能帮我理解结果?
这是因为规范化。如果将参数 norm=None
添加到 TfIdfVectorizer(norm=None)
,您将得到以下结果,其值与 car
car fast is pretty this truck very
0 1.287682 1.287682 1.287682 0.000000 1.287682 0.000000 0.000000
1 1.287682 0.000000 1.287682 1.693147 1.287682 0.000000 0.000000
2 0.000000 1.287682 0.000000 0.000000 0.000000 1.693147 1.693147