我正在使用 Scikit 开发垃圾邮件过滤器。
以下是我遵循的步骤:
Xdata = [“这是垃圾邮件”,“这是火腿”,“这又是垃圾邮件”]
矩阵
=计数向量化器 (XData)
。矩阵将包含所有文档中每个单词的计数。所以 Matrix[i][j] 会给出文档i
中单词 Matrix_idfX
=TFIDFVectorizer(矩阵)
。它将标准化分数。Matrix_idfX_Select
=SelectKBest( Matrix_IdfX , 500)
。它将把矩阵减少到 500 个最佳得分列Multinomial.train(Matrix_Idfx_Select)
j
的计数
现在我的问题是我需要在上述四个步骤中的任何一个步骤中执行标准化或标准化吗?如果是,那么在哪一步之后以及为什么?
谢谢
最佳答案
您可能需要在标记化(词干提取或词形还原)之前对单词进行规范化。请参阅related question例如。
注意:您不需要,因为“TfidfVectorizer 将 CountVectorizer 和 TfidfTransformer 的所有选项组合在一个模型中”( scikit docs ) 另请注意,“虽然 tf-idf 归一化通常非常有用,但在某些情况下,二进制出现标记可能会提供更好的特征。这可以通过使用 CountVectorizer 的二进制参数来实现。特别是一些估计器,例如 Bernoulli Naive贝叶斯显式地对离散 bool 随机变量进行建模。此外,非常短的文本可能具有嘈杂的 tf-idf 值,而二进制出现信息则更稳定。” (相同的文档)
关于python - 在 Scikit 中进行文本分类时是否需要标准化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30546071/