在 scikit learn 中设置字数上限

Imposing a cap on word count in scikit learn

我正在分析歌词,其中重复不一定意味着更高的重要性,所以我想限制每个文档的字数 。例如,如果一个单词在一首歌中出现 n 次,其中 n > threshold,那么我会将 n 替换为 threshold.

我检查了CountVectorizer docs,有min_dfmax_df的选项,但这些只能忽略出现在某些中的单词文档,而不是在 单个 文档中出现 n 的单词。

我正在考虑更改稀疏矩阵的元素(例如,找到所有元素 > 阈值,然后替换),但我也找不到办法。提前致谢!

我不知道在 scikit learn 中有任何预建的功能,但是你绝对可以直接编辑你的文档术语矩阵,例如 numpy.where :

x = numpy.where(x < threshold, x, threshold)

其中 x 是您的文档术语矩阵,threshold 是您的阈值。

编辑: 我没有意识到 numpy.where 不适用于 scipy 稀疏矩阵。您可以使用 scipy.sparse 中的 find function 将 return 稀疏矩阵中的所有非 0 索引,以便直接访问和修改这些值:

from scipy.sparse import find

results = find(x > threshold)
for i in range(len(results[0])):
    x[results[0][i], results[1][i]] = threshold

它明显不够优雅,但它确实有效。