朴素贝叶斯python代码实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
朴素贝叶斯
优点:在数据较少的情况下仍然有效,可以处理多类别问题
缺点:对于输入数据的准备方式较为敏感
适用数据类型:标称型数据
贝叶斯准则:
使用朴素贝叶斯进行文档分类
朴素贝叶斯的一般过程
(1)收集数据:可以使用任何方法。本文使用RSS源
(2)准备数据:需要数值型或者布尔型数据
(3)分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好
(4)训练算法:计算不同的独立特征的条件概率
(5)测试算法:计算错误率
(6)使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。
准备数据:从文本中构建词向量
摘自机器学习实战。
[['my','dog','has','flea','problems','help','please'], 0
['maybe','not','take','him','to','dog','park','stupid'], 1
['my','dalmation','is','so','cute','I','love','him'], 0
['stop','posting','stupid','worthless','garbage'], 1
['mr','licks','ate','my','steak','how','to','stop','him'], 0
['quit','buying','worthless','dog','food','stupid']] 1
以上是六句话,标记是0句子的表示正常句,标记是1句子的表示为粗口。我们通过分析每个句子中的每个词,在粗口句或是正常句出现的概率,可以找出那些词是粗口。
在bayes.py文件中添加如下代码:
[python]view plaincopy
1.# coding=utf-8
2.
3.def loadDataSet():
4. postingList = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'
],
5. ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
6. ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],
7. ['stop', 'posting', 'stupid', 'worthless', 'garbage'],
8. ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
9. ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]
10. classVec = [0, 1, 0, 1, 0, 1] # 1代表侮辱性文字,0代表正常言论
11.return postingList, classVec
12.
13.def createVocabList(dataSet):
14. vocabSet = set([])
15.for document in dataSet:
16. vocabSet = vocabSet | set(document)
17.return list(vocabSet)
18.
19.def setOfWords2Vec(vocabList, inputSet):
20. returnVec = [0] * len(vocabList)
21.for word in inputSet:
22.if word in vocabList:
23. returnVec[vocabList.index(word)] = 1
24.else:
25.print"the word: %s is not in my Vocabulary!" % word
26.return returnVec
运行结果:
训练算法:从词向量计算概率
[python]view plaincopy
1.# 朴素贝叶斯分类器训练函数
2.# trainMatrix: 文档矩阵, trainCategory: 由每篇文档类别标签所构成的向量
3.def trainNB0(trainMatrix, trainCategory):
4. numTrainDocs = len(trainMatrix)
5. numWords = len(trainMatrix[0])
6. pAbusive = sum(trainCategory) / float(numTrainDocs)
7. p0Num = zeros(numWords);
8. p1Num = zeros(numWords);
9. p0Denom = 0.0;
10. p1Denom = 0.0;
11.for i in range(numTrainDocs):
12.if trainCategory[i] == 1:
13. p1Num += trainMatrix[i]
14. p1Denom += sum(trainMatrix[i])
15.else:
16. p0Num += trainMatrix[i]
17. p0Denom += sum(trainMatrix[i])
18. p1Vect = p1Num / p1Denom
19. p0Vect = p0Num / p1Denom
20.return p0Vect, p1Vect, pAbusive
运行结果: