【问题标题】:Remove single occurrences of words in CountVectorizer删除 CountVectorizer 中单次出现的单词
【发布时间】:2019-12-01 01:06:03
【问题描述】:

我正在使用CountVectorizer() 创建一个词频矩阵。我想删除频率为两个或更少的词汇表中的所有术语。 然后我使用tfidfTransformer() 创建一个 ti*idf 矩阵

vectorizer=CountVectorizer()
X =vectorizer.fit_transform(docs) 

matrix_terms = np.array(vectorizer.get_feature_names())     
matrix_freq = np.asarray(X.sum(axis=0)).ravel()

tfidf_transformer=TfidfTransformer()     
tfidf_matrix = tfidf_transformer.fit_transform(X)

然后我想使用 LSA 算法进行降维,并使用 k-means 进行聚类。但我想制作没有频率为两个或更少的术语的集群。 有人可以帮帮我吗?

【问题讨论】:

标签: python k-means dimensionality-reduction


【解决方案1】:

您只需保留最大值小于 2 的所有列:

import numpy as np

count_vec = np.random.randint(0, 3, (5, 10))
print(count_vec)
[[1 1 2 0 2 2 2 0 0 2]
 [0 1 0 2 1 1 0 1 0 0]
 [0 1 0 1 0 1 1 2 2 2]
 [0 0 2 1 1 1 0 0 0 2]
 [1 0 0 2 2 2 1 1 2 2]]

只保留最大值低于 2 的列:

count_vec = count_vec[:, count_vec.max(axis=1) >= 2]
print(count_vec)
[[2 1 2 2 1 0 1 0 1]
 [1 1 0 2 0 0 2 0 1]
 [0 0 0 2 0 1 0 1 0]
 [1 0 2 0 2 2 2 1 2]
 [1 2 2 1 1 0 2 2 1]]

【讨论】:

  • 您好,感谢您的回答。我认为 max_df 是关于术语的文档频率 (DF),它告诉您集合中有多少文档具有术语 X。我需要根据其“术语频率”(TF) 消除词汇表中的术语,对于例如,如果词汇的词频为 10 或更少,我想删除它,请注意,一个词可能仅在文档中出现 10 次,则其 DF 为 1,但其 TF 为 10
  • 好的,我明白了。所以你想删除行或列?比如,删除所有值都低于 1 的所有列?如果你把它描述得更清楚,我知道该怎么做。
猜你喜欢
  • 2018-01-30
  • 2014-11-12
  • 1970-01-01
  • 2018-05-26
  • 2022-12-18
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多