朴素贝叶斯算法分类

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)if __name__ == '__main__':postingList, classVec = loadDataSet()myVocabList = createVocabList(postingList)
print('myVocabList:\n', myVocabList)
myVocabList:['is', 'problems', 'has', 'so', 'ate', 'licks', 'him', 'help', 'steak', 'cute', 'worthless', 'food', 'flea', 'stop', 'how', 'park', 'quit', 'buying', 'garbage', 'mr', 'to', 'I', 'please', 'not', 'take', 'stupid', 'posting', 'maybe', 'dalmation', 'love', 'my', 'dog']
	# 函数说明:根据vocabList词汇表,将inputSet向量化,向量的每个元素为1或0
def setOfWords2Vec(vocabList, inputSet):returnVec = [0] * len(vocabList)    #创建一个其中所含元素都为0的向量for word in inputSet:              #遍历每个词条if word in vocabList:         #如果词条存在于词汇表中,则置1returnVec[vocabList.index(word)] = 1else: print("the word: %s is not in my Vocabulary!" % word)return returnVec                 #返回文档向量trainMat = []#遍历每一个词向量来填充trainMat列表for postinDoc in postingList:trainMat.append(setOfWords2Vec(myVocabList, postinDoc))# print(trainMat)

在这里插入图片描述

我们先使用极大似然估计计算条件概率和先验概率

import numpy as npp0V, p1V, pAb = trainNB0(trainMat, classVec)# 先验概率
def trainNB0(trainMatrix, trainCategory):numTrainDocs = len(trainMatrix) # 文件数,也就是行向量的个数numWords = len(trainMatrix[0]) # 单词数,也就是词汇表中单词的个数# 先验概率 👇pAbusive = sum(trainCategory) / float(numTrainDocs) # 侮辱性文件的出现概率,即 trainCategory 中所有 1 的个数(0 1 相加即得 1 的个数)# 条件概率 👇# (非)侮辱性单词在每个文件中出现的次数列表# 比如说 p0Num = [1,3,12,....] 表示第 2 个文档中出现了 3 次非侮辱词汇p0Num = np.zeros(numWords) # [0,0,0,.....] 非侮辱性单词在每个文件中出现的次数列表p1Num = np.zeros(numWords) # [0,0,0,.....] 侮辱性单词出在每个文件中出现的次数列表# (非)侮辱性单词在(非)侮辱性文档出现的总数p0Denom = 0.0 # 0 非侮辱性词汇在所有非侮辱的文档的出现总数p1Denom = 0.0 # 1 侮辱性词汇在所有侮辱性的文档的出现总数#遍历每个文件for i in range(numTrainDocs):# 是否是侮辱性文件if trainCategory[i] == 1:# 如果是侮辱性文件,对侮辱性文件的向量进行相加#表示在所有侮辱性文件中,去重词汇表中各个词汇出现的次数p1Num +=  trainMatrix[i]# 对向量中的所有元素进行求和#表示在所有侮辱性文件中,去重词汇表中所有词汇出现的次数之和p1Denom += sum(trainMatrix[i])else:# 如果是非侮辱性文件,对非侮辱性文件的向量进行相加,表示在所有非侮辱性文件中,去重词汇表中各个词汇出现的次数p0Num += trainMatrix[i]# 对向量中的所有元素进行求和,表示在所有非侮辱性文件中去重词汇表中所有词汇出现的次数之和p0Denom += sum(trainMatrix[i])# 在类别 1 即侮辱性文档的条件下,去重词汇表中每个单词出现的概率p1Vect = p1Num / p1Denom# 在类别 0 即非侮辱性文档的条件下,去重词汇表中每个单词出现的概率p0Vect = p0Num / p0Denomreturn pAbusive, p0Vect, p1Vect

但是我们输出结果后会发现基于极大似然估计得朴素贝叶斯算法的结果差强人意,如果其中一个类别的概率值为0,那么最后的乘积也为0,我们可以贝叶斯估计优化算法,在条件概率计算的公式的分子分母上分别加上 λ 和 S j λ \lambda和S_j\lambda λSjλ S j S_j Sj代表分类的个数,此样例中为2,即侮辱与非侮辱类。
也就是将条件概率和先验概率的分子初始化为1,分母初始化为2.

# (非)侮辱性单词在每个文件中出现的次数列表
# 比如说 p0Num = [1,3,12,....] 表示第 2 个文档中出现了 3 次非侮辱词汇
p0Num = np.ones(numWords) # [1,1,1,.....] 非侮辱性单词在每个文件中出现的次数列表
p1Num = np.ones(numWords) # [1,1,1,.....] 侮辱性单词出在每个文件中出现的次数列表# (非)侮辱性单词在(非)侮辱性文档出现的总数
p0Denom = 2.0 # 0 非侮辱性词汇在所有非侮辱的文档的出现总数
p1Denom = 2.0 # 1 侮辱性词汇在所有侮辱性的文档的出现总数

但是此时如果我们直接输出的话会出现下溢出问题,是由于太多个小数相乘造成的,在python的精度下,太多小数相乘会四舍五入为0,会影响得到正确的答案。一种解决方法是对乘积取自然对数,所以我们可以修改以下代码

	p1Vect = np.log(p1Num / p1Denom)p0Vect = np.log(p0Num / p0Denom)p0V, p1V, pAb = trainNB0(trainMat, classVec)print('p0V:\n', p0V)print('p1V:\n', p1V)print('classVec:\n', classVec)print('pAb:\n', pAb)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS开发案例:【相机开发】

基本概念 相机是OpenHarmony多媒体进程提供的服务之一,提供了相机的录像、预览、拍照功能,支持多用户并发取流。 在进行应用的开发前,开发者应了解以下基本概念: 视频帧 视频流指的是将一系列图片数据按照固定时间间隔排列形成的…

2024新算法爱情进化算法(LEA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介: 2024新算法爱情进化算法(LEA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗,并使无人机能够适应复杂环…

Leetcode 第 393 场周赛题解

Leetcode 第 393 场周赛题解 Leetcode 第 393 场周赛题解题目1:3114. 替换字符可以得到的最晚时间思路代码复杂度分析 题目2:3115. 质数的最大距离思路代码复杂度分析 题目3:3116. 单面值组合的第 K 小金额思路代码复杂度分析 题目4&#xff…

使用BibTeX导入参考文献到Overleaf项目(常用方法)

使用bib为overleaf导入参考文献的好处 整洁的管理: 使用 .bib 文件可以使你的参考文献管理更加整洁和有条理。你可以将所有的参考文献集中存储在一个文件中,而不是在文档中直接引用或复制粘贴。 易于维护和更新: 当你需要添加、删除或修改参考…

申请泛域名证书步骤

泛域名证书的广泛应用范围: 泛域名证书不同于普通的单域名数字证书和多域名数字证书,可以一次以一张证书对应无限多的域名,在功能性和方便性上远优于一般证书。 单域名证书顾名思义,一张证书只对应一个独立域名,多域…

迅睿CMS内容删除后ID重置与指定起始值操作指南

在使用迅睿CMS进行内容管理时,经常会涉及到内容的增删改查。本文将介绍如何在删除内容后重置ID值,或指定ID值从某一特定数开始自增,以便于更好的管理数据。 ID重置操作 共享模块ID重置 在执行删除操作时,若需要对共享模块的内容…

Unity类银河恶魔城学习记录13-4 p145 Save Skill Tree源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili GameData.cs using System.Collections; using System.Collections.Generic…

投票刷礼物链接怎么弄?最新投票活动创建系统源码 轻松创建活动

投票刷礼物链接怎么弄?投票活动创建系统的作用和功能多种多样,为用户提供一个便捷、高效且功能强大的平台,用于创建、管理和执行各种投票活动。分享一个最新投票活动创建系统源码,源码开源可二开,含完整代码包和详细搭…

【机器学习书籍推荐】机器学习算法原理与编程实践(附PDF)

哈喽啊大家&#xff0c;今天又来给大家推荐一本机器学习方面的书籍<机器学习算法原理与编程实践>。本书适用于中高水平的程序设计人员、大学理科生、以及对机器学习感兴趣的各类爱好者。 《机器学习算法原理与编程实践》围绕神经网络、智能推理、矩阵计算三大主线&#…

BM25检索算法 python

1.简介 BM25&#xff08;Best Matching 25&#xff09;是一种经典的信息检索算法&#xff0c;是基于 TF-IDF算法的改进版本&#xff0c;旨在解决、TF-IDF算法的一些不足之处。其被广泛应用于信息检索领域的排名函数&#xff0c;用于估计文档D与用户查询Q之间的相关性。它是一种…

【树莓派学习】开发环境配置

【树莓派学习】开发环境配置 ​ Raspberry Pi OS作为基于Linux的系统&#xff0c;其默认网络配置在国内的网络环境下容易出现访问慢甚至无法连接等问题&#xff0c;不便于我们的学习&#xff0c;同时&#xff0c;树莓派上C/C的使用需要单独安装WiringPi。本文主要介绍如何更改…

JavaScript系列------1

1. JavaScript组成 ECMAScript JS 语言基础。比如&#xff1a;变量、分支语句、循环语句、对象等等。 Web APIs DOM(页面文档对象模型): 操作文档&#xff0c;比如对页面元素进行移动、大小、添加删除等操作 BOM(浏览器对象模型): 操作浏览器&#xff0c;比如页面弹窗&#x…

javaScript中的闭包

什么是闭包 在理解 JavaScript 中的闭包前先了解以下两个知识点&#xff1a; JavaScript 中的作用域和作用域链JavaScript 中的垃圾回收 简单回顾一下这两个知识点&#xff1a; 1. JavaScript 中的作用域和作用域链 作用域就是一个独立的地盘&#xff0c;让变量不会外泄、…

开发简易复用 SDK(项目加分项)

文章目录 开发 SDK新建项目修改pom文件删除启动类创建配置类复制之前的客户端新建spring.factories打包 开发 SDK 为什么要开发SDK。 减少代码的冗余提高代码的复用 如果实际项目中需要使用到该SDK&#xff0c;在pom.xml中注入就可以了。 类似于maven一样&#xff0c;把需要…

女生学习PLC专业,好就业吗?

好就业&#xff0c;plc找工作容易 但不建议女生做PLC相关工作&#xff0c; plc的工作会涉及现场安装调试&#xff0c;难免体力或者登高爬梯&#xff0c;对女生来说有点辛苦。还都会长期出差&#xff0c;身体辛苦之外&#xff0c;心理是煎熬&#xff0c;初入行时出差或许是乐事…

【FX110网】股市、汇市一年有多少个交易日?

事实上&#xff0c;作为交易者&#xff0c;重要的是要了解并非每天都是交易日。虽然金融市场在大多数工作日开放交易&#xff0c;但在某些特定情况下无法进行交易。这些非交易日可能因各种原因而发生&#xff0c;包括节假日、周末和市场休市。 通过随时了解假期、交易时间表和市…

实施阶段(2024年4月)

【活动二】编程解决问题&#xff0c;二分查找法统计查字典次数。 任务要求&#xff1a;假设字典为1000页&#xff0c;若用二分法来翻到用户输入的具体指定的页数&#xff0c;则需要的最大查找次数为&#xff1f; 设计算法&#xff1a; 取总页码数据中间值&#xff0c;将待查数…

恶意软件狩猎新途径:使用.NET元数据分析跟踪恶意软件

本文由Blaze于2024年3月25日发表于其个人博客网站上。 就在不久前&#xff0c;我们意外发现了一个PureCrypter样本&#xff0c;而PureCrypter则是一款适用于各种类型恶意软件&#xff08;例如Agent Tesla和RedLine&#xff09;的加载器和混淆处理工具。深入分析之后&#xff0c…

简单谈谈URL过滤在网络安全中的作用

用户花在网络上的时间越来越多&#xff0c;浏览他们最喜欢的网站&#xff0c;点击电子邮件链接&#xff0c;或利用各种基于网络的 SaaS 应用程序供个人和企业使用。虽然这种不受约束的网络活动对提高企业生产力非常有用&#xff0c;但也会使组织面临一系列安全和业务风险&#…

网络连接与访问傻傻分不清?一文为你理清二者区别

网络连接指的是建立两个或多个计算机、设备或系统之间的物理或逻辑链接&#xff0c;使它们可以进行数据交换、通信和资源共享。连接可以是有线的或无线的&#xff0c;可以是临时的或长期的。 网络访问指的是在连接的基础上&#xff0c;通过合适的方式和权限进入特定资源、服务或…