多项式模型的朴素贝叶斯:
实际看,每个词的权重是完全不同的,仅仅看是否出现,其实是无法最大限度的逼近真实。仅仅需要把统计单词的函数做一点点增强,就可以实现统计词频了。
defbagOfWords2VecMN(vocabList, inputSet):
returnVec = [0]*len(vocabList)
for word in inputSet:
if word in vocabList:
returnVec[vocabList.index(word)] +=1
return returnVec
>>> bayes.setOfWords2Vec(myVocabList,['I','him','stupid','not','not','stupid'])
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,0, 0,1, 0, 0, 0, 0, 0]
看,stupid not not都被两次统计了!
>>> bayes.bagOfWords2VecMN(myVocabList,['I','him','stupid','not','not','stupid'])
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0,0, 0,2, 0, 0, 0, 0, 0]
基本都的问题都解决了,下面就是实际应用讲解了。
实际实现就简单了,前面的函数都可以使用。唯一添加的就是要对待分析文本做点数据清洗工作。 除去标点符号,然后什么 a 空格 等短词汇,整个词汇列表如下:
'roofer', 'create', 'computing', 'been','strategy', 'attaching', 'much', 'treat', 'borders', 'prototyp