[题外话]近期申请了一个微信公众号:平凡程式人生。有兴趣的朋友可以关注,那里将会涉及更多更新机器学习、OpenCL+OpenCV以及图像处理方面的文章。
2.2 使用朴素贝叶斯算法对文本进行分类
使用朴素贝叶斯算法对文本进行分类实现过程如下:
创建文件doctest.py;
调用函数loadDataSet()创建6个文本样例,并标记每个样本的类别。
调用函数Bayes.createVocabList()创建6个样本对应的词汇表。
调用函数Bayes.bagOfWords2Vec()获取各个样本中单词出现次数的列表,并记录到变量trainMat中。
调用函数Bayes.trainNB0()使用6个样本进行训练,返回两个类别中各个单词出现的概率及样本中类别1的概率。
调用函苏Bayes.classifyNB()对测试样本进行分类测试。
具体代码实现如下:
def testingNB():
listOPosts, listClasses = loadDataSet()
myVocabList = Bayes.createVocabList(listOPosts)
trainMat = []
for postinDoc in listOPosts:
#trainMat.append(Bayes.setOfWords2Vec(myVocabList, postinDoc))
trainMat.append(Bayes.bagOfWords2Vec(myVocabList, postinDoc))
p0V, p1V, pAb = Bayes.trainNB0(trainMat, listClasses)
testEntry = ['love', 'my', 'dalmation']
#thisDoc = array(Bayes.setOfWords2Vec(myVocabList, testEntry))
thisDoc = array(Bayes.bagOfWords2Vec(myVocabList, testEntry))
print testEntry, 'classified as: ', Bayes.classifyNB(thisDoc, p0V, p1V, pAb)
testEntry = ['stupid', 'garbage']
#thisDoc = array(Bayes.setOfWords2Vec(myVocabList, testEntry))
thisDoc = array(Bayes.bagOfWords2Vec(myVocabL