我正在使用Scikit.
开发一个垃圾邮件过滤器以下是我遵循的步骤:
Xdata = ["This is spam" , "This is Ham" , "This is spam again"]
-
Matrix
=Countvectorizer (XData)
。矩阵将包含所有文档中每个单词的计数。所以矩阵[i][j]将给出文档i
中j
字的计数 -
Matrix_idfX
=TFIDFVectorizer(Matrix)
。它将使分数正常化。 -
Matrix_idfX_Select
=SelectKBest( Matrix_IdfX , 500)
。它将矩阵减少到500个最佳得分列 -
Multinomial.train( Matrix_Idfx_Select)
现在我的问题是我是否需要在上述四个步骤中的任何一个中执行规范化或标准化 ?如果是,那么经过哪一步,为什么?
谢谢
您可能希望在标记化(词干提取或词序化)之前对单词进行规范化。参见相关问题。
注意:你不需要,因为"TfidfVectorizer将CountVectorizer和TfidfTransformer的所有选项组合在一个模型中"(scikit docs)还要注意"虽然tf-idf规范化通常非常有用,但在某些情况下,二进制出现标记可能提供更好的功能。这可以通过使用CountVectorizer的二进制参数来实现。特别是,一些估计,如伯努利朴素贝叶斯显式建模离散布尔随机变量。此外,非常短的文本可能有嘈杂的tf-idf值,而二进制出现信息更稳定。"