朴素贝叶斯python代码实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

运行结果:

相关文档
最新文档