我正在使用Scikit.
开发垃圾邮件过滤器
以下是我遵循的步骤:
Xdata = ["This is spam" , "This is Ham" , "This is spam again"]
Matrix
= Countvectorizer (XData)
。矩阵将包含所有文档中每个单词的计数。因此,Matrix [i] [j]会在文档j
i
的计数
Matrix_idfX
= TFIDFVectorizer(Matrix)
。它会使得分正常化。
Matrix_idfX_Select
= SelectKBest( Matrix_IdfX , 500)
。它会将矩阵减少到500个最佳得分列
Multinomial.train( Matrix_Idfx_Select)
现在我的问题我是否需要在上述四个步骤中执行规范化或标准化?如果是,那么在哪一步之后又为什么?
由于
答案 0 :(得分:1)
您可能希望在标记化(词干化或词形还原)之前规范化单词。例如,请参阅related question。
注意:您不需要,因为TfidfVectorizer将CountVectorizer和TfidfTransformer的所有选项结合在一个模型中,并且#34; (scikit docs) 另请注意"虽然tf-idf规范化通常非常有用,但可能存在二进制出现标记可能提供更好功能的情况。这可以通过使用CountVectorizer的二进制参数来实现。特别是,一些估计量,如伯努利朴素贝叶斯,明确地模拟离散布尔随机变量。此外,非常短的文本可能具有嘈杂的tf-idf值,而二进制出现信息更稳定。" (相同的文档)