#-*- coding: utf-8 -*- #添加中文注释
from numpy import *
#过滤网站的恶意留言
#样本数据
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']]
#类别标签:1侮辱性文字,0正常言论
classVec = [0,1,0,1,0,1]
#返回文档向量,类别向量
return postingList,classVec
#创建词汇表
#输入:dataSet已经经过切分处理
#输出:包含所有文档中出现的不重复词的列表
def createVocabList(dataSet):
#构建set集合,会返回不重复词表
vocabSet = set([])
#遍历每篇文档向量,扫描所有文档的单词
for document in dataSet:
#通过set(document),获取document中不重复词列表
vocabSet = vocabSet | set(document) #求并集
return list(vocabSet)
#***词集模型:只考虑单词是否出现
#vocabList:词汇表
#inputSet :某个文档向量
def setOfWords2Vec(vocabList, inputSet):
#创建所含元素全为0的向量
returnVec = [0]*len(vocabList)
#依次取出文档中的单词与词汇表进行对照,若在词汇表中出现则为1
for word in inputSet:
if word in vocabList:
#单词在词汇表中出现,则记为1
returnVec[vocabList.index(word)] = 1 #词集模型
#若测试文档的单词,不在词汇表中,显示提示信息,该单词出现次数用0表示
else: print "the word: %s is not in my Vocabulary!" % word
return returnVec
#====训练分类器,原始的朴素贝叶斯,没有优化=====
#输入trainMatrix:词向量数据集
#输入trainCategory:数据集对应的类别标签
#输出p0Vect:词汇表中各个单词在正常言论中的类条件概率密度
#输出p1Vect:词汇表中各个单词在侮辱性言论中的类条件概率密度
#输出pAbusive:侮辱性言论在整个数据集中的比例
def trainNB00(trainMatrix,trainCategory):
#numTrainDocs训练集总条数
numTrainDocs = len(trainMatrix)
#训练集中所有不重复单词总数
numWords = len(trainMatrix[0])
#侮辱类的概率(侮辱类占总训练数据的比例)
pAbusive = sum(trainCategory)/float(numTrainDocs)
#*正常言论的类条件概率密度 p(某单词|正常言论)=p0Num/p0Denom
p0Num = zeros(numWords); #初始化分子为0
#*侮辱性言论的类条件概率密度 p(某单词|侮辱性言论)=p1Num/p1Denom
p1Num = zeros(numWords) #初始化分子为0
#初始化分母置为0
p0Denom = 0;
p1Denom = 0
#遍历训练集数据
for i in range(numTrainDocs):
#若为侮辱类
if trainCategory[i] == 1:
#统计侮辱类所有文档中的各个单词总数
p1Num += trainMatrix[i]
#p1Denom侮辱类总单词数
p1Denom += sum(trainMatrix[i])
#若为正常类
else:
#统计正常类所有文档中的各个单词总数
p0Num += trainMatrix[i]
#p0Denom正常类总单词数
p0Denom += sum(trainMatrix[i])
#词汇表中的单词在侮辱性言论文档中的类条件概率
p1Vect = p1Num/p1Denom
#词汇表中的单词在正常性言论文档中的类条件概率
p0Vect = p0Num/p0Denom
return p0Vect,p1Vect,pAbusive
#=====训练分类器,优化处理=====
#输入trainMatrix:词向量数据集
#输入trainCategory:数据集对应的类别标签
#输出p0Vect:词汇表中各个单词在正常言论中的类条件概率密度
#输出p1Vect:词汇表中各个单词在侮辱性言论中的类条件概率密度
#输出pAbusive:侮辱性言论在整个数据集中的比例
def trainNB0(trainMatrix,trainCategory):
#训练集总条数:行数
numTrainDocs = len(trainMatrix)
#训练集中所有单词总数:词向量维度
numWords = len(trainMatrix[0])
#侮辱类的概率(侮辱类占总训练数据的比例)
pAbusive = sum(trainCategory)/float(numTrainDocs)
#*拉普拉斯平滑防止类条件概率为0,初始化分子为1,分母为2
#正常类向量置为1
p0Num = ones(numWords); #初始化分子为1
#侮辱类向量置为1
p1Num = ones(numWords) #初始化分子为1
#初始化分母置为2
p0Denom = 2.0;
p1Denom = 2.0
#遍历训练集每个样本
for i in range(numTrainDocs):
#若为侮辱类
if trainCategory[i] == 1:
#统计侮辱类所有文档中的各个单词总数
p1Num += trainMatrix[i] #向量
#p1Denom侮辱类总单词数
p1Denom += sum(trainMatrix[i])
#若为正常类
else:
#统计正常类所有文档中的各个单词总数
p0Num += trainMatrix[i]
#p0Denom正常类总单词数
p0Denom += sum(trainMatrix[i])
#数据取log,即单个单词的p(x1|c1)取log,防止下溢出
p1Vect = log(p1Num/p1Denom)
p0Vect = log(p0Num/p0Denom)
return p0Vect,p1Vect,pAbusive
#vec2Classify:待分类文档
#p0Vect:词汇表中每个单词在训练样本的正常言论中的类条件概率密度
#p1Vect:词汇表中每个单词在训练样本的侮辱性言论中的类条件概率密度
#pClass1:侮辱性言论在训练集中所占的比例
def classifyNB(vec2Classify, p0Vect, p1Vect, pClass1):
#在对数空间中进行计算,属于哪一类的概率比较大就判为哪一类
#print'0p1=',sum(vec2Classify * p0Vect) #查看结果
#print'0p0=',sum(vec2Classify * p0Vect)
p1 = sum(vec2Classify * p1Vect) + log(pClass1)
p0 = sum(vec2Classify * p0Vect) + log(1.0 - pClass1)
#print'p1=',p1
#print'p0=',p0
if p1 > p0:
return 1
else:
return 0
def testingNB():
#获得训练数据,类别标签
listOPosts,listClasses = loadDataSet()
#创建词汇表
myVocabList = createVocabList(listOPosts)
#构建矩阵,存放训练数据
trainMat=[]
#遍历原始数据,转换为词向量,构成数据训练矩阵
for postinDoc in listOPosts:
#数据转换后存入数据训练矩阵trainMat中
trainMat.append(setOfWords2Vec(myVocabList, postinDoc))
#训练分类器
p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses))
#===测试数据(1)
testEntry = ['love', 'my', 'dalmation']
#测试数据转为词向量
thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
#输出分类结果
print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)
#===测试数据(2)
testEntry = ['stupid', 'garbage']
#测试数据转为词向量
thisDoc = array(setOfWords2Vec(myVocabList, testEntry))
#输出分类结果
print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)
#***词袋模型:考虑单词出现的次数
#vocabList:词汇表
#inputSet :某个文档向量
def bagOfWords2VecMN(vocabList, inputSet):
#创建所含元素全为0的向量
returnVec = [0]*len(vocabList)
#依次取出文档中的单词与词汇表进行对照,统计单词在文档中出现的次数
for word in inputSet:
if word in vocabList:
#单词在文档中出现的次数
returnVec[vocabList.index(word)] += 1
#若测试文档的单词,不在词汇表中,显示提示信息,该单词出现次数用0表示
else: print "the word: %s is not in my Vocabulary!" % word
return returnVec
#准备数据,按空格切分出词
#单词长度小于或等于2的全部丢弃
def textParse(bigString):
import re
listOfTokens = re.split(r'\W*', bigString)
#tok.lower() 将整个词转换为小写
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('D:/work/python/email/spam/%d.txt' % i).read())
wordList = textParse(open('D:/machine learning/python/bayes/email/spam/%d.txt' % i).read())
#docList按篇存放文章
docList.append(wordList)
#fullText邮件内容存放到一起
fullText.extend(wordList)
#垃圾邮件类别标记为1
classList.append(1)
#读取正常邮件
#wordList = textParse(open('D:/work/python/email/ham/%d.txt' % i).read())
wordList = textParse(open('D:/machine learning/python/bayes/email/ham/%d.txt' % i).read())
docList.append(wordList)
fullText.extend(wordList)
#正常邮件类别标记为0
classList.append(0)
#创建词典
vocabList = createVocabList(docList)
#训练集共50篇文章
trainingSet = range(50);
#创建测试集
testSet=[]
#随机选取10篇文章为测试集,测试集中文章从训练集中删除
for i in range(10):
#0-50间产生一个随机数
randIndex = int(random.uniform(0,len(trainingSet)))
#从训练集中找到对应文章,加入测试集中
testSet.append(trainingSet[randIndex])
#删除对应文章
del(trainingSet[randIndex])
#准备数据,用于训练分类器
trainMat=[]; #训练数据
trainClasses = [] #类别标签
#遍历训练集中文章数据
for docIndex in trainingSet:
#每篇文章转为词袋向量模型,存入trainMat数据矩阵中
trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex]))
#trainClasses存放每篇文章的类别
trainClasses.append(classList[docIndex])
#训练分类器
p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses))
#errorCount记录测试数据出错次数
errorCount = 0
#遍历测试数据集,每条数据相当于一条文本
for docIndex in testSet:
#文本转换为词向量模型
wordVector = bagOfWords2VecMN(vocabList, docList[docIndex])
#模型给出的分类结果与本身类别不一致时,说明模型出错,errorCount数加1
if classifyNB(array(wordVector),p0V,p1V,pSpam) != classList[docIndex]:
errorCount += 1
#输出出错的文章
print "classification error",docList[docIndex]
#输出错误率,即出错次数/总测试次数
print 'the error rate is: ',float(errorCount)/len(testSet)
#return vocabList,fullText
if __name__ == "__main__":
###**********************留言板数据:观察参数值start
### #获取数据
listOPosts,listClasses = loadDataSet()
# #构建词汇表
myVocabList = createVocabList(listOPosts)
print 'myVocabList=',myVocabList
print 'result=',setOfWords2Vec(myVocabList, listOPosts[0])
trainMat = []
for postinDoc in listOPosts:
#构建训练矩阵
trainMat.append(setOfWords2Vec(myVocabList, postinDoc))
p0Vect,p1Vect,pAbusive = trainNB0(trainMat, listClasses)
print 'p0Vect='
print p0Vect
print 'p1Vect='
print p1Vect
print 'pAbusive='
print pAbusive
print 'trainMatrix='
print trainMat
print 'listClasses=',listClasses
###**********************留言板数据:观察参数值end
## #测试留言板文档
print'==================================='
testingNB()
#***********************垃圾邮件
## #垃圾邮件分类
print'=======spam filtering============='
spamTest()
相关推荐
贝叶斯算法及实例python实现
目录 贝叶斯要解决的问题: 为什么要使用贝叶斯: 理解贝叶斯例子: 计算过程: 贝叶斯公式: 贝叶斯公式推导 python经典取球实例: python拼写纠正实例: 模型比较理论 求解:argmaxc P(c|w) -> argmaxc P(w|c) P(c) / P(w) 贝叶斯简介: 贝叶斯(约1701-1761) Thomas Bayes,英国数学家 贝叶...
dda算法画直线_大数据需要掌握的基本算法
大数据需要会的基本算法前言数学就像一条章鱼,它有触手可以触及到几乎每个学科上面。虽然大部分人在上学的时候有系统的学习,但都没有进行深入的研究和运用,只是拿来拓展自己的思维逻辑。但是如果你想从事数学相关的研究或者岗位,你将不得不努力学习数学。如果你已经完成了数学学位或一些技能学位,你可能会知道你所学的是否都是必要的。你可能想知道:做大数据需要掌握多少数学知识?在这篇文章中,我们将简单了解大数据需要掌...
【HDR】曝光融合(Exposure Fusion)
在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。
Python机器学习——朴素贝叶斯
(Naive Bayes)是一种简单经典的,它的经典应用案例为人所熟知:文本分类(如垃圾邮件过滤)。
ESP32对接百度智能云语音识别:从硬件配置到API调用的完整指南
本文详细介绍了ESP32对接百度智能云语音识别的完整流程,从硬件配置到API调用,涵盖麦克风选择、音频处理、错误处理及性能优化等关键环节。通过实战案例展示如何实现低成本、高效率的语音交互方案,特别适合智能硬件开发者参考。
昆仑通态,自由串口通讯
软件默认无该功能,需要问客服索要扩展包。
python实现朴素贝叶斯算法
本次实验的任务是文本分类,所用数据集为20news_bydate 实验流程主要如下: 一、算法介绍 · 朴素贝叶斯算法是应用最为广泛的分类算法之一。 · 给定训练数据集X,其类别为Y,则有: 其中,P(Y|X)为后验概率,即测试集文本X取类别Y的概率。对于文本Xi,对每个类别Yi计算概率,得到P(Y1|Xi)、P(Y2|Xi)、……、P(Yn|Xi),概率最大的类别则为预测类别。 上式中: · P(Y)为每个类别的先验概率,计算方式为: 每个类别单词总数 / 训练集所有单词总数。 · P(X | Y)=
【软考高项】五十一、常见必会的几种进度网络图(单代号、双代号、七格图、横道图)
软考高项计算题进度网络图画图介绍
朴素贝叶斯算法原理与Python实现
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法[1]。 最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并...
保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)
本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。
【脑肿瘤分类与迁移学习技术】Swin UNETR:当 Swin Transformer 遇见 3D 医学图像分割——从黑盒到白盒的逐层拆解
医学图像分割的终极目标是让算法成为医生的可靠副手,而非黑箱替代品。理解 Swin UNETR 的每一层如何流动、每一个窗口如何移位、每一次拼接如何融合,不仅是为了调参,更是为了在临床场景中。
朴素贝叶斯详解,并用python实现朴素贝叶斯
朴素贝叶斯(Naive Bayes,NB)是一种基于贝叶斯定理的分类算法,它是一种简单快速的算法,常用于文本分类、垃圾邮件过滤等任务。1. 基本原理朴素贝叶斯的基本原理是基于贝叶斯定理,其定理公式如下:其中,$P(y|x)$ 表示在给定样本 $x$ 的条件下,样本属于类别 $y$ 的概率;$P(x|y)$ 表示在类别 $y$ 的条件下,样本 $x$ 的概率;$P(y)$ 表示类别 $y$ 出现的概率;$P(x)$ 表示样本 $x$ 出现的概率。
自动驾驶感知新方案:YOLOv13多模态(RGB+LiDAR+热成像)融合实战
YOLOv13的RGB+LiDAR+热成像多模态融合方案,解决了自动驾驶感知的鲁棒性问题,通过跨模态特征互补和注意力融合,实现了复杂场景下的高精度检测。本文从架构设计、数据预处理、核心模块实现到车载部署,完成了全流程实战。动态模态权重:根据场景自动调整各模态的权重(如黑夜场景提升热成像权重);端到端3D检测:直接从原始点云与图像进行3D检测,减少预处理步骤;轻量化优化:针对车载设备进一步剪枝量化,提升推理速度。
朴素贝叶斯分类算法简单实例
贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。这篇文章我尽可能用直白的话语总结一下我们学习会上讲到的朴素贝叶斯分类算法,希望有利于他人理解。 1 分类问题综述 对于分类问题,其实谁都不会陌生,日常生活中我们每天都进行着分类过程。例如,当你看到一个人,你的脑子下意识判断他是学生还是社会上的人;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱”之类的话,其实这就是一种分类操作。 ..
C#上位机实战:Modbus RTU串口通信(CRC校验+超时重发完整实现)
在工业自动化上位机开发中,Modbus RTU是串口通信的事实标准协议,SerialPort是 .NET 平台操作串口的原生类,无需依赖第三方库即可实现基础通信。实际项目中,工控现场存在电磁干扰、串口丢包、设备响应延迟等问题,CRC 数据校验用于保证报文完整性,超时重发机制用于提升通信稳定性。本文从零封装一套可直接落地的 Modbus RTU 通信组件,包含完整的校验算法、超时控制、重发逻辑,并配套 WinForm 演示界面。本文基于 C# 原生SerialPort类,实现了一套生产可用。
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
朴素贝叶斯算法实例
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Tue Oct 28 14:40:38 2018 4 5 @author: zhen 6 """ 7 from sklearn.datasets import fetch_20newsgroups 8 from sklearn.model_selection import ...
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
朴素贝叶斯算法&应用实例
https://www.toutiao.com/a6650068891382841859/ 2019-01-24 22:23:40 朴素贝叶斯 朴素贝叶斯中的朴素是指假设各个特征之间相互独立,不会互相影响,所以称为朴素贝叶斯。正是因为这个假设,使得算法的模型简单且容易理解,虽然牺牲了一点准确性,但是如果模型训练的好,也能得到不错的分类效果。 公式简单推导 下面我们简单看一...
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
通过实例理解朴素贝叶斯算法
(一)贝叶斯原理中的几个概念 先验概率 通过经验来判断事情发生的概率,比如说某一种疾病的发病率是万分之一,就是先验概率。再比如南方的梅雨季是 6-7 月,就是通过往年的气候总结出来的经验,这个时候下雨的概率就比其他时间高出很多。 后验概率 后验概率就是发生结果之后,推测原因的概率。比如说某人查出来了患有“某种病”,那么患病的原因可能是 A、B 或 C。患有“某种病”是因为原因 A 的概率就是后验概率。它是属于条件概率的一种。 条件概率 事件 A 在另外一个事件 B 已经发生条件下的发生概率,表示
朴素贝叶斯算法-公式加实例
朴素贝叶斯法概述、联合概率分布、条件概率 conditional probability、 贝叶斯定理、朴素贝叶斯分类器、 极大似然估计、贝叶斯估计
朴素贝叶斯分类算法和实例演示
朴素贝叶斯分类算法和实例演示
朴素贝叶斯算法 & 应用实例
朴素贝叶斯算法 & 应用实例 转载请注明出处:http://www.cnblogs.com/marc01in/p/4775440.html 引 和师弟师妹聊天时经常提及,若有志于从事数据挖掘、机器学习方面的工作,在大学阶段就要把基础知识都带上。 机器学习在大数据浪潮中逐渐展示她的魅力,其实《概率论》、《微积分》、《线性代数》、《运筹学》、《信息论》等几门课程算是前置课程,当然要...
贝叶斯滤波算法(实例)
基本的贝叶斯滤波算法 Algorithm Bayes_filter(bel(x[t-1], u[t], z[t])): for all x[t] do: bel_transition(x[t]) = ∫p(x[t] | u[t], x[t-1]) * bel(x[t-1]) * dx[t-1] # 控制更新 bel(x[t]) = η * p(z[t] | x[t]) * bel_transition(x[t]) # 测量更新,η为归一化常数 return b
朴素贝叶斯算法_朴素贝叶斯算法&应用实例
朴素贝叶斯朴素贝叶斯中的朴素是指假设各个特征之间相互独立,不会互相影响,所以称为朴素贝叶斯。正是因为这个假设,使得算法的模型简单且容易理解,虽然牺牲了一点准确性,但是如果模型训练的好,也能得到不错的分类效果。公式简单推导下面我们简单看一下公式的推导过程评测指标我们得出分类的结果后,怎么来评测我们训练的模型的好与不好呢?我们通常「准确度」「精确率」「召回率」这几个指标来进行判断模型的好坏。...
朴素贝叶斯算法--实例
实例 举一个例子。为了不影响社区的发展,我们要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标志为内容不当。过滤这类内容是一个很常见的需求。对此问题建立两个类型:侮辱类和非侮辱类,使用1和0分别表示。 我们把文本看成单词向量或者词条向量,也就是说将句子转换为向量。考虑出现所有文档中的单词,再决定将哪些单词纳入词汇表或者说所要的词汇集合,然后必须要...
贝叶斯算法实例
这一节我们将通过一个例子来观察贝叶斯的运行情况:email文件下载 (提取码:0610) def textParse(bigString): import re listOfTokens = re.split(r'\W*', bigString) return [tok.lower() for tok in listOfTokens if len(tok) > 2
1万+



被折叠的 条评论
为什么被折叠?



