机器学习---朴素贝叶斯分类器的实现(对文本进行侮辱性言论和非侮辱性言论的分类)

1. loadDataSet函数

import numpy as np# 构造loadDataSet函数用于生成实验样本
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

简单的数据加载函数,用于生成一个实验样本。函数 loadDataSet 返回两个列表,postingList 包含

了一些文本数据,classVec 包含了这些文本数据对应的类别标签。postingList 包含了6个子列表,

每个子列表代表一条文本数据,而 classVec 包含了这些文本数据对应的类别标签,其中1表示侮辱

性言论,0表示正常言论。

2. 词汇表生成函数creatVocabList

#构建词汇表生成函数creatVocabList
def createVocabList(dataSet):vocabSet=set([]) # 1 1 1 1 和1 1for document in dataSet:vocabSet=vocabSet|set(document) #取两个集合的并集return list(vocabSet)

函数首先创建了一个空集合 vocabSet,然后遍历输入的文本数据集 dataSet 中的每个文档

document。对于每个文档,它将文档中的单词转换为集合,并将这个集合与 vocabSet 取并集,这

样就能逐步地将所有文档中出现的单词整合到 vocabSet 中。最后,函数将 vocabSet 转换为列表

并返回,这样就得到了整个文本数据集中出现的所有单词构成的词汇表。

3. 词集模型setOfWords2Vec

#词集模型
def setOfWords2Vec(vocabList,inputSet):returnVec=np.zeros(len(vocabList)) #生成零向量的arrayfor word in inputSet:if word in vocabList:returnVec[vocabList.index(word)]=1 #有单词,则该位置填充0else: print('the word:%s is not in my Vocabulary!'% word)return returnVec #返回全为0和1的向量

函数接受两个参数,vocabList 是词汇表,inputSet 是待转换的文本数据。首先,函数创建了一个

长度为词汇表长度的全零数组 returnVec,用于存储文本数据的词向量。然后,函数遍历输入的文

本数据 inputSet 中的每个单词 word,如果这个单词在词汇表 vocabList 中,就将 returnVec 中对

应位置的值设为1,表示该单词在文本数据中出现了。如果单词不在词汇表中,就打印一条警告信

息。最后,函数返回生成的词向量 returnVec,它是一个由0和1组成的向量,表示了文本数据中每

个单词在词汇表中的出现情况。这种词集模型的词向量表示方法只记录了每个词是否出现,不考虑

词出现的次数。

4. 词袋模型

#词袋模型
def bagOfWords2VecMN(vocabList,inputSet):returnVec=[0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)]+=1return returnVec #返回非负整数的词向量

函数接受两个参数,vocabList 是词汇表,inputSet 是待转换的文本数据。首先,函数创建了一个

长度为词汇表长度的全零列表 returnVec,用于存储文本数据的词向量。然后,函数遍历输入的文

本数据 inputSet 中的每个单词 word,如果这个单词在词汇表 vocabList 中,就将 returnVec 中对

应位置的值加1,表示该单词在文本数据中出现了一次。如果单词不在词汇表中,则忽略。最后,

函数返回生成的词袋模型的词向量 returnVec,它是一个由非负整数组成的向量,表示了文本数据

中每个单词在词汇表中的出现次数。

listPosts,listClasses=loadDataSet()
myVocabList=createVocabList(listPosts)
print(myVocabList) # 输出词表
returnVec = setOfWords2Vec(myVocabList, listPosts[0])
print(returnVec) # 对输入的词汇表构建词向量,使用词集模型
returnVec = bagOfWords2VecMN(myVocabList, listPosts[0])
print(returnVec) # 对输入的词汇表构建词向量,使用词袋模型

5. 运用词向量计算概率trainNB1

# 运用词向量计算概率
def trainNB1(trainMatrix,trainCategory):numTrainDocs=len(trainMatrix)numWord=len(trainMatrix[0])pAbusive=sum(trainCategory)/len(trainCategory) # 3/6p0Num=np.ones(numWord);p1Num=np.ones(numWord)# 初始化为1p0Demon=2;p1Demon=2 #初始化为2for i in range(numTrainDocs):if trainCategory[i]==0:p0Num+=trainMatrix[i]p0Demon+=sum(trainMatrix[i])else:p1Num+=trainMatrix[i]p1Demon+=sum(trainMatrix[i])p0Vec=np.log(p0Num/p0Demon) #对结果求自然对数p1Vec=np.log(p1Num/p1Demon) #对结果求自然对数return p0Vec,p1Vec,pAbusive

首先,我们统计了训练集中的文档数目 numTrainDocs 和词汇表的长度 numWord。然后,我们计

算了侮辱性言论的概率 pAbusive,即侮辱性言论所占的比例。接下来,我们初始化了两个向量

p0Num 和 p1Num,它们的长度都是词汇表的长度,并且将所有元素初始化为1。同时,我们初始

化了两个变量 p0Demon 和 p1Demon,它们的初始值都是2。然后,我们遍历训练集中的每个文

档,统计了属于侮辱性言论和非侮辱性言论的词向量分别出现的次数,并分别累加到 p0Num 和

p1Num 中,同时也统计了属于侮辱性言论和非侮辱性言论的词向量总数,并分别累加到 p0Demon

和 p1Demon 中。最后,我们计算了属于非侮辱性言论和侮辱性言论的条件概率向量 p0Vec 和

p1Vec,并对结果取了自然对数。最终,函数返回了 p0Vec、p1Vec 和 pAbusive,它们分别表示

了属于非侮辱性言论的条件概率向量、属于侮辱性言论的条件概率向量和侮辱性言论的先验概率。

6. 构建分类函数classifyNB 

# 计算文档在各类中的概率,取较大者作为该文档的分类,所以构建分类函数classifyNB
def classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):# 说明: p1=sum(vec2Classify*p1Vec)+log(pClass1) 的数学原理是ln(a*b)=ln(a) +ln(b)p1=sum(vec2Classify*p1Vec)+np.log(pClass1) p0=sum(vec2Classify*p0Vec)+np.log(1-pClass1)if p1>p0:return 1else:return 0

首先,代码计算了给定文档向量属于侮辱性言论的概率 p1,这里使用了朴素贝叶斯分类器的数学

原理,通过求取对数的方式将连乘转换为累加,避免了浮点数下溢问题。接着,代码计算了给定文

档向量属于非侮辱性言论的概率 p0,同样使用了对数的方式进行计算。最后,代码比较了 p1 和

p0 的大小,如果 p1 大于 p0,则返回1,表示文档属于侮辱性言论;否则返回0,表示文档属于非

侮辱性言论。

贝叶斯定理:

7. 测试分类函数testingNB 

# 构造几个样本,来测试分类函数
def testingNB():listPosts,listClasses=loadDataSet() # listPosts:feature, listClasses:labelmyVocabList=createVocabList(listPosts) # 转换 I am a Chinese  构造词典trainMat=[]for postinDoc in listPosts:trainMat.append(setOfWords2Vec(myVocabList,postinDoc)) # 转换后的词表p0V,p1V,pAb=trainNB1(trainMat,listClasses) # 训练testEntry=['love','my','dalmation']thisDoc=setOfWords2Vec(myVocabList,testEntry)# 转换测试语句词表print(testEntry,'classified as:',classifyNB(thisDoc,p0V,p1V,pAb)) # 预测testEntry=['stupid','garbage']thisDoc=np.array(setOfWords2Vec(myVocabList,testEntry))print(testEntry,'classified as:',classifyNB(thisDoc,p0V,p1V,pAb))testingNB()

首先,代码调用了 loadDataSet 函数加载数据集,得到了文本数据列表 listPosts 和类别标签列表

listClasses。接着,代码调用了 createVocabList 函数,将文本数据列表转换为词汇表

myVocabList。然后,代码初始化了一个空列表 trainMat,用于存储训练集的词向量表示。接着,

代码遍历文本数据列表 listPosts,将每条文本数据转换为词向量,并添加到 trainMat 中。接下

来,代码调用了 trainNB1 函数,对训练集进行训练,得到了分类器的参数 p0V、p1V 和 pAb。然

后,代码构造了两个测试样本 testEntry,分别是 ['love','my','dalmation'] 和 ['stupid','garbage'],并

将它们转换为词向量表示 thisDoc。最后,代码调用了 classifyNB 函数,对测试样本进行分类,并

打印出分类结果。

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

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

相关文章

从零开始学习 JS APL(一):完整指南和实例解析

本章内容主要是按一下来: 操作DOM BOM 比如 控制网页元 素交互等各种网页 交互效果 以下是我总结笔记(仅供参考) webAPL 获取DOM对象 变量声明有三个 var let 和 const 我们应该用那个呢? 首先var 先排除,老派写法…

JOSEF约瑟 同步检查继电器DT-13/200 100V柜内安装,板前接线

系列型号 DT-13/200同步检查继电器; DT-13/160同步检查继电器; DT-13/130同步检查继电器; DT-13/120同步检查继电器; DT-13/90同步检查继电器; DT-13/254同步检查继电器; 同步检查继电器DT-13/200 100V柜内板前接线 一、用途 DT-13型同步检查继电器用于两端供电线路的…

linux系统下农场种菜小游戏!

linux系统下农场种菜小游戏! 今天给大家分享一个linux系统下一个简单的小游戏 源码如下,在linux系统下创建一个.sh的脚本文件,复制粘贴进去即可! #!/bin/bash# 初始化变量 vegetables("生菜" "西兰花" &qu…

SpringBoot启动流程

SpringBoot启动流程 文章目录 SpringBoot启动流程SpringBoot启动流程 SpringBoot启动流程 视频链接: https://www.bilibili.com/video/BV15b4y1a7yG/?p174&spm_id_frompageDriver&vd_sourcef6debc5a79e3f424f9dde2f13891b158 看李老师讲的吧,特…

服务器数据恢复—服务器断电导致XenServer数据文件丢失的数据恢复案例

服务器数据恢复环境: 某品牌720服务器搭配该品牌某型号RAID卡,使用4块STAT硬盘组建了一组RAID10阵列。服务器上部署XenServer虚拟化平台,系统盘 数据盘两个虚拟机磁盘。虚拟机上安装的是Windows Server操作系统,作为Web服务器使用…

虾皮助手:提升Shopee卖家运营效率的必备辅助工具

随着电商市场的快速发展,越来越多的卖家选择在Shopee平台上开设在线商店。然而,随之而来的是更多的竞争和挑战。为了在这个竞争激烈的市场中脱颖而出,卖家们需要寻找一种工具来帮助他们更高效地管理和运营他们的店铺。虾皮助手(Sh…

CSS特效026:扇骨打开关闭的动画

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

vue创建项目,使用可视化界面安装插件

安装项目: vue create vue-app 选择默认配置就行,也可以按需选择自定义配置 vue ui通过可视化管理项目 通过可视化安装全家桶插件

连接池打满,导致页面夯住

连接池打满,导致页面夯住 1、背景生产环境中访问系统,页面延迟卡顿 2、排产思路 1)、查看日志是排查问题的第一要素(个人认为);查看日志发现使用com.alibaba.druid.pool设置最大连接数为100,已…

【android开发-15】android中广播broadcast用法详解

1,broadcast类型 在Android中,Broadcast是一种用于在应用程序组件之间传递消息的机制。它允许一个组件(发送者)将消息发送给其他组件(接收者),即使它们之间不存在直接的联系。 Android中的Bro…

挑战音频爬虫的技术迷宫:Watir和Ruby的奇妙合作

概述 音频爬虫是一种可以从网站上抓取音频文件的程序。音频爬虫的应用场景很多,比如语音识别、音乐推荐、声纹分析等。然而,音频爬虫也面临着很多技术挑战,比如音频文件的格式、编码、加密、隐藏、动态加载等。如何突破这些技术障碍&#xf…

整数和浮点数在内存中的存储​(大小端详解)

目录 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1为什么有大小端?​ 2.2请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分)-百度笔试题 方法一(char*强制类型转换&#xff09…

迅为RK3588开发板定制Ubuntu和Debian系统-系统定制(无法联网)

在上一个小节中讲解了 ubuntu 和 debian 文件系统的定制,但那是在可以运行脚本正常构 建系统的前提下,而本小节则是针对部分特殊用户无法联网的情况。 在 source 目录下存放了已经构建完成的压缩包,如下图所示 然后使用以下命令将该压缩包解…

Hive SQL的各种join总结

说明 Hive join语法有6中连接 inner join(内连接)、left join(左连接)、right join(右连接)、full outer join(全外连接)、left semi join(左半开连接)、cr…

prime靶机打靶记录

靶机下载地址 https://download.vulnhub.com/prime/Prime_Series_Level-1.rar nmap搜索目标 使用nmap -sn 192.168.41.0/24找到目标靶机192.168.41.136 扫描端口,因为是靶机,所以速率直接调了10000 扫出来两个端口22和80,进行详细的扫描 没…

matlab cell转三维矩阵

问题描述 我有一个cell类型的wlf变量,16行4列,每个单元格都是[1000,1]的矩阵,如下图所示 业务含义:代表16个医院的4个业务指标的1000次模拟值(蒙特卡洛模拟) 我想要处理成[16,4,1000]的三维矩阵&#xff0…

分享116个图片JS特效,总有一款适合您

分享116个图片JS特效,总有一款适合您 116个图片JS特效下载链接:https://pan.baidu.com/s/1WvUvmG1adR2EJG97MiGj3A?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整…

基于vue+node.js智慧校园学生办证系统

基于vuenode.js智慧校园学生办证系统 摘要:随着计算机技术和网络技术的飞快发展,它加速了国内信息化建设的进程,信息技术对管理改革产生了深远的影响。为了适应新时代的发展趋势,各行各业都高度重视信息化建设。在教育领域&#…

header二

第二题就是在referer添加SQL语句进行注入和上一题步骤一样 第三题 再用上面那个方法就行不通了,多加了一层过滤 1and updatexml(1,"1",1),1) -- 1 1and updatexml(1,concat("1",(select database())),1),1) -- 1 1and updatexml(1,concat("…

律所信息化建设成为趋势,Alpha系统助力律所数字化升级

近些年来,越来越多的律所借助数字化技术进行信息化建设,围绕“智慧律所”建设做了大量的努力。为尽快完成这一目标,经过深入研判,多数律所决定引进“Alpha法律智能操作系统”。该系统以其强大功能为律所智慧化建设注入催化剂。 据…