朴素贝叶斯分类最适合的场景有文本分类、情感分析和垃圾邮件识别。本质都是文本分类,也常用于自然语言处理NLP(AI子领域)工具。
用朴素贝叶斯做文档分类项目,需要用到sklearn机器学习工具。
sklearn机器学习包
高斯朴素贝叶斯(GaussianNB)、多项式朴素贝叶斯(MultinomialNB)和伯努利朴素贝叶斯(BernoulliNB)。根据特征变量的不同选择不同算法。
高斯朴素贝叶斯:特征变量为连续变量,符合高斯分布,比如身高。
多项式朴素贝叶斯:特征变量为离散变量,符合多项分布,如文档中一个单词出现的次数,或词的TF-IDF值。
伯努利朴素贝叶斯:特征变量是布尔变量,符合0/1分布,如文档中单词是否出现。
TF-IDF值:用来评估某个词语对于一个文件集或文档库中的其中一份文件的重要程度的统计方法。
词频TF:计算一个单词在文档中出现的次数,认为其重要性与次数成正比。
逆向文档频率IDF:指一个单词在文档中的区分度,认为一个单词出现在的文档数越少,则通过这个词就可以把文档与其它文档区分开。IDF越大,则单词区分度越大。
即TF-IDF为词频TF与逆向文档频率IDF的乘积,该词出现在一个文档的次数多,且很少出现在其他文档中,这样的单词适合用于分类。 即一篇文档的关键词。
算法原理参见博客:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
计算公式:
TF-IDF=TF*IDF
在sklearn中直接使用TfidVectorizer类,来计算单词TF-IDF向量的值。
TfidVectorizer类的创建:
TfidfVectorizer(stop_words=stop_words, token_pattern=token_pattern)
该函数有两个构造参数,停用词stop_words是列表类型,过滤规则token_pattern是正则表达式。
停用词即分类中没有用的词,一般TF高但IDF低,起不到分类作用,为节空间和计算时间,这些词不需要计算。
创建好后,可以用fit_transform进行拟合模型,返回文本矩阵,表示了每个单词在文档中的TF-IDF值。
还可以获得其他向量属性:
例如: