版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
朴素贝叶斯优点:在数据较少的状况下仍然有效,能够解决多类别问题缺点:对于输入数据的准备方式较为敏感合用数据类型:标称型数据贝叶斯准则:使用朴素贝叶斯进行文档分类朴素贝叶斯的普通过程(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]
\o"viewplain"viewplain\o"copy"copy#
coding=utf-8
def
loadDataSet():
postingList
=
[['my',
'dog',
'has',
'flea',
'problems',
'help',
'please'],
['maybe',
'not',
'take',
'him',
'to',
'dog',
'park',
'stupid'],
['my',
'dalmation',
'is',
'so',
'cute',
'I',
'love',
'him'],
['stop',
'posting',
'stupid',
'worthless',
'garbage'],
['mr',
'licks',
'ate',
'my',
'steak',
'how',
'to',
'stop',
'him'],
['quit',
'buying',
'worthless',
'dog',
'food',
'stupid']]
classVec
=
[0,
1,
0,
1,
0,
1]
#
1代表侮辱性文字,0代表正常言论
return
postingList,
classVec
def
createVocabList(dataSet):
vocabSet
=
set([])
for
document
in
dataSet:
vocabSet
=
vocabSet
|
set(document)
return
list(vocabSet)
def
setOfWords2Vec(vocabList,
inputSet):
returnVec
=
[0]
*
len(vocabList)
for
word
in
inputSet:
if
word
in
vocabList:
returnVec[vocabList.index(word)]
=
1
else:
"the
word:
%s
is
not
in
my
Vocabulary!"
%
word
return
returnVec
运行成果:训练算法:从词向量计算概率[python]
\o"viewplain"viewplain\o"copy"copy#
朴素贝叶斯分类器训练函数
#
trainMatrix:
文档矩阵,
trainCategory:
由每篇文档类别标签所构成的向量
def
trainNB0(trainMatrix,
trainCategory):
numTrainDocs
=
len(trainMatrix)
numWords
=
len(trainMatrix[0])
pAbusive
=
sum(trainCategory)
/
float(numTrainDocs)
p0Num
=
zeros(numWords);
p1Num
=
zeros(numWords);
p0Denom
=
0.0;
p1Denom
=
0.0;
for
i
in
range(numTrainDocs):
if
trainCategory[i]
==
1:
p1Num
+=
trainMatrix[i]
p1Denom
+=
sum(trainMatrix[i])
else:
p0Num
+=
trainMatrix[i]
p0Denom
+=
sum(trainMatrix[i])
p1Vect
=
p1Num
/
p1Denom
p0Vect
=
p0Num
/
p1Denom
return
p0Vect,
p1Vect,
pAbusive
运行成果:测试算法:根据现状修改分类器上一节中的trainNB0函数中修改几处:p0Num
=
ones(numWords);p1Num
=
ones(numWords);p0Denom
=
2.0;p1Denom
=
2.0;p1Vect
=
log(p1Num
/
p1Denom)p0Vect
=
log(p0Num
/
p1Denom)[python]
\o"viewplain"viewplain\o"copy"copy#
朴素贝叶斯分类器训练函数
#
trainMatrix:
文档矩阵,
trainCategory:
由每篇文档类别标签所构成的向量
def
trainNB0(trainMatrix,
trainCategory):
numTrainDocs
=
len(trainMatrix)
numWords
=
len(trainMatrix[0])
pAbusive
=
sum(trainCategory)
/
float(numTrainDocs)
p0Num
=
ones(numWords);
p1Num
=
ones(numWords);
p0Denom
=
2.0;
p1Denom
=
2.0;
for
i
in
range(numTrainDocs):
if
trainCategory[i]
==
1:
p1Num
+=
trainMatrix[i]
p1Denom
+=
sum(trainMatrix[i])
else:
p0Num
+=
trainMatrix[i]
p0Denom
+=
sum(trainMatrix[i])
p1Vect
=
log(p1Num
/
p1Denom)
p0Vect
=
log(p0Num
/
p1Denom)
return
p0Vect,
p1Vect,
pAbusive
#
朴素贝叶斯分类函数
def
classifyNB(vec2Classify,
p0Vec,
p1Vec,
pClass1):
p1
=
sum(vec2Classify
*
p1Vec)
+
log(pClass1)
p0
=
sum(vec2Classify
*
p0Vec)
+
log(1.0
-
pClass1)
if
p1
>
p0:
return
1
else:
return
0
def
testingNB():
listOPosts,
listClasses
=
loadDataSet()
myVocabList
=
createVocabList(listOPosts)
trainMat
=
[]
for
postinDoc
in
listOPosts:
trainMat.append(setOfWords2Vec(myVocabList,
postinDoc))
p0V,
p1V,
pAb
=
trainNB0(array(trainMat),
array(listClasses))
testEntry
=
['love',
'my',
'dalmation']
thisDoc
=
array(setOfWords2Vec(myVocabList,
testEntry))
testEntry,
'classified
as:
',
classifyNB(thisDoc,
p0V,
p1V,
pAb)
testEntry
=
['stupid',
'garbage']
thisDoc
=
array(setOfWords2Vec(myVocabList,
testEntry))
testEntry,
'classified
as:
',
classifyNB(thisDoc,
p0V,
p1V,
pAb)
运行成果:准备数据:文档词袋模型词集模型(set-of-words
model):每个词与否出现,每个词只能出现一次词袋模型(bag-of-words
model):一种词能够出现不止一次[python]
\o"viewplain"viewplain\o"copy"copy#
朴素贝叶斯词袋模型
def
bagOfWords2VecMN(vocabList,
inputSet):
returnVec
=
[0]
*
len(vocabList)
for
word
in
inputSet:
if
word
in
vocabList:
returnVec[vocabList.index(word)]
+=
1
return
returnVec
示例:使用朴素贝叶斯过滤垃圾邮件(1)收集数据:提供文本文献(2)准备数据:将文本文献解析成词条向量(3)分析数据:检查词条确保解析的对的性(4)训练算法:使用我们之前建立的trainNB0()函数(5)测试算法:使用classifyNB(),并且构建一种新的测试函数来计算文档集的错误率(6)使用算法:构建一种完整的程序对一组文档进行分类,将错分的文档输出到屏幕上准备数据:切分文本使用正则体现式切分句子测试算法:使用朴素贝叶斯进行交叉验证[python]
\o"viewplain"viewplain\o"copy"copy#
该函数接受一种大写字符的字串,将其解析为字符串列表
#
该函数去掉少于两个字符的字符串,并将全部字符串转换为小写
def
textParse(bigString):
import
re
listOfTokens
=
re.split(r'\W*',
bigString)
return
[tok.lower()
for
tok
in
listOfTokens
if
len(tok)
>
2]
#
完整的垃圾邮件测试函数
def
spamTest():
docList
=
[]
classList
=
[]
fullText
=
[]
#
导入并解析文本文献
for
i
in
range(1,
26):
wordList
=
textParse(open('email/spam/%d.txt'
%
i).read())
docList.append(wordList)
fullText.extend(wordList)
classList.append(1)
wordList
=
textParse(open('email/ham/%d.txt'
%
i).read())
docList.append(wordList)
fullText.extend(wordList)
classList.append(0)
vocabList
=
createVocabList(docList)
trainingSet
=
range(50)
testSet
=
[]
#
随机构建训练集
for
i
in
range(10):
randIndex
=
int(random.uniform(0,
len(trainingSet)))
testSet.append(trainingSet[randIndex])
del(trainingSet[randIndex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年辅警招聘考试试题库带答案(考试直接用)
- 2025年下半年遵义全国英语等级考试(PETS)三级仿真试题及答案解析
- 培养坚强意志品质磨练克服困难本领小学主题班会课件
- 餐饮店经理服务质量与经营成果绩效考核表
- 影视后期制作团队成员作品质量与制作周期绩效考评表
- 幼儿园伙食质量评估细则
- 企业人力资源管理绩效评估体系指南
- 高效数字化转型落地路径指引
- 2026年山东聊城第一中学高三调研测试数学试题(含答案详解)
- 人教版高一地理必修二第 3 章产业区位因素预习 新学期预科精讲课件
- 2026江苏连云港市金融控股集团有限公司招聘17人笔试备考题库及答案详解
- 2026四川雅安市雨城区考试招募医疗卫生辅助岗位人员13人笔试模拟试题及答案详解
- 2026年高考河南卷历史试题真题及答案详解(精校打印)
- 2026年联通人才遴选考试试题及答案
- 2026公司安全生产管理制度及文件汇编(2026版)
- GB/T 14977-2025热轧钢板表面质量的一般要求
- 10S505 柔性接口给水管道支墩
- GB/T 28369-2012铁合金评价品质波动和检查取样精度的试验方法
- GB/T 24962-2010冷冻烃类流体静态测量计算方法
- GB/T 23858-2009检查井盖
- 如家酒店员工手册
评论
0/150
提交评论