朴素贝叶斯概论
优点:在数据较小的情况下仍然有效,可以处理多类别问题
缺点:对于输入数据的准备方式较为敏感
使用数据类型:标称型数据
工作原理
朴素贝叶斯是贝叶斯决策理论的一部分,我们会选择高概率对应的类别,这是贝叶斯决策论的核心思想,即选择具有最高概率的决策
贝叶斯准则:p(c|x)=p(x|c)p©/p(x)
使用条件概率来分类
如果p1(x,y)>p2(x,y),那么属于类别1
如果p1(x,y)<p2(x,y),那么属于类别2
可以转化为
如果p(c1|x,y)>p(c2|x,y),那么属于c1,
如果p(c1|x,y)<p(c2|x,y),那么属于c2,
一般过程
1.收集数据:可以使用任何方法
2.准备数据:需要数值型或者布尔型数据
3.分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好
4.训练算法:计算不同的独立特征的条件概率
5.测试算法:测试错误率
6.使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要文本。
词表到向量的转化函数
def createVocabList(dataSet):
vocabSet = set ( [ ] )
#创建一个空集
for document in dataSet:
vocabSet = vocabset | set(document)
#创建两个集合的并集
return list(vocabSet)
def setOfWords2Vec(vocabList, inputSet):
returnVec = [0] *len(vocabList)
#创建一个其中所含元素都为0的向量
for word in inputSet:
if word in vocabList:
returnVec[vocabList,index(word)] = 1
else: print "the word: %s is not in my vocabulary!" % word
return returnVec
从词向量计算概率
伪代码:
计算每个类别中的文档数目
对每篇训练文档:
对每个类别:
如果词条出现文档中→增加该词条的计数值
增加所有词条的计数值
对每个类别:
对每个词条:
将该词条的数目除以总词条的数目得到条件概率
返回每个类别的条件概率
朴素贝叶斯词袋模型
def bagOfWords2VecMN(vocabList, inputSet):
returnVec = [0] * len(vocabList)
for word in inptSet:
if word in vocabList:
returnVec[vocabList,infdex(word)] += 1
return returnVec