繁体   English   中英

如何为稀疏矩阵中的 TF-IDF 值添加阈值限制

[英]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参数,用于:

在构建词汇表时,忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。

在以下示例中, word1word3出现在 >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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM