机器学习——贝叶斯分类器(基础理论+编程)

目录

一、理论

1、初步引入

2、做简化

3、拉普拉斯修正

二、实战

1、计算P(c)

2、计算P(x|c)

3、实战结果

1、数据集展示

2、相关信息打印


 

一、理论

1、初步引入

在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。

个人通俗地理解:给一些这个西瓜的信息x(eg:纹理如何?色泽如何?),计算这个西瓜是好瓜的概率和是坏瓜的概率,比较大小,哪个概率较大,该西瓜就属于哪一类

理解转为公式:就是找 eq?%5Cmax_%7Bc_i%7D%20P%28c_i%7Cx%29

2、做简化

1)贝叶斯转换

由贝叶斯公式可以将eq?P%28c_i%7Cx%29 做如下转换:

                eq?P%28c_i%7Cx%29%20%3D%20%5Cfrac%7BP%28x%2Cc_i%29%7D%7BP%28x%29%7D%20%3D%20%5Cfrac%7BP%28x%7Cc_i%29P%28c_i%29%7D%7BP%28x%29%7D

2)针对目标简化:

我们最终是要确定使得eq?P%28c_i%7Cx%29最大的eq?c_i ,而eq?P%28x%29 对任何 eq?c_i 都一致,所以求

eq?%5Cmax_%7Bc_i%7D%20P%28c_i%7Cx%29 可以舍去分母,也即求 eq?%5Cmax%20P%28x%7Cc_i%29P%28c_i%29

对于 eq?P%28x%7Cc_i%29 和 eq?P%28c_i%29 采用估计

3)求P(c)

假定训练集数据容量足够且分布能够真实反应数据实际时,我们可以将频率估计为概率

即 eq?P%28c_i%29%20%3D%20%5Cfrac%7B%7CD_%7Bc_i%7D%7C%7D%7B%7CD%7C%7D

4)求P(x|c_i)

a)x是离散属性

eq?D_%7Bc%2Cxi%7D 表示eq?D_c中在第i个属性上取值为xi的样本组成的集合,则条件概率eq?P%28x%7Cc_i%29 可估计为

        eq?p%28x_i%7Cc%29%20%3D%20%5Cfrac%7B%7CD_%7Bc%2Cx_i%7D%7C%7D%7BD_c%7D

b)x是连续属性

通常对条件概率不能用频率估计,一般采用的方式:先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。

假设eq?P%28x%7Cc_i%29 服从正态分布,

                        eq?p%28x_i%7Cc%29%20%3D%20%5Cfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%5Csigma_%7Bc%2Ci%7D%7D%7De%5E%7B%28-%5Cfrac%7B%28x-%5Cmu_%7Bc%2Ci%7D%29%5E2%7D%7B2%5Csigma%5E2_%7Bc%2Ci%7D%7D%29%7D

其中:

         eq?%5Cmu_%7Bc%2Ci%7D%20%3D%20%5Cfrac%7B1%7D%7B%7CD_%7Bc%2Ci%7D%7C%7D%5Csum_%7Bx_i%5Cepsilon%20D_c%7D%20x_i  

        eq?%5Csigma_%7Bc%2Ci%7D%5E2%20%3D%20%5Cfrac%7B1%7D%7B%7CD_%7Bc%2Ci%7D%7C%7D%20%5Csum_%7Bx_i%5Cepsilon%20D_%7Bc%2Ci%7D%7D%28x_i-%5Cmu%20_c%29%28x_i-%5Cmu%20_c%29%5ET

3、拉普拉斯修正

问题:若某个属性值在训练集中没有与某个类同时出现过,则直接将概率连乘,会导致“哪怕在其他属性上明显像好瓜,分类的结果都将是坏瓜”的情况。

为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”,在估计概率值时通常要进行“平滑”(smoothing),常用“拉普拉斯修正”(Laplacian correction)

具体做法是:

                eq?P%28c%29%20%3D%20%5Cfrac%7B%7CDc%7C+1%7D%7B%7CD%7C+N%7D

                eq?P%28c%2Ci%29%20%3D%20%5Cfrac%7B%7CD_%7Bc%2Ci%7D%7C+1%7D%7B%7CD_c%7C+N_i%7D

二、实战

1、主要流程介绍:

1)完整代码:

DrawPixel/Bayesian_decison.ipynb at main · ndsoi/DrawPixel (github.com)

2)实战分三个部分:

087e2288935847feb43f06c83d1bbe7e.png

详情可以见上述链接,博文只放关键代码

1、计算P(c)

1)先从数据集中找出类别为c的所有数据

def getDc(train_data,Class):Dc = []for melon in train_data:if melon['类别'] == Class:Dc.append(melon)return Dc

然后只需用以下计算Pc

Pc = len(Dc)/len(train_data)

收集好的Dc可以进一步用于计算 P(x|c)

2、计算P(x|c)

1)离散属性 

写出求 类别c中属性attr取值为value的样本概率

# 计算类别c中属性attr取值为value的样本概率
def calP_xiForI(attr,value,Dc):cnt = 0for melon in Dc:if melon[attr] == value:cnt+=1#print(f"P(({attr}={value})|{melon['类别']})={cnt/len(Dc)}")return cnt/len(Dc)

计算 对于给定的一个样本test('attr1':'value1','attr2':'value2',..,),已知它所有的属性,则它是类别Class的概率【这里仅考虑离散属性】

def calPcx(train_data,Class,test):# 找出类别为Class的数据Dc = getDc(train_data,Class)Pc = len(Dc)/len(train_data)# print(f"P({Class})={Pc}")ans = 1for attr,value in test.items():# 属性是离散的tmp = calP_xiForI(attr,value,Dc)ans*= tmpreturn ans*Pc

2)连续属性:

对于连续属性,要先计算均值和方差:

import math
### 计算均值
def calmu_c_i(Dc,attr):mu = 0for data in Dc:mu += float(data[attr])print(f"attr={attr},mu={mu/len(Dc)}")return mu/len(Dc)### 计算方差
def cal_sigma_c_i(Dc,attr):sigma = 0mu = calmu_c_i(Dc,attr)for data in Dc:sigma+=(float(data[attr])-mu)*(float(data[attr])-mu)print(f"方差attr={attr}.sigma={math.sqrt(sigma/len(Dc))}")return math.sqrt(sigma/len(Dc))

然后写出计算P(x|c)的函数

def calP_xiForC(attr,Dc,test):sigma = cal_sigma_c_i(Dc,attr)mu = calmu_c_i(Dc,attr)tmp = -(float(test[attr])-mu)*(float(test[attr])-mu)/(2*sigma*sigma)return 1/math.sqrt(2*math.pi*sigma)*math.exp(tmp)

计算样本x是Class类别的概率(既考虑离散又考虑连续属性)

def calPcx_v3(train_data,Class,test,Attrs):# 找出类别为Class的数据Dc = getDc(train_data,Class)Pc = len(Dc)/len(train_data)# print(f"P({Class})={Pc}")ans = 1for attr,value in test.items():# 属性是离散的if Attrs[attr] == 'c':tmp = calP_xiForC(attr,Dc,test)else:tmp = calP_xiForI_v2(attr,value,Dc)# 属性是连续的ans*= tmpprint(f"calPcx_v3:{ans*Pc}")return ans*Pc

3、实战结果

(复现西瓜书7.3的例题)

1、数据集展示

训练数据集:

e354ea21347841849f42ff43ede660dc.png

测试例:

d41edf8925064b76b24fb9147323e98e.png

2、相关信息打印

3c926145d3a44b388d41c1a4d45560a1.png

结果解析,最上方的红色和黄色框指的是好瓜中密度的均值、方差以及含糖率的密度和均值

蓝色和绿色框指的是坏瓜中密度的均值、方差以及含糖率的密度和均值

黑色是测试集的原始数据集和预测类别,看到对于测试例的预测是“好瓜”

 

 

 

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

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

相关文章

Jenkins升级中的小问题

文章目录 使用固定版本安装根据jenkins页面下载war包升级jenkins重启jenkins报错问题解决 K8s部署过程中的一些小问题 ##### Jenkins版本小插曲 ​ 在Jenkins环境进行插件安装时全部清一色飘红,发现是因为Jenkins版本过低导致,报错的位置可以找到更新je…

巨控GRM560工业物联网的升级后的功能

巨控GRM560:工业自动化领域的革命者 标签:#工业自动化 #PLC #远程控制 #OPCUA #MQTT 随着工业4.0时代的到来,智能制造已经成为了发展的大势所趋。在这样的背景下,自动化控制系统的核心——可编程逻辑控制器(PLC)的作用…

shell脚本发布docker-nginx vue2 项目示例

docker、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 nginx安装在docker容器里面,参见:https://blog.csdn.net/HSJ0170/article/details/128631155 姊妹篇(宿主机nginx,非docker-nginx)&am…

基于java+SpringBoot+Vue的数码论坛系统设计与实现

基于javaSpringBootVue的数码论坛系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含: 数码论坛系统是一个基于互联网的数码产品讨论和信息分享平台…

深度学习语义分割篇——DeepLabV2原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

小狐狸JSON-RPC:wallet_watchAsset(向钱包中新增资产代币)

wallet_watchAsset 请求用户在 MetaMask 中添加新的资产。返回一个布尔值,是否已成功添加。 var res await window.ethereum.request({ "method": "wallet_watchAsset","params": {"type": "ERC20","opti…

盘点库存怎么做账

库存的盘点是企业中非常重要的一步,也是仓管经常要做的工作,盘点通俗点说就是点一下实物与账面上的数据是否一至,来判断我们平时的货物管理是否与账面上的业务往来符合,盘点库存怎么做账? 按目前的情况来看&#xff0c…

【数据结构】Java中Map和Set详解(含二叉搜索树和哈希表)

目录 Map和Set详解 1.二叉搜索树 2.Map常见方法 3.Set常见方法 4.哈希表 Map和Set详解 Map:一种键值对结构,hashMap中键和值均可以为空,hashTable中则不可以存放null值 Set:一种集合,不能存放重复元素&#xff0c…

SpringBoot使用Jedis步骤

基础连接方式 引入依赖 <!-- Jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>创建Jedis对象&#xff0c;建立连接 操作字符串 方法名与Rdeis命令一致 操作Hash类型 释放资源 测…

【小米SU7实测发布】Python与人工智能的结合

小米在2023年底正式发布小米SU7,成为继华为之后第二个推出成品的的科技企业。不过此时小米需要做的不仅是打造一款产品力够高的车型,更是要以后发者的身份更快速地追上头部智驾车企。从昨天的发布会中可以发现,小米SU7采用双Orin-X芯片以及27个感知硬件组合,这套硬件组合在…

FFmpeg拉取RTSP流并定时生成10秒短视频

生成效果: 视频时长为10秒 生成格式为FLV 输出日志: 完整实现代码如下: 需要在Mac和终端先安装FFmpeg brew install ffmpeg CMake文件配置: cmake_minimum_required(VERSION 3.27) project(ffmpeg_open_stream) set(CMAKE_CXX_STANDARD 17)#头文件包目录 include_director…

ETL工具-nifi干货系列 第五讲 处理器GenerateFlowFile

1、今天我们一起来学习处理器GenerateFlowFile。这个处理器创建带有随机数据或自定义内容的 FlowFiles。GenerateFlowFile 对于负载测试、配置和模拟非常有用。从工具栏拖动处理器到画布&#xff0c;然后选择GenerateFlowFile即可。 2、点击add按钮或者双击 GenerateFlowFile可…

【蓝桥杯省赛真题34】python积木搭建 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

python积木搭建 第十三届蓝桥杯青少年组python比赛省赛真题 一、题目要求 &#xff08;注&#xff1a;input&#xff08;&#xff09;输入函数的括号中不允许添加任何信息&#xff09; 1、编程实现 小蓝和小青在玩积木搭建游戏&#xff0c;具体玩法如下: 小蓝报一个数字N&…

vue多语言包i18n

1.安装 如果是vue2直接安装8.2.1版本&#xff0c;否则会出现版本不匹配的错误 npm install vue-i18n8.2.1 --save2.文件编辑 在src目录下创建文件 en.js export const h {system: "Background management system",loginOut:"LoginOut",LayoutSet:Layout …

用搜索引擎收集信息-常用方式

1&#xff0c;site csdn.net &#xff08;下图表示只在csdn网站里搜索java&#xff09; 2&#xff0c;filetype:pdf &#xff08;表示只检索某pdf文件类型&#xff09; 表示在浏览器里面查找有关java的pdf文件 3&#xff0c;intitle:花花 &#xff08;表示搜索网页标题里面有花…

qtxlsx 学习

简介&#xff1a; QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件&#xff0c;可以在Qt5支持的任何平台上使用。 QXlsx和QAxObject 比较 QAxObject使用需要系统中安装了offie或wps&#xff0c;这种方法不推荐使用&#xff1b; 因为如果安装了wps&#xff0c;可…

4.Python数据分析—数据分析入门知识图谱索引(知识体系下篇)

4.Python数据分析—数据分析入门知识图谱&索引-知识体系下篇 一个人简介二机器学习基础2.1 监督学习与无监督学习2.1.1 监督学习&#xff1a;2.1.2 无监督学习&#xff1a; 2.2 特征工程2.3 常用机器学习算法概述2.3.1 监督学习算法&#xff1a;2.3.2 无监督学习算法&#…

Phoenix伪分布安装

引言 Phoenix是构建在HBase上的一个SQL层&#xff0c;能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表&#xff0c;插入数据和对HBase数据进行查询。Phoenix完全使用Java编写&#xff0c;作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫…

【保姆级讲解如何构建Python虚拟环境】

&#x1f525;博主&#xff1a;程序员不想YY啊&#x1f525; &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f4ab; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f308;希望本文对您有所裨益&#xff0c;如有…

SAP 前台处理:CO主数据之成本要素组创建-<KAH1>

一、背景 本章是成本要素主数据创建的续章&#xff0c;后续会用到成本费用的分摊分配&#xff0c;费用的统计中。 也是成本控制篇的内容之一 成本控制分主数据篇和业务篇&#xff1a; 主数据篇主要内容&#xff1a; 成本要素、成本中心、订单、作业类型、统计指标、工作中…