朴素贝叶斯分类(下):如何对文档进行分类?
朴素贝叶斯分类最适合的场景是文本分类、情感分析和垃圾邮件识别,其中情感分析和垃圾邮件识别都是通过文本来进行判断,三个场景基本都是文本分类,所以朴素贝叶斯常用于自然语言处理NLP的工具
使用朴素贝叶斯做文档分类:
sklearn机器学习包
sklearn提供了3个朴素贝叶斯分类算法,分别是高斯朴素贝叶斯、多项式朴素贝叶斯、伯努利朴素贝叶斯
根据特征变量的不同选择不同的算法:
- 高斯朴素贝叶斯:特征变量是连续变量,符合高斯分布,比如人的身高、物体长度
- 多项式朴素贝叶斯:特征变量是离散变量,符合多项分布,在文档分类中特征变量体现在一个单词出现的次数或者是单词的TF-IDF值等
- 伯努利朴素贝叶斯:特征变量是布尔变量,符合0/1分布,在文档分类中特征是单词是否出现
伯努利朴素贝叶斯是以文件为粒度,如果该单词在某文件中出现了即为1,否则为0,而多项式朴素贝叶斯是以单词为粒度,会计算在某个文件中的具体次数,而高斯朴素贝叶斯适合处理特征变量是连续变量,且符合正态分布(高斯分布)的情况,比如身高、体重这种自然界的现象就比较适合用高斯朴素贝叶斯来处理,而文本分类是使用多项式朴素贝叶斯或者伯努利朴素贝叶斯。
TF-IDF值
TF-IDF是一个统计方法,用来评估某个词语对于一个文件集或文档库中的其中一份文件的重要程度
词频TF计算了一个单词在文档中出现的次数,认为一个单词的重要性和它在文档中出现的次数呈正比
逆向文档频率IDF,指一个单词在文档中的区分度,认为一个单词出现在的文档数越少,就越能通过这个单词把该文档和其他文档区分开,IDF越大就代表该单词的区分度越大
TF-IDF就是词频TF和逆向文档频率IDF的乘积,这样这个单词在一个文档中出现的次数多且很少出现在其他文档中,这样的单词适合用于分类
IDF中可能有些单词不会存在文档中,为了避免分母为0 所以统一给单词出现的文档数都+1
TF-IDF=TF*IDF
更准确的对文档进行分类,比如“我”这种高频单词,所以TF词频高,但是IDF很低,整体的TF-IDF不高
例子:假设一个文件夹中一共有10篇文档,其中一篇文档有1000个单词,“this”单词出现了20次,“bayes”出现了5次,“this”在所有文档中均出现过,而“bayes”只在2篇文档中出现过,所以针对“this”,词频TF值为:20/1000=0.02,逆向文档频率IDF=log(10/10+1)=-0.0414,所以TF-IDF=-8.28e-4,针对“bayes”的词频TF=5/1000=0.005,IDF=log(10/2+1)=0.5229,TF-IDF=2.61e-3,所以“bayes”比“this”做区分要好
如何求TF-IDF?
在sklearn中直