[英]How to add threshold limit to TF-IDF values in a sparse matrix
我正在使用 sklearn.feature_extraction.text,TfidfTransformer 来获取我的语料库的 TF_IDF 值。
这就是我的代码的样子
X = dataset[:,0]
Y = dataset[:,1]
for index, item in enumerate(X):
reqJson = json.loads(item, object_pairs_hook=OrderedDict)
X[index] = json.dumps(reqJson, separators=(',', ':'))
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X)
tfidf_transformer = TfidfTransformer()
X_train_tfidf = (tfidf_transformer.fit_transform(X_train_counts))
#(58720, 167216) is the size of my sparse matrix
for i in range (0,58720):
for j in range (0,167216):
print(i,j)
if X_train_tfidf[i,j]>0.35:
X_train_tfidf[i,j]=0
正如您所看到的,我想过滤掉超过 0.35 的 tf-idf 值,以便我可以减少我的功能集并使我的 model 更高效,但使用 for 循环只会让情况变得更糟。 我查看了 TfidfTransformer 的文档,但找不到改进它的方法。 有什么想法或提示吗? 谢谢你。
听起来这个问题试图忽略频繁出现的单词。
TfidfVectorizer
(不是TfidfTransformer
)实现包含一个max_df
参数,用于:
在构建词汇表时,忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。
在以下示例中, word1
和word3
出现在 >50% 的文档中,因此设置max_df=0.5
意味着结果数组仅包含word2
:
from sklearn.feature_extraction.text import TfidfVectorizer
raw_data = [
"word1 word2 word3",
"word1 word1 word1",
"word2 word2 word3",
"word1 word1 word3",
]
vect = TfidfVectorizer(max_df=0.5)
X = vect.fit_transform(raw_data)
print(vect.get_feature_names_out())
print(X.todense())
['word2']
[[1.]
[0.]
[1.]
[0.]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.