版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
朴素贝叶斯优点:在数据较少的状况下仍然有效,能够解决多类别问题缺点:对于输入数据的准备方式较为敏感合用数据类型:标称型数据贝叶斯准则:使用朴素贝叶斯进行文档分类朴素贝叶斯的普通过程(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- IC模拟设计就业方向
- 麒麟操作系统教程(微课版) 课件 第10章 麒麟服务器操作系统
- 个人职业规划搜索指南
- (正式版)T∕CHNFS 002-2026 花样滑冰赛事活动办赛指南
- 四川省蜂业技术开发研究所有限公司2026年第一批社会化公开招聘笔试备考题库及答案解析
- 2026年金华兰溪市市属国企春季公开招聘工作人员56人笔试参考题库及答案解析
- 2026中国民生银行西安分行校园招聘考试备考试题及答案解析
- 赣州市国投集团2026年新能源人才专场招聘笔试参考题库及答案解析
- 2026陕西建工基础建设集团有限公司招聘15人笔试备考题库及答案解析
- 2026年宁德市霞浦县卫生健康局招聘定向培养医学毕业生28人笔试备考试题及答案解析
- 2025年江苏职教高考《职业适应性测试》考前冲刺模拟试题(附答案)
- 塑料包装QS质量手册
- 《华为OLT产品介绍》课件
- DB52T 835-2015 地理标志产品 正安白茶
- GB/T 44217.11-2024语言资源管理语义标注框架第11部分:可度量数量信息(MQI)
- 10S505 柔性接口给水管道支墩
- DL∕T 1879-2018 智能变电站监控系统验收规范
- 生活垃圾清运服务 投标方案(技术方案)
- 共青团的规章制度
- DZ∕T 0227-2010 地质岩心钻探规程(正式版)
- 靖远县刘川乡大硐沟水泥用大理岩矿“三合一方案”
评论
0/150
提交评论