机器学习(五) -- 监督学习(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/14
    P(Tokyo|C) = 0/8 --> 1/14
    P(Japan|C) = 0/8 --> 1/14

不是China类的概率: 
    P(Chinese|C) = 1/3 --> 2/9
    P(Tokyo|C) = 1/3 --> 2/9
    P(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 TfidfVectorizer

from 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_curve

fpr,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、缺点:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java代码混淆,保护源码的重要性

Java代码混淆是一种重要的安全措施,用于保护Java应用程序的源代码免受恶意攻击和逆向工程的影响。下面是关于Java代码混淆以及保护源码重要性的详细说明: 1. 什么是Java代码混淆? Java代码混淆是指通过对Java代码进行一系列的转换和优化&am…

SD卡误删怎么恢复?5个恢复方法助你找回数据!

“我刚刚在清理sd卡时突然发现sd卡里的部分文件误删了,大家有什么方法可以恢复sd卡重要文件吗?” SD卡,作为一种常见的存储设备,经常用于手机、相机等电子设备中,存储着大量的数据。然而,误删操作往往会导致…

容器和K8s常见概念

【容器】 1、Open Container Initiative(OCI):制定和推动容器格式和运行时的开放标准。容器运行时需要遵循此标准。主要的产出物包括: OCI Image Specification: 定义容器镜像格式的规范,统一描述容器镜像的内容和结…

CSS - 你能尽量多的说出两边固定,中间自适应的三栏布局如何做吗

难度级别:初级及以上 提问概率:65% 前端面试中,布局类题目被问道的频次会非常高,这道题,我们通过以下四种方式来实现。 目录 1 使用flex布局 2 使用绝对定位和margin配合的方式

CSS属性计算逻辑

CSS 属性计算逻辑 首先&#xff0c;假设在 HTML 中有这么一段代码&#xff0c;在 body 中有一个 h1 标题&#xff1a; <body><h1>这是一个h1标题</h1> </body>目前我们没有设置该 h1 的任何样式&#xff0c;但是却能看到该 h1 有一定的默认样式&…

ArcGIS Server 数据存储之注册文件夹及数据库

使用 ArcGIS Server 管理器将数据目录和数据库注册到 ArcGIS Server。数据注册为服务器提供了服务源数据的来源位置列表。数据注册具有以下优点&#xff1a; 数据注册可帮助您验证服务是否引用服务器管理员已知和批准的数据位置。数据注册允许 ArcGIS Server 在将地图、模型或…

QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)

QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)-腾讯云开发者社区-腾讯云 一、功能需求 一般在软件开发中&#xff0c;需要都有选择区域的需求&#xff0c;比如&#xff1a; 1. 截图软件&#xff0c;需要鼠标选择指定区域截图 2. 屏幕录像软件&#xff0c;需要鼠标选…

在git上先新建仓库-把本地文件提交远程

一.在git新建远程项目库 1.选择新建仓库 以下以gitee为例 2.输入仓库名称&#xff0c;点击创建 这个可以选择仓库私有化还公开权限 3.获取仓库clone链接 这里选择https模式就行&#xff0c;就不需要配置对电脑进行sshkey配置了。只是需要每次提交输入账号密码 二、远…

QT 线程之movetothread

上文列举了qt中线程的几种方法&#xff0c;其中2种方法最为常见。 本文以实例的方式描述了movetothread&#xff08;&#xff09;这种线程的方法&#xff0c;将QObject的子类移动到指定的线程。 一、例子 1. Worker类 1.1Worker类头文件 #ifndef WORKER_H #define WORKER_H…

量化《水手》

量化技术的两个指标是压缩比和保真度。这里使用郑智化《水手》中的一段音乐&#xff0c;对Lloyd标量量化方法和LBG矢量量化方法做对比。 原始的音乐是WAV格式&#xff0c;时长9秒钟&#xff0c;单声道&#xff0c;采样率为44.1KHz&#xff0c;每个采样点的比特数为16。 首先对…

HTTPS证书是什么?怎么获取?

HTTPS证书&#xff0c;全称是安全套接层&#xff08;SSL&#xff09;或传输层安全&#xff08;TLS&#xff09;证书&#xff0c;是一种数字证书&#xff0c;用于在互联网上建立安全的加密连接&#xff0c;确保数据在客户端&#xff08;如Web浏览器&#xff09;与服务器端&#…

评论列表信息删除功能的实现

需求&#xff1a;删除当前评论&#xff0c;并且在列表中不再显示 核心思路&#xff1a;拿到即将被删除的列表信息id,对列表进行filter过滤 1.定义渲染列表信息 2.添加渲染删除条件&#xff08;如果当前登录用户信息的uid和渲染列表信息里的uid保持一致&#xff0c;那么就将删…

VMwear桥接网络正确配置+静态IP设置

1.桥接网络配置 很多时候在VMware安装完虚拟机之后&#xff0c;会发现配置的桥接网络没有起作用&#xff0c;如果是Linux下输入ifconfig发现只有ipv6的地址而没有ipv4&#xff0c;说明没有桥接没有启用成功&#xff0c;需要按照以下方式来设置 在VMware的左上角打开编辑&#…

ENSP USG防火墙接入虚拟机;开启Web访问;

1.添加防火墙及云&#xff0c;启动防火墙&#xff1b; 2.配置桥接网卡&#xff1b; 默认账户&#xff1a;admin 默认密码&#xff1a;Admin123 #第一次登陆需修改密码&#xff1b; 默认G0/0/0口为管理口&#xff0c;而在模拟器中进入防火墙的web需如下配置&#xff1a; 配置 …

面试(02)————Java基础和集合

一、Java基础知识 1、面向对象的特征 2、Java 的基本数据类型有哪些 3、JDK JRE JVM 的区别 4、重载和重写的区别 5、Java中和equals的区别 6 、String、StringBuffer、StringBuilder三者之间的区别 7、接口和抽象类的区别是什么&#xff1f; 8、反射 9、jdk1.8 的新特…

力扣刷题--不同的二叉搜索树96

不同的二叉搜索树 该题虽然是一个二叉树的题目 但是使用动态规划做 dp[i]数组的含义&#xff1a;i个节点有多少种组合方式递推公式&#xff1a;dp[i] dp[j] dp[i-1-j] j(0–>i-1)初始化&#xff1a;dp[0]1 dp[1] 1确定递推顺序 i(2–>n) j(0–>i-1)推导一遍 c…

后端说处理了跨域但没有生效

场景&#xff1a; 常见的跨域报错&#xff0c;一般都是由后端进行setHeader/*什么的。但是现在这种情况就是后端说他们做了处理。但是我这边请求还是报错。 withCredentials: with-credentials用来设置是否发送cookie&#xff0c;如果为true就会在跨域请求时候携带cookie&…

DC/DC1A30V高效同步降压转换器H4010

DC/DC 1A30V高效同步降压转换器是一种高频、同步、整流、降压、开关模式转换器&#xff0c;内置功率MOSFET。它可以在宽输入电源范围内实现1.5A峰值输出电流&#xff0c;并具有出色的负载和线路调节性能。此外&#xff0c;该转换器需要最少数量的现成外部元件&#xff0c;并采用…

电脑桌面上表格不见了怎么找回?这5个方法不要错过

在日常的办公和学习中&#xff0c;电脑桌面上的各种文件、文件夹和表格等无疑是我们较为频繁使用的资源。然而&#xff0c;有时我们可能会因为一些操作失误或者电脑问题&#xff0c;突然发现桌面上的某个表格文件神秘失踪了。面对这种情况&#xff0c;很多人可能会感到焦虑和不…

Win11怎么关闭防火墙,win11怎么关闭防火墙对应用的限制

Win11系统如何关闭防火墙呢?有时候我们安装一些软件的时候,屏幕右下角会弹出警告,提示软件被拦截,无法安装成功。如果想要正常安装的话,需要先将防火墙功能给关闭了。由于win11的操作逻辑与win10大不同,所以许多小伙伴不清楚win11如何管理防火墙。接下来,小编跟大家分享…