【发布时间】:2019-04-08 06:45:22
【问题描述】:
这是我正在谈论的一个最小示例:
import numpy as np
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
data = fetch_20newsgroups()
x = data.data
vec = TfidfVectorizer(min_df=0.01, max_df=0.5)
mat = vec.fit_transform(x).astype('bool')
vec.set_params(binary=True)
print(np.array_equal(mat, vec.fit_transform(x)))
这会打印出False。设置 binary=True 和将所有非零值设置为 True 之间的根本区别是什么?
编辑:正如@juanpa.arrivillaga 回答的那样,TfidfVectorizer(binary=True) 仍然进行逆文档频率计算。但是,我也注意到CountVectorizer(binary=True) 也不会产生与.astype('bool') 相同的输出。下面是一个例子:
In [1]: import numpy as np
...: from sklearn.datasets import fetch_20newsgroups
...: from sklearn.feature_extraction.text import CountVectorizer
...:
...: data = fetch_20newsgroups()
...: x = data.data
...:
...: vec = CountVectorizer(min_df=0.01, max_df=0.5)
...: a = vec.fit_transform(x).astype('bool')
...:
...: vec.set_params(binary=True)
...: b = vec.fit_transform(x).astype('bool')
...: print(np.array_equal(a, b))
...:
False
In [2]: a
Out[2]:
<11314x2141 sparse matrix of type '<class 'numpy.bool_'>'
with 950068 stored elements in Compressed Sparse Row format>
In [3]: b
Out[3]:
<11314x2141 sparse matrix of type '<class 'numpy.bool_'>'
with 950068 stored elements in Compressed Sparse Row format>
维度和 dtype 是相同的,这让我相信这些矩阵的内容是不同的。仅仅通过观察print(a) 和print(b) 的输出,它们看起来是一样的。
【问题讨论】:
-
binary=True在TfidfVectorizer的文档中进行了解释。他们不做同样的事情。
标签: python scikit-learn