目录
自己动手写代码实现朴素贝叶斯之实例:使用Python进行文本分类
本文的目的是使你对朴素贝叶斯在理论上有一个入门的理解,在实战方面呢也有一个入门的小示例,看完以后你就可以开启你的进阶之路了。哈哈哈。
朴素贝叶斯算法是统计学的一种分类方法,它是一种运用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯方法可以与决策树、神经网络分类算法相媲美。该算法能运用到大型数据库中,而且方法简单,分类准确率高,速度快,由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此也衍生出很多降低独立性假设的贝叶斯分类算法,这里概不讨论。
贝叶斯准则(贝叶斯公式):
即当已知事件Bi的概率P(Bi)和事件Bi已发生条件下事件A的概率P(A│Bi),则可运用贝叶斯定理计算出在事件A发生条件下事件Bi的概率P(Bi│A)。
自己动手写代码实现朴素贝叶斯之实例:使用Python进行文本分类
准备数据:从文本中构建词向量
def loadDataSet():
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]
return postingList,classVec
def createVocabList(dataset):
vocabSet=set([])
for document in dataset:
#创建两个集合的并集
vocabSet =vocabSet|set(document)
return list(vocabSet)
def setOfWords2Vec(vocablist,inputset):
returnVec=[0]*len(vocablist)
for word in inputset:
if word in vocablist:
#这里如果词出现就为1,不出现就为0,出现多次仍为1
returnVec[vocablist.index(word)]=1
else:
print("the word: %s is not in my Vocabulary!" %word)
return returnVec
listOPosts,listClasses = loadDataSet()
myVocabList=createVocabList(listOPosts)
print(myVocabList)
print(setOfWords2Vec(myVocabList,listOPosts[0]))
# OUTPUTS:
# ['dalmation', 'worthless', 'buying', 'steak', 'mr', 'ate', 'park', 'my', 'take', 'is', 'not', 'love', 'stop', 'licks', 'dog', 'problems', 'food', 'please', 'to', 'flea', 'so', 'how&#