4-4 朴素贝叶斯词袋模型
在之前的案例中,使用的是如下朴素贝叶斯的词集模型:
def setWordsToVec(vocabList, inputSet):
returnVec = [0] * len(vocabList) # 创建一个其中所含元素都为0的向量
for word in inputSet: # 遍历每个词条
if word in vocabList: # 如果词条存在于词汇表中,则置1
returnVec[vocabList.index(word)] = 1
else: # 不会出现如下情况
print("the word: %s is not in my Vocabulary!" % word)
return returnVec # 返回文档向量
词袋模型
若一个词在文档中出现不止一次,这可能意味着包含该词是否出现在文档中所不能表达的某种信息,这种方法称为词袋模型。
下面是基于词袋模型的朴素贝叶斯代码,唯一与上面代码不同的是每遇到一个单词时,它会增加词向量中的对应值,而不是将数值设为1。
def setWordsToVecBag(vocabList, inputSet):
returnVec = [0] * len(vocabList) # 创建一个其中所含元素都为0的向量
for word in inputSet: # 遍历每个词条
if word in vocabList: # 如果词条存在于词汇表中,则置1
returnVec[vocabList.index(word)] += 1
return returnVec # 返回文档向量