机器学习(贝叶斯算法,决策树)

朴素贝叶斯分类

贝叶斯分类理论

假设现有两个数据集,分为两类

我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率,用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率,那么对于一个新数据点(x,y),可以用下面的规则来判断它的类别:

  • 如果p1(x,y)>p2(x,y),那么类别为1

  • 如果p1(x,y)<p2(x,y),那么类别为2

条件概率

条件概率是指在一定条件下事件发生的概率

P(A|B)即表示事件B发生的情况下,事件A发生的概率。

有图可知:在事件B发生的情况下,事件A发生的概率就是P(A∩B)除以P(B)。

𝑃(A|B)=𝑃(A∩B)/𝑃(B)

变换可得

𝑃(A∩B)=𝑃(A|B)𝑃(B) 或𝑃(A∩B)=𝑃(B|A)𝑃(A)

即:𝑃(𝐴|𝐵)=𝑃(B|A)𝑃(𝐴)/𝑃(𝐵)

这为条件概率公式。

全概率公式

假定样本空间S,是两个事件A与A'的和。

红色部分是事件A,绿色部分是事件A',它们共同构成了样本空间S。

在这种情况下,事件B可以划分成两个部分。

事件B的概率即可表示为:𝑃(𝐵)=𝑃(𝐵∩𝐴)+𝑃(𝐵∩𝐴′)

由上可得:𝑃(𝐵∩𝐴)=𝑃(𝐵|𝐴)𝑃(𝐴)

所以:𝑃(𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)+𝑃(𝐵|𝐴′)𝑃(𝐴′)

这就是全概率公式。它的含义是,如果A和A'构成样本空间的一个划分,那么事件B的概率,就等于A和A'的概率分别乘以B对这两个事件的条件概率之和。

贝叶斯推断

对条件概率公式进行变形,可以得到如下形式:

我们把P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。

P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。

P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。

后验概率 = 先验概率x调整因子

朴素贝叶斯推断

贝叶斯和朴素贝叶斯的概念是不同的,区别就在于“朴素”二字,朴素贝叶斯对条件概率分布做了条件独立性的假设。

根据贝叶斯定理,后验概率 P(a|X) 可以表示为:

$P(a|X) = \frac{P(X|a)P(a)}{P(X)}$

  • P(X|a) 是给定类别 ( a ) 下观测到特征向量 $X=(x_1, x_2, ..., x_n) $的概率;

  • P(a) 是类别 a 的先验概率;

  • P(X) 是观测到特征向量 X 的边缘概率,通常作为归一化常数处理。

又因,朴素贝叶斯分类器的关键假设是特征之间的条件独立性, 因此,我们可以将联合概率 P(X|a) 分解为各个特征的概率乘积:

$P(X|a) = P(x_1, x_2, ..., x_n|a) = P(x_1|a)P(x_2|a)...P(x_n|a)$

将这个条件独立性假设应用于贝叶斯公式,我们得到:

$P(a|X) = \frac{P(x_1|a)P(x_2|a)...P(x_n|a)P(a)}{P(X)}$

这样,朴素贝叶斯分类器就可以通过计算每种可能类别的条件概率和先验概率,然后选择具有最高概率的类别作为预测结果。

纹理色泽鼔声类别
1清晰清绿清脆好瓜
2模糊乌黑浊响坏瓜
3模糊清绿浊响坏瓜
4清晰乌黑沉闷好瓜
5清晰清绿浊响好瓜
6模糊乌黑沉闷坏瓜
7清晰乌黑清脆好瓜
8模糊清绿沉闷好瓜
9清晰乌黑浊响坏瓜
10模糊清绿清脆好瓜
11清晰清绿沉闷
12模糊乌黑浊响

按例中第12个瓜来判断

首先计算样本中好瓜和坏瓜的概率(10个瓜中有6个好瓜,4个坏瓜)
P(好瓜)=0.6
P(坏瓜)=0.4
--------------
P(纹理清晰)=0.5
P(纹理模糊)=0.5
--------------
P(色泽清绿)=0.5
P(色泽乌黑)=0.5
--------------
P(声音清脆)=0.3
P(声音沉闷)=0.3
P(声音浊响)=0.4
-----------------
第12个瓜的特征是(纹理模糊,色泽乌黑,声音浊响)
则:
P(纹理模糊|好瓜)=1/3
P(纹理模糊|坏瓜)=3/4
P(色泽乌黑|好瓜)=1/3
P(色泽乌黑|坏瓜)=3/4
P(声音浊响|好瓜)=1/3
P(声音浊响|坏瓜)=3/4
---------------------
P(好瓜)=P(纹理模糊|好瓜)*P(色泽乌黑|好瓜)*P(声音浊响|好瓜)*P(好瓜)/p(纹理模糊,色泽乌黑,声音浊响)=((1/3)*(1/3)*(1/3)*0.6)/p(纹理模糊,色泽乌黑,声音浊响)
P(坏瓜)=P(纹理模糊|坏瓜)*P(色泽乌黑|坏瓜)*P(声音浊响|坏瓜)*P(坏瓜)/p(纹理模糊,色泽乌黑,声音浊响)=((3/4)*(3/4)*(3/4)*0.4)/p(纹理模糊,色泽乌黑,声音浊响)

P(好瓜) < P(坏瓜)
故第12个瓜推断为坏瓜

拉普拉斯平滑系数

些事件或特征可能从未出现过,这会导致它们的概率被估计为零。然而,在实际应用中,即使某个事件或特征没有出现在训练集中,也不能完全排除它在未来样本中出现的可能性。拉普拉斯平滑技术可以避免这种“零概率陷阱”

公式为:

一般α取值1,m的值为总特征数量

例如:

sklearn API

sklearn.naive_bayes.MultinomialNB()
estimator.fit(x_train, y_train)
y_predict = estimator.predict(x_test)

sklearn 示例

from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# 加载数据
x,y = load_iris(return_X_y=True)
# 分割
x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.8,random_state=42,stratify=y)
# 创建模型
bayes = MultinomialNB()
# 训练
bayes.fit(x_train,y_train)
# 评估
score = bayes.score(x_test,y_test)
print(score)
# 预测
y_predict=bayes.predict([[2,5,3,5]])
print(y_predict)

 

决策树-分类

概念

树结构,通过条件判断而进行分支选择的节点。

基于信息增益决策树的建立

信息增益决策树倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息,算法只能对描述属性为离散型属性的数据集构造决策树。

(1) 信息熵

信息熵描述的是不确定性。信息熵越大,不确定性越大。信息熵的值越小,则D的纯度越高。

假设样本集合D共有N类,第k类样本所占比例为Pk,则D的信息熵为

(2) 信息增益

信息增益是一个统计量,用来描述一个属性区分数据样本的能力。信息增益越大,那么决策树就会越简洁。这里信息增益的程度用信息熵的变化程度来衡量, 信息增益公式:

(3) 信息增益决策树建立步骤

第一步,计算根节点的信息熵

上表根据是否贷款把样本分成2类样本,"是"占4/6=2/3, "否"占2/6=1/3,

所以

第二步,计算属性的信息增益

计算各特征的信息增益

第三步, 划分属性

对比属性信息增益,选择最大的特征作为第一个节点,将剩下的特征及目标继续重复计算信息熵,得到最大的作为第二个,以此类推。

基于基尼指数决策树的建立

基尼指数(Gini Index)是决策树算法中用于评估数据集纯度的一种度量,基尼指数衡量的是数据集的不纯度,或者说分类的不确定性。在构建决策树时,基尼指数被用来决定如何对数据集进行最优划分,以减少不纯度。

基尼指数的计算

对于一个二分类问题,如果一个节点包含的样本属于正类的概率是 (p),则属于负类的概率是 (1-p)。那么,这个节点的基尼指数 (Gini(p)) 定义为:

$Gini(p) = 1 - p^2 - (1-p)^2 = 2p(1-p) $

对于多分类问题,如果一个节点包含的样本属于第 k 类的概率是 $p_k$,则节点的基尼指数定义为:

$ Gini(p) = 1 - \sum_{k=1}^{K} p_k^2 $

  • 当一个节点的所有样本都属于同一类别时,基尼指数为 0,表示纯度最高。

  • 当一个节点的样本均匀分布在所有类别时,基尼指数最大,表示纯度最低。

案例:

首先工资有两个取值,分别是0和1。当工资=1时,有3个样本。

因此:

同时,在这三个样本中,工作都是好。

故:

同理,当工资=0时,有5个样本,在这五个样本中,工作有3个是不好,2个是好。

两个式子相加得:

得到工资的基尼系数

同理可算出压力的基尼系数,平台的基尼系数

根据基尼指数最小准则, 我们优先选择工资或者平台=0作为D的第一特征。

再将剩下的特征再进行相同计算,再选择一个基尼系数最小的作为第二特征

sklearn API

示例

葡萄酒分类

用决策树对葡萄酒进行分类

from sklearn.datasets import load_wine
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

wine = load_wine()
x = wine.data
y = wine.target

# 分割,stratify可指定按谁分割。
x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.8,random_state=42,stratify=y)
# 标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 模型,criterion='entropy'表示用信息熵来计算,criterion='gini'表示用基尼系数来计算,默认值用基尼系数
decter = DecisionTreeClassifier(criterion='entropy')
# 训练
decter.fit(x_train,y_train)
# 评估
score = decter.score(x_test,y_test)
print(score)
# 预测
y_predict = decter.predict([[1,2,3,4,5,5,7,8,9,6,4,8,9]])
print(y_predict)
# 可视化
export_graphviz(decter, out_file="./model/wine1.dot", feature_names=wine.feature_names)

下列是可视化文件:

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

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

相关文章

《设计模式》创建型模式总结

目录 创建型模式概述 Factory Method: 唯一的类创建型模式 Abstract Factory Builder模式 Prototype模式 Singleton模式 最近在参与一个量化交易系统的项目&#xff0c;里面涉及到用java来重构部分vnpy的开源框架&#xff0c;因为是框架的搭建&#xff0c;所以会涉及到像…

【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;本文面向的人群 二&#xff1a;错误场景引入 三&#xff1a;正确场景引入 四&#xf…

论文阅读--supervised learning with quantum enhanced feature spaces

简略摘要 量子算法实现计算加速的核心要素是通过可控纠缠和干涉利用指数级大的量子态空间。本文在超导处理器上提出并实验实现了两种量子算法。这两种方法的一个关键组成部分是使用量子态空间作为特征空间。只有在量子计算机上才能有效访问的量子增强特征空间的使用为量子优势提…

网络安全之信息收集-实战-1

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 实战&#xff1a;补天公益src“吉林通用航空职业技术学院” 奇安信&#xff5c;用户登录https://www.butian.net/Loo/submit?cid64918 域名或ip&#xff1a;https://www.jlth…

jenkins离线安装插件

Jenkins 在线安装插件失败 报错&#xff1a; Caused: java.io.IOException: Failed to load https://updates.jenkins.io/download/plugins/login-theme/244.vd67c77f0c4c8/login-theme.hpi to /var/jenkins_home/plugins/login-theme.jpi.tmpat hudson.model.UpdateCenter$Up…

MATLAB的语音信号采集与处理分析

1、基本描述 本文描述的系统是一个全面而精细的语音信号处理平台&#xff0c;核心组件由MATLAB的高级功能模块构建而成。系统的核心交互界面&#xff0c;借助于MATLAB的uifigure函数搭建&#xff0c;为用户提供了一个直观且响应迅速的操作环境。通过设计的GUI按钮&#xff0c;如…

【赵渝强老师】MySQL的慢查询日志

MySQL的慢查询日志可以把超过参数long_query_time时间的所有SQL语句记录进来&#xff0c;帮助DBA人员优化所有有问题的SQL语句。通过mysqldumpslow工具可以查看慢查询日志。 视频讲解如下&#xff1a; MySQL的慢查询日志 【赵渝强老师】MySQL的慢查询日志 下面通过具体的演示…

IDEA指定Maven的settings不生效问题处理

文章目录 一、问题描述二、问题分析三、问题解决 一、问题描述 在Idea中手动指定了maven的settings配置文件&#xff0c;但是一直没生效。 如下图&#xff1a;设置加载settings-aliyun.xml文件&#xff0c;但是最后发现还是在加载settings.xml文件 二、问题分析 ‌在Intel…

论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras

这是 ECCV 2024 的一篇文章&#xff0c;文章作者想建立一个统一的 ISP 模型&#xff0c;以实现在不同手机之间的自由切换。文章作者是香港中文大学的 xue tianfan 和 Gu jinwei 老师。 Abstract 现代端到端图像信号处理器&#xff08;ISPs&#xff09;能够学习从 RAW/XYZ 数据…

[免费]SpringBoot+Vue毕业设计论文管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue毕业设计论文管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue毕业设计论文管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信…

项目技术栈-解决方案-web3去中心化

web3去中心化 Web3 DApp区块链:钱包:智能合约:UI:ETH系开发技能树DeFi应用 去中心化金融P2P 去中心化网络参考Web3 DApp 区块链: 以以太坊(Ethereum)为主流,也包括Solana、Aptos等其他非EVM链。 区块链本身是软件,需要运行在一系列节点上,这些节点组成P2P网络或者半…

使用 Axios 拦截器优化 HTTP 请求与响应的实践

目录 前言1. Axios 简介与拦截器概念1.1 Axios 的特点1.2 什么是拦截器 2. 请求拦截器的应用与实践2.1 请求拦截器的作用2.2 请求拦截器实现 3. 响应拦截器的应用与实践3.1 响应拦截器的作用3.2 响应拦截器实现 4. 综合实例&#xff1a;一个完整的 Axios 配置5. 使用拦截器的好…

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介&#xff1a; 最近发现了一个不错的框架 Photino.Net 一份代码运行&#xff0c;三个平台 windows max linux &#xff0c;其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…

Python爬虫:如何从1688阿里巴巴获取公司信息

在当今的数字化时代&#xff0c;数据已成为企业决策和市场分析的重要资产。对于市场研究人员和企业分析师来说&#xff0c;能够快速获取和分析大量数据至关重要。阿里巴巴的1688.com作为中国最大的B2B电子商务平台之一&#xff0c;拥有海量的企业档案和产品信息。本文将介绍如何…

如何构建高效的接口自动化测试框架?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选…

创建型设计模式(模版方法、观察者模式、策略模式)

继承过程中&#xff0c;虚函数表的变化。动态多态&#xff0c;继承中虚函数的重写

数据结构(顺序队列——c语言实现)

队列的概念&#xff1a; 队列是限制在两端进行插入和删除操作的线性表&#xff0c;允许进行存入的一端称为“队尾”&#xff0c;允许进行删除操作的一端称为“队头”。当线性表中没有元素时&#xff0c;称为“空队”。特点&#xff1a;先进先出&#xff08;FIFO&#xff09;。 …

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会&#xff0c;3C产品&#xff08;涵盖计算机类、通信类和消费类电子产品&#xff09;已成为我们日常生活中不可或缺的重要元素。与此同时&#xff0c;这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…

web服务nginx实验6:nginx发布动态页面的方法

安装软件&#xff1a; 启动服务&#xff1a; 创建文件&#xff1a; 再vim打开&#xff0c;写东西&#xff1a; 重启服务&#xff1a; Windows客户端测试&#xff1a;&#xff08;服务端要关防火墙&#xff09; 删除默认访问发.php文件&#xff1a; 创建一个新的配置文件&#x…

Three.js 相机控制器Controls

在 3D 场景中&#xff0c;摄像机的控制尤为重要&#xff0c;因为它决定了用户如何观察和与场景互动。Three.js 提供了多种相机控制器&#xff0c;最常用的有 OrbitControls、TrackballControls、FlyControls 和 FirstPersonControls。OrbitControls 适合用于查看和检查 3D 模型…