在Scikit中进行文本分类时,是否需要标准化数据?

时间:2015-05-30 12:18:01

标签: python r machine-learning nlp scikit-learn

我正在使用Scikit.开发垃圾邮件过滤器 以下是我遵循的步骤:

Xdata = ["This is spam" , "This is Ham" , "This is spam again"]

  1. Matrix = Countvectorizer (XData)。矩阵将包含所有文档中每个单词的计数。因此,Matrix [i] [j]会在文档j

  2. 中向我提供单词i的计数
  3. Matrix_idfX = TFIDFVectorizer(Matrix)。它会使得分正常化。

  4. Matrix_idfX_Select = SelectKBest( Matrix_IdfX , 500)。它会将矩阵减少到500个最佳得分列

  5. Multinomial.train( Matrix_Idfx_Select)

  6. 现在我的问题我是否需要在上述四个步骤中执行规范化或标准化?如果是,那么在哪一步之后又为什么?

    由于

1 个答案:

答案 0 :(得分:1)

您可能希望在标记化(词干化或词形还原)之前规范化单词。例如,请参阅related question

注意:您不需要,因为TfidfVectorizer将CountVectorizer和TfidfTransformer的所有选项结合在一个模型中,并且#34; (scikit docs) 另请注意"虽然tf-idf规范化通常非常有用,但可能存在二进制出现标记可能提供更好功能的情况。这可以通过使用CountVectorizer的二进制参数来实现。特别是,一些估计量,如伯努利朴素贝叶斯,明确地模拟离散布尔随机变量。此外,非常短的文本可能具有嘈杂的tf-idf值,而二进制出现信息更稳定。" (相同的文档)