机器学习的一个重要应用就是文档的自动分类,比如一封电子邮件、新闻报道、用户留言、政府公文等。在文档分类中,比如一封电子邮件就是一个实例,而电子邮件中的某些元素(词语)则构成特征。我们可以观测文档中出现的词,并把每个词的出现或者不出现作为一个特征,这样得到的特征数目就会跟词汇表中的词目一样多。
朴素贝叶斯是比较常用的算法,朴素的含义是假设特征之间相互独立,为啥需要这个假设呢?
假设词汇表中有1000个单词,要得到好的概率分布,就需要足够的数据样本,假设每个特征需要N个样本,那么对于1000特征的词汇,则需要N的1000次幂。随着特征数目增大样本数会迅速增长。但如果假设特征之间相互独立,则样本数可以由N的1000次幂减少到1000*N个。
所谓的独立指的是统计意义上的独立,即一个特征或者单次出现的可能性与它和其他单词相邻没有关系。比如,单词bacon出现在unhealthy和出现在delicious后面的概率相等,当然这个假设并不正确,两者肯定不相等,这个假设正是朴素贝叶斯中的朴素的概念。朴素贝叶斯的另外一个假设是每个特征同等重要。其实这个假设也有问题,如果要判断留言板的留言是否恰当,可能并不需要看完所有的1000个单词,而只需要看10-20个单词(特征)即可做出判断。
尽管朴素贝叶斯有这些小瑕疵,但是实际的效果仍然很好。
案例:
以斑点狗论坛留言板为例,需要构建一个快速过滤器,屏蔽一些侮辱性的言论。对此类问题需要建立两个类别,侮辱和非侮辱类,使用1和0分别表示。
1、将文本转化为数字向量
要从文本中获取特征,需要先拆分文本。将文本片段表示为一个词条向量,其中值1表示词条出现在文档中,0表示词条未出现。
1)导入数据