第四章 基于概率论的分类方法:朴素贝叶斯
基础:统计特征在数据集中取某个特定值的次数,然后除以数据集的实例总数,得到特征取该值的概率。
4.1 基于贝叶斯理论的分类方法
假设有两类数据组成的数据集如下:
假设:
p1(x,y)表示数据点(x,y)属于类别1的概率。
p2(x,y)表示数据点(x,y)属于类别2的概率。
贝叶斯决策理论的核心思想:选择高概率对应的类别,选择具有最高概率的决策。
对于一个新数据点(x,y),可以用如下规则判断它的类别:
- 如果p1(x,y)>p2(x,y),那么选择类别1。
- 如果p1(x,y)<p2(x,y),那么选择类别2。
4.2 条件概率
略
4.3 使用条件概率来分类
p(c1|x,y): 给定某个由x、y表示的数据点,那么该数据点来自类别c1的概率是多少。
应用贝叶斯准则:
使用贝叶斯准则,可以通过已知的三个概率值来计算未知的概率值。
- 如果p(c1|x,y)>p(c2|x,y),那么选择类别c1。
- 如果p(c1|x,y)<p(c2|x,y),那么选择类别c2。
4.4 使用朴素贝叶斯进行文档分类
朴素贝叶斯是用于文档分类的常用算法。
特征: 观察文档中出现的词,并把每个词的出现或者不出现作为一个特征。这样便有跟文档中出现过词汇的个数一样多的特征。
有大量特征时,使用直方图效果更好。
朴素贝叶斯假设:
- 特征之间相互(统计意义上)独立,如一个单词出现的可能性与其他单词相邻没有关系,虽并不正确,但朴素贝叶斯实际效果还是可以。
- 每个特征同等重要。
4.5 使用python进行文本分类
从文本中提取特征,首先拆分文本,将文本转化为词向量,某个词存在表示为1,不存在表示为0,这样,原来一大串字符串便转为简单的0,1序列的向量。当然也可以转为更为复杂的向量,根据不同词出现的频率等等。
准备数据:从文本中构建词向量
考虑出现在所有文档中的所有单词,将每一篇文档转化为词汇表上的向量。
def loadDataSet(): ''' 创建实验样本,真实样本可能差很多,需要对真实样本做一些处理,如 去停用词(stopwords),词干化(stemming)等等,处理完后得到更"clear"的数据集, 方便后续处理 ''' postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'], ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'], ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'], ['stop', 'posting', 'stupid', 'worthless', 'garbage'], ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'], ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']] classVec = [0,1,0,1,0,1] #1代表存在侮辱性的文字,0代表不存在