机器学习(五) -- 监督学习(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.hqwc.cn/news/596870.html

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

相关文章

[Java线程池]ExecutorService|CompletionService的区别与选择

这段时间对业务系统做了个性能测试,其中使用了较多线程池的技术,故此做一个技术总结。 这次总结的内容比较多,主要是四个: ExecutorServiceCompletionServiceRunnableCallable 前两个是线程池相关接口,后两个是多线…

MacOS Docker 可视化面板 Portainer

一、简介 Portainer 是一个可视化的容器镜像图形管理工具,使用 Portainer 可以轻松构建、管理和维护Docker 环境。 而且完全免费(portainer-ce 是免费的,portainer-ee 是需要授权的,今天安装的是 portainer-ce 版本)&…

强力推荐一款具有故障保护和CAN FD 功能的隔离CAN收发器 SiLM5150S

控制器局域网总线(CAN,Controller Area Network),是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是目前应用最广泛的现场总线之一。CAN协议具有实时性强、可靠性高、传输距离远的特点,适用于各种复…

【智能算法应用】猎人猎物优化算法(HPO)在WSN覆盖中的应用

目录 1.算法原理2.数学模型3.结果展示4.参考文献 1.算法原理 【智能算法】猎人猎物算法(HPO)原理及实现 2.数学模型 3.结果展示 HPO设置区域边长为20,节点数为35,感知半径为2.5,实验结果如下: 4.参考…

博客部署001-centos安装docker

1、安装docker 1.1 卸载旧版本的 Docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2 设置 Docker 仓库 安装 Docker Engine 之前,首先需要设置…

ABAP 读取EXCEL 内容,OLE

代码: INCLUDE OLE2INCL. DATA: GS_EXCEL TYPE OLE2_OBJECT , GS_WBOOKLIST TYPE OLE2_OBJECT, GS_SHEETS TYPE OLE2_OBJECT, GS_CELL1 TYPE OLE2_OBJECT , CELL TYPE OLE2_OBJECT, ROWS …

深度剖析鞋服品牌商品数字化管理的重要性

随着信息技术的迅猛发展与市场竞争的加剧,鞋服品牌商品数字化管理的重要性愈发凸显。数字化管理不仅关乎企业运营效率的提升,更是品牌实现差异化竞争、提升顾客体验、构建智慧零售生态的关键所在。对于鞋服品牌企业而言,提升商品数字化管理的…

深入浅出 -- 系统架构之分布式集群的分类

一、单点故障问题 集群,相信诸位对这个概念并不陌生,集群已成为现时代中,保证服务高可用不可或缺的一种手段。 回想起初集中式部署的单体应用,因为只有一个节点,因此当该节点出现任意类型的故障(网络、硬件…

JQuery(一)---【JQuery简介、安装、初步使用、各种事件】

零.前言 在学习JQuery前,您需要具备以下知识: HTML相关知识(DOM)CSS相关知识JavaScript相关知识 一.JQuery 1.1JQuery简介 JQuery是一个JavaScript的“函数库”,不是JavaScript的一个框架,与“VUE、REACT”有本质区别&#x…

非关系型数据库(缓存数据库)redis的性能管理

目录 一.Redis性能管理 1.Info Memory——查看Redis内存使用 2.内存碎片率 3. 内存使用率 4.内存回收key 二.缓存的穿透,击穿和雪崩 1.缓存的穿透 1.1 问题描述 1.2 缓存穿透发生的条件 1.3 缓存穿透发生的原因 1.4 解决方案 2 缓存的击穿 2.1 问题描…

SQLServer2022安装

首先从官网上下载2022版本SQL Server 下载 | Microsoft 选择此把呢不能运行,适合我们在学习阶段使用。 同时网页往下滑动,下载SSMS 下载后的文件 注意:在运行时最好获取管理员权限运行,第一次在安装时未获取管理员权限最终…

代码随想录算法训练营三刷day46 | 动态规划之139.单词拆分

三刷day46 139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包…