机器学习(五) -- 监督学习(3) -- 朴素贝叶斯

系列文章目录及链接

目录

前言

一、朴素贝叶斯通俗理解及定义

二、原理理解及公式

1、概率基础

2、贝叶斯公式

3、拉普拉斯平滑系数

三、**算法实现

四、接口实现

1、新闻数据集介绍

2、API

3、流程

3.1、获取数据

3.2、数据预处理

3.3、特征工程

3.4、朴素贝叶斯模型训练

3.5、模型评估

3.6、结果预测

4、优缺点


前言

tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被“文章内容”删除线标记的,也可以自行跳过。“!!!”一般需要特别注意或者容易出错的地方。

本系列文章是作者边学习边总结的,内容有不对的地方还请多多指正,同时本系列文章会不断完善,每篇文章不定时会有修改。


一、朴素贝叶斯通俗理解及定义

1、什么叫朴素贝叶斯(What)

朴素贝叶斯是一种分类算法,经常被用于文本分类,它的输出结果是某个样本属于某个类别的概率

朴素:之所以朴素,就在于假定了特征与特征相互独立。(这样有些概率才有可计算性)

贝叶斯:数学中的贝叶斯公式。

2、朴素贝叶斯的目的(Why)

通过贝叶斯公式计算样本属于某个类别的概率。从而确定其分类。

3、怎么做(How)

通过求得先验概率得到所求概率。

二、原理理解及公式

1、概率基础

正向概率:假设袋子里面有N个白球,M个黑球,你伸手进去摸出黑球的概率是多大?

逆向概率:事先不知道袋子里面黑白球的比例,闭着眼睛摸出一个或者好几个球,观察取出来的球的颜色后,我们可以对袋子里面的黑白球的比例作出什么样的预测?

---

边缘概率(先验概率):某个事件发生的概率。(边缘分布命名原因是因为它出现在概率分布表格的边缘)在联合概率中,把最终结果中那些不需要的事件通过合并成它们的全概率,而消去它们,这称为边缘化(marginalization)。

联合概率:含多个条件,且所有条件同时成立的概率。

条件概率(后验概率):事件A在另一个事件B已经发生条件下的发生概率。

相互独立:两事件联合概率等于两事件边缘概率之积,则他们相互独立。

2、贝叶斯公式

通过案例 “ 判断女神对你的喜欢情况 ”理解:

问题:

被女神喜欢的概率?                                    P(喜欢)=4/7
职业是程序员并且体型匀称的概率?                      P(程序员,匀称)=1/7
在女神喜欢的条件下,职业是程序员的概率?              P(程序员|喜欢)=2/4=1/2
在女神喜欢的条件下,职业是程序员、体重超重的概率?    P(程序员,超重|喜欢)=1/4小明被女神喜欢的概率?                               P(喜欢|产品,超重)=?

这里就需要用到贝叶斯公式:

P(喜欢|产品, 超重) = P(产品,超重|喜欢)P(喜欢) / P(产品,超重)

计算可以发现:

P(产品,超重|喜欢) 和 P(产品,超重) 的结果均为0,导致无法计算结果。这是因为我们的样本量太少了,不具有代表性。
本来现实生活中,肯定是存在职业是产品经理并且体重超重的人的,P(产品,超重)不可能为0;
而且事件职业是产品经理和事件体重超重通常被认为是相互独立的事件,但是,根据我们有限的7个样本计算 P(产品,超重) = P(产品)P(超重) 不成立。

而朴素贝叶斯可以帮助我们解决这个问题:

简单理解,就是假定了特征与特征之间相互独立的贝叶斯公式。

所以小明被女神喜欢的概率可以这样算:

P(产品, 超重) = P(产品) * P(超重) = 2/7 * 3/7 = 6/49
p(产品, 超重|喜欢) = P(产品|喜欢) * P(超重|喜欢) = 1/2 * 1/4 = 1/8
P(喜欢|产品, 超重) = P(产品, 超重|喜欢)P(喜欢)/P(产品, 超重) = 1/8 * 4/7 / 6/49 = 7/12

3、拉普拉斯平滑系数

拉普拉斯平滑是为了解决零概率的问题。假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

贝叶斯公式应用在文章分类中,可以这样看:

案例理解:
需求:通过前四个训练样本(文章),判断第五篇文章,是否属于China类

应用贝叶斯公式计算测试集,简化后应该是如下结果:

 当是China类的概率为3/4,和不是china类的概率1/4。

当是China类和不是china类的概率是不变的,分别是6/11,1/11,1/11。

所以我们需要计算的就是。且需要分别计算是China类和不是china类的概率。

 

# 计算是China类的概率: 
P(Chinese|C) = 5/8        # 是china类,共8词,5个Chinese
P(Tokyo|C) = 0/8
P(Japan|C) = 0/8

 

# 计算不是China类的概率:
P(Chinese|C) = 1/3
P(Tokyo|C) = 1/3
P(Japan|C) = 1/3

 从上面我们可以得到, 都是0,这是不合理的。如果词频列表里面有很多次数都为0,很可能计算结果都为0。所以需要用到拉普拉斯平滑系数。

利用拉普拉斯平滑系数 解决后:

# m=6(训练集中特征词的个数,重复不计)是China类的概率:P(Chinese|C) = 5/8 --> 6/14P(Tokyo|C) = 0/8 --> 1/14P(Japan|C) = 0/8 --> 1/14不是China类的概率: P(Chinese|C) = 1/3 --> 2/9P(Tokyo|C) = 1/3 --> 2/9P(Japan|C) = 1/3 --> 2/9

代入公式得到:

[P(Chinese|C)^3 * P(Tokyo|C) * P(Japan|C) * P(C)] / [P(Chinese)^3 * P(Tokyo) * P(Japan)]# 是china类
=[(6/14)^3 * (1/14) * (1/14) * (3/4)] / [(6/11)^3 * (1/11) * (1/11)]
=(3*11^5)/(4*14^5)# 不是china类
=[(2/9)^3 * (2/9) * (2/9) * (3/4)] / [(6/11)^3 * (1/11) * (1/11)]
=(22^5)/(4*6^3*3^9)

三、**算法实现

四、接口实现

1、新闻数据集介绍

sklearn20类新闻分类,20个新闻组数据集包含20个主题的18000个新闻组帖子。

from sklearn.datasets import fetch_20newsgroups# 获取数据
news = fetch_20newsgroups(subset='all',data_home='data')print("新闻数据集的键:",news.keys())print(len(news.data))
print(len(news.target))
print(len(news.target_names))print(news.target_names)

2、API

sklearn.naive_bayes.MultinormalNB(alpha=1.0)导入:
from sklearn.naive_bayes import MultinormalNB语法:
mlt=MultinormalNB(alpha=1.0)alpha:拉普拉斯平滑系数mlt.fit( x_train,y_train ):接收训练集特征和训练集目标
mlt.predict( x_test ):接收测试集特征,返回数据的类标签
mlt.score(x_test, y_test):接收测试集特征 和 测试集目标,返回准确率。
mlt.get_params():获取接收的参数(alpha、fit_prior这种参数)
mlt.set_params():设置参数
mlt.partial_fit():增量测试,用于数据量太大不能一次装入内存的情况,

3、流程

from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNB

3.1、获取数据

# 获取数据
news = fetch_20newsgroups(subset='all',data_home='data')

3.2、数据预处理

# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25, random_state=1473)

3.3、特征工程

# 对数据集进行特征抽取
tf = TfidfVectorizer()# 以训练集当中的词的列表进行每篇文章重要性统计['a','b','c','d']
x_train = tf.fit_transform(x_train)x_test = tf.transform(x_test)

3.4、朴素贝叶斯模型训练

# 进行朴素贝叶斯算法的预测,alpha是拉普拉斯平滑系数
mlt = MultinomialNB(alpha=1.0)print(x_train.toarray())
# 训练
mlt.fit(x_train, y_train)

3.5、模型评估

y_predict = mlt.predict(x_test)print("预测的文章类别为:", y_predict)# 得出准确率
print("准确率为:", mlt.score(x_test, y_test))

 

用分类报告【详情请看机器学习(四) -- 模型评估(2)-分类报告】

from sklearn.metrics import classification_report
print(classification_report(y_test, y_predict, target_names=news.target_names))

精确率(precision)、召回率(recall)、F1 值(F1-score)和样本数目(support)

用ROC曲线和AUC

from sklearn.metrics import roc_curvefpr,tpr,thresholds=roc_curve(y_test,y_predict)plt.plot(fpr, tpr)
plt.axis("square")
plt.xlabel("假正例率/False positive rate")
plt.ylabel("正正例率/True positive rate")
plt.title("ROC curve")
plt.show()

from sklearn.metrics import roc_auc_score# 把0-19总计20个分类,变为0和1
y_test = np.where(y_test == 0, 1, 0)
y_predict = np.where(y_predict == 0, 1, 0)
# roc_auc_score的y_test只能是二分类,针对多分类如何计算AUC
print("AUC指标:", roc_auc_score(y_test, y_predict))

3.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

4、优缺点

4.1、优点:

  • 朴素贝叶斯有稳定的分类效率
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类
  • 分类准确度高,速度快

4.2、缺点:

  • 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好
  • 需要计算先验概率,而先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳;

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

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

相关文章

Java Math类

Math常用的API 代码 System.out.println(Math.abs(-12)); // 12 绝对值System.out.println(Math.ceil(12.3)); // 13.0 向上取整System.out.println(Math.floor(12.3)); // 12.0 向下取整System.out.println(Math.max(12, 13)); // 13 最大值System.out.println(Math.min(12, 1…

顺序表的应用之通讯录

学习了顺序表之后,我们也得知道它的实际用途吧!所以,我们今天来学习一下通讯录的实现。 typedef struct personInfo SLDataType; contact.h #define NAME_MAX 20 #define GENDER_MAX 20 #define GTEL_MAX 20 #define ADDR_MAX 100 #include&…

Java Web这一路走来

大部分Java应用都是Web或网络应用,MVC框架在Java框架中有着举足轻重的地位,一开始的Web应用并不现在这样子的,一步一步走来,每一步都经历了无数的血和泪的教训,以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

Flutter开发之图片选择器

使用FLutter开发了一个图片选择的组件,功能如下: 1、支持设置最大可选图片的个数; 2、根据选择的图片个数自适应容器组件的高度; 3、可设置容器的最大高度; 4、支持点击放大和删除功能; 具体效果如下 …

HarmonyOS4.0 ArkTS基本语法

一、项目目录结构 二、HelloWorld 当我们创建一个新的page时,IDE会给我们生成一个HelloWorld的模板 新建page 开启预览器 三、ArkTS基本组成 装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中Entry、Component…

软考113-上午题-【计算机网络】-IPv6、无线网络、Windows命令

一、IPv6 IPv6 具有长达 128 位的地址空间,可以彻底解决 IPv4 地址不足的问题。由于 IPv4 地址是32 位二进制,所能表示的IP 地址个数为 2^32 4 294 967 29640 亿,因而在因特网上约有 40亿个P 地址。 由 32 位的IPv4 升级至 128 位的IPv6&am…

Qt快速入门到熟练(3.程序运行发布与设置图标)

程序运行发布 当我们执行过qt过后,将会在项目目录里面生成出一个debug构建目录,点击进去选择debug文件夹,就可以看到我们生成出来的可执行文件。 很显然我们的项目就叫做MyFirstWidget,所以生成的可执行文件在没有人为设置的情…

idea链接gitlab的token到期

报错 HTTP Request Request GET http://36.46.143.158:6060/api/v4/version failed wit

基于javaJSPssm实现的交通档案管理系统

开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…

VM虚拟机部署code-server服务+tailscale内网穿透,实现随处coding

1.Linux下安装code-server Releases coder/code-server (github.com)https://github.com/coder/code-server/releases先去发布页面查看最新的code-server版本,下载命令示例: wget https://github.com/coder/code-server/releases/download/v4.22.1/co…

【操作系统】STM32-操作系统——持续更新

【操作系统】STM32-操作系统——持续更新 文章目录 前言一、ucosii二、freertos1.介绍2.移植 总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、ucosii UCOSII移植到STM32F103C8T6上之移植记录(一) UCOSII移植到ST…

物联网实战--入门篇之(九)安卓QT--开发框架

目录 一、QT简介 二、开发环境 三、编码风格 四、设计框架 五、总结 一、QT简介 QT是一款以C为基础的开发工具,已经包含了很多常用的库,除了基本的GUI以外,还有网络、数据库、多媒体、进程通信、串口、蓝牙等常用库,开发起来…

好看流光风格个人主页HTML源码

这是一款好看流光风格个人主页HTML源码,感觉挺喜欢的,需要的自行下载! 源码下载 好看流光风格个人主页源码

SpringBoot3整合RabbitMQ之三_工作队列模型案例

SpringBoot3整合RabbitMQ之三_工作队列模型案例 文章目录 SpringBoot3整合RabbitMQ之三_工作队列模型案例2. 工作队列模型1. 消息发布者1. 创建工作队列的配置类2. 发布消费Controller 2. 消息消费者One3. 消息消费者Two4. 消息消费者Three5. 输出结果 2. 工作队列模型 1. 消息…

SGD随机梯度下降

一、补充概念: 目标函数(Objective Function):这个术语通常指的是整个优化问题中需要最小化(或最大化)的函数。在机器学习和优化中,目标函数可以包括损失函数以及正则化项等。目标函数的最优化过…

怎么转换图片格式jpg?分享几种转换的方法

我们都知道现在图片格式种类非常多,比较常用的有jpg、png、webp等,很多时候,我们在网上保存的照片不是jpg格式的,查看或者编辑起来就很麻烦,这时候你可能需要将图片转换成jpg格式,那怎么转换图片格式jpg呢?…

【CNN】ConvMixer探究ViT的Patch Embedding: Patches Are All You Need?

Patches Are All You Need? 探究Patch Embedding在ViT上的作用,CNN是否可用该操作提升性能? 论文链接:https://openreview.net/pdf?idTVHS5Y4dNvM 代码链接:https://github.com/tmp-iclr/convmixer 1、摘要 ViT的性能是由于T…

我的 256天 创作纪念日

创作纪念日 我与CSDN的初识耕耘后的收获有笑有泪的日常小小的成就我的憧憬 我与CSDN的初识 在大一上学期的C语言课程中,我首次接触到CSDN。那时,面对众多难以理解的题目,我不得不频繁搜索相关知识和题解,CSDN成了我的救星。这个经…

这几个小众SaaS知识库工具原来这么好用,强烈推荐!

时代的进步和科技的发展,让我们有了更多高效的工作工具。由于云计算和SaaS(Software as a Service)的普及,越来越多的知识库工具被广大用户所知和使用。今天,就让我来为你推荐几款小众但卓效独特的SaaS知识库工具。 首…

市场首款!华邦电子发布内置PQC算法的闪存产品

3月27日,全球领先的半导体内存解决方案供应商华邦电子股份有限公司推出TrustME Secure Flash W77Q系列的最新扩展,包括256Mb、512Mb和1Gb器件。 这些突破性的安全闪存设备是市场上首款针对后量子密码学(PQC)实施Leighton-Micali签…