机器学习基础04

目录

1.朴素贝叶斯-分类

1.1贝叶斯分类理论

1.2条件概率

1.3全概率公式

1.4贝叶斯推断

1.5朴素贝叶斯推断

1.6拉普拉斯平滑系数

1.7API

2.决策树-分类

2.1决策树

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

2.2.1信息熵

2.2.2信息增益

2.2.3信息增益决策树建立步骤

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

2.3.1基尼指数

2.4API


1.朴素贝叶斯-分类

1.1贝叶斯分类理论

选择较高概率对应的类别,为其样本的类别。

1.2条件概率

条件概率(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。

由 𝑃(𝐴|𝐵)=𝑃(𝐴∩𝐵)/𝑃(𝐵),

得 𝑃(𝐴∩𝐵)=𝑃(𝐴|𝐵)𝑃(𝐵)

同理可得,

𝑃(𝐴∩𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)

即,条件概率的计算公式:

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

1.3全概率公式

由 𝑃(𝐵)=𝑃(𝐵∩𝐴)+𝑃(𝐵∩𝐴′)

和 𝑃(𝐵∩𝐴)=𝑃(𝐵|𝐴)𝑃(𝐴)

所以,全概率公式:

𝑃(𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)+𝑃(𝐵|𝐴′)𝑃(𝐴′) 

1.4贝叶斯推断

对条件概率公式进行变形:

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

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

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

理解: 后验概率 = 先验概率x调整因子

1.5朴素贝叶斯推断

 朴素贝叶斯对条件概率分布做了条件独立性的假设。

p(a|X) = p(X|a)* p(a)/p(X)
p(X|a) = p(x1,x2,x3...xn|a) = p(x1|a)*p(x2|a)*p(x3|a)...p(xn|a)
p(X) = p(x1,x2,x3...xn) = p(x1)*p(x2)*p(x3)...p(xn)
p(a|X) = p(x1|a)*p(x2|a)*p(x3|a)...p(xn|a) * p(a) / p(x1)*p(x2)*p(x3)...p(xn)

1.6拉普拉斯平滑系数

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

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

通过这种方法,即使某个特征在训练集中从未出现过,其概率也不会被估计为零,而是会被赋予一个很小但非零的值,从而避免了模型在面对新数据时可能出现的过拟合或预测错误。

1.7API

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

score= estimator.score(x_test,y_test)

from sklearn.datasets import load_digits
from sklearn.model_selection import StratifiedKFold
from sklearn.naive_bayes import MultinomialNBdata =load_digits()
x,y =data.data,data.target# 贝叶斯算法预估器
estimator = MultinomialNB()fold = StratifiedKFold(n_splits=5,shuffle=True,random_state =10)
indexs = fold.split(x,y)for train_index, test_index in indexs:x_train,x_test = x[train_index],x[test_index]y_train,y_test = y[train_index],y[test_index]# 模型训练estimator.fit(x_train,y_train)# 模型测试y_predict=estimator.predict(x_test)# print(y_predict)# 模型评估score = estimator.score(x_test,y_test)print(score)

2.决策树-分类

2.1决策树

  • 决策节点

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

  • 叶子节点

没有子节点的节点,表示最终的决策结果。

  • 决策树的深度

所有节点的最大层次数。

  • 决策树优点

可视化 - 可解释能力-对算力要求低

  • 决策树缺点

容易产生过拟合,不能把深度调整得太大了。

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

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

2.2.1信息熵

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

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

2.2.2信息增益

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

2.2.3信息增益决策树建立步骤

第一步:计算各属性的信息熵。

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

第三步:划分属性,信息增益较高者,作为划分节点。

第四步:在分支情况下,计算剩余属性的信息熵。重复第二,三步。

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

2.3.1基尼指数

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

2.3.2基尼指数的计算

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

2.3.3基尼指数的意义

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

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

2.3.4决策树中的应用

在构建决策树时,我们希望每个内部节点的子节点能更纯,即基尼指数更小。因此,选择分割特征和分割点的目标是使子节点的平均基尼指数最小化。具体来说,对于一个特征,我们计算其所有可能的分割点对应的子节点的加权平均基尼指数,然后选择最小化这个值的分割点。这个过程会在所有特征中重复,直到找到最佳的分割特征和分割点。

2.4API

class sklearn.tree.DecisionTreeClassifier(criterion)

参数:

  • criterion :

默认为="gini" 
        取值为"gini"时采用 基尼不纯度(Gini impurity)算法构造决策树,

        取值为"entropy”时采用信息增益( information gain)算法构造决策树.

  • max_depth: 

int, 默认为=None  树的最大深度

function sklearn.tree.export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)

参数:

  •     estimator: 决策树预估器
  •     out_file: 生成的文档
  •     feature_names: 节点特征属性名

功能:
    把生成的文档打开,复制出内容粘贴到"http://webgraphviz.com/"中,点击"generate Graph"会生成一个树型的决策树图

  

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV,train_test_split,StratifiedKFold
from sklearn.tree import DecisionTreeClassifier,export_graphviz# 加载数据
dataset = load_iris()
x,y = dataset.data,dataset.target# 数据划分
x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.7,shuffle=True,random_state=4)fold=StratifiedKFold# 数据标准化
transfer = StandardScaler()
s_x_train = transfer.fit_transform(x_train)
s_x_test = transfer.transform(x_test)# 决策树预估器
estimator = DecisionTreeClassifier(criterion='entropy',max_depth=3)
estimator.fit(s_x_train,y_train)# 模型训练,超参数搜索
param_grid = {'max_depth': [1,2,3],'min_samples_split': [2, 5, 10],'min_samples_leaf': [1, 2, 4]
}
grid_search = GridSearchCV(estimator,param_grid =param_grid)
grid_search.fit(s_x_train,y_train)# 模型评估
score = grid_search.best_score_
print(score)
n = grid_search.best_params_
print(n)# 可视化决策树
export_graphviz(estimator,out_file='iris_tree.dot',feature_names=['萼片长度','萼片宽度','花瓣长度','花瓣宽度'])

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

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

相关文章

The Internals of PostgreSQL 翻译版 持续更新...

为了方便自己快速学习,整理了翻译版本,目前翻译的还不完善,后续会边学习边完善。 文档用于自己快速参考,会持续修正,能力有限,无法确保正确!!! 《The Internals of PostgreSQL 》 不是 《 PostgreSQL14 Internals 》…

Android 无签名系统 debug 版本APK push到设备引起的开机异常问题分析(zygote进程)

问题背景 前置操作: 替换原system/priv-app 目录下已有的应用包未未签名的debug版本,然后重启。 现象: 无法正常开机,卡在开机动画,并且pm没有起来,因为执行adb install 命令是返回“cmd: Cant find se…

深度学习推荐系统的工程实现

参考自《深度学习推荐系统》——王喆,用于学习和记录。 介绍 之前章节主要从理论和算法层面介绍了推荐系统的关键思想。但算法和模型终究只是“好酒”,还需要用合适的“容器”盛载才能呈现出最好的味道,这里的“容器”指的就是实现推荐系统…

attention 注意力机制 学习笔记-GPT2

注意力机制 这可能是比较核心的地方了。 gpt2 是一个decoder-only模型,也就是仅仅使用decoder层而没有encoder层。 decoder层中使用了masked-attention 来进行注意力计算。在看代码之前,先了解attention-forward的相关背景知识。 在普通的self-atten…

Java 内存区域详解

对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一…

FluentUI使用

首先向Qt Qml FluentUI组件库的作者zhuzichu520致敬! 一、源码下载地址: 1)GitHub - zhuzichu520/FluentUI: FluentUI for QML 2)GitCode - 全球开发者的开源社区,开源代码托管平台 二、Qt6下载地址: qt-online-i…

【UE5】在材质Custom写函数的方法

UE材质的Custom本身会构建为函数,所以并不能在Custom定义函数,但当然还是有办法的 总结一些在custom写函数的方法 常规办法 常规办法就是使用结构体作为函数使用 以一个Lerp功能函数演示 让我们看看写法: struct VolBlendFunc //定义结…

分享 pdf 转 word 的免费平台

背景 找了很多 pdf 转 word 的平台都骗进去要会员,终于找到一个真正免费的,遂分享。 网址 PDF转Word转换器 - 100%免费市面上最优质的PDF转Word转换器 - 免费且易于使用。无附加水印 - 快速将PDF转成Word。https://smallpdf.com/cn/pdf-to-word

【LeetCode】每日一题 2024_11_14 统计好节点的数目(图/树的 DFS)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:统计好节点的数目 代码与解题思路 先读题:题目要求我们找出好节点的数量,什么是好节点?“好节点的所有子节点的数量都是相同的”,拿示例一…

【模块化大作战】Webpack如何搞定CommonJS与ES6混战(3)

在前端开发中,模块化是一个重要的概念,不同的模块化标准有不同的特点和适用场景。webpack 同时支持 CommonJS 和 ES6 Module,因此需要理解它们在互操作时 webpack 是如何处理的。 同模块化标准 如果导出和导入使用的是同一种模块化标准&…

SystemVerilog学习笔记(十):进程/细粒度进程控制

进程 进程或线程是作为独立实体执行的任何代码片段。fork-join块创建并行运行的不同线程。在下面的图-1中,可以看到进程的类型和进程控制。 序号进程描述1.fork-join只有所有子线程执行完毕时,父线程才会执行。2.fork-join_any只有任何一个子线程执行完…

javascript用来干嘛的?赋予网站灵魂的语言

javascript用来干嘛的?赋予网站灵魂的语言 在互联网世界中,你所浏览的每一个网页,背后都有一群默默工作的代码在支撑着。而其中,JavaScript就像是一位技艺精湛的魔术师,它赋予了网页生命力,让原本静态的页…

Golang | Leetcode Golang题解之第553题最优除法

题目: 题解: func optimalDivision(nums []int) string {n : len(nums)if n 1 {return strconv.Itoa(nums[0])}if n 2 {return fmt.Sprintf("%d/%d", nums[0], nums[1])}ans : &strings.Builder{}ans.WriteString(fmt.Sprintf("%d…

宝塔 docker 部署onlyoffice 服务

1.宝塔安装docker,直接下载安装就行 2.docker拉取onlyoffice镜像 docker pull onlyoffice/documentserver:5.3.1.26 5.4或更高的版本已经解决了连接数限制方法的Bug 3.创建容器 docker run -d --name onlyoffice --restartalways -p 暴露端口号:80 onlyoffice/documentserv…

InternVL 多模态模型部署微调实践

目录 0 什么是MLLM 1 开发机创建与使用 2 LMDeploy部署 2.1 环境配置 2.2 LMDeploy基本用法介绍 2.3 网页应用部署体验 3 XTuner微调实践 3.1 环境配置 3.2.配置文件参数解读 3.3 开始微调 4.体验模型美食鉴赏能力 0 什么是MLLM 多模态大语言模型 ( Multimodal Larg…

pgSQL-timescaledb复制表出现的问题

今日在工作中,需要复制一张timescaledb表,pgAdmin上复制一直未成功,或者我找错位置了。 1.我使用Navicate连接pgSQL,连上后选中相应表,右键复制结构即可 2.复制结构后,到pgAdmin中,将对应表下的…

Docker:技术架构的演进之路

前言 技术架构是指在软件开发和系统构建中,为了满足业务需求和技术要求,对系统的整体结构、组件、接口、数据流以及技术选型等方面进行的详细设计和规划。它是软件开发过程中的重要组成部分,为开发团队提供了明确的指导和规范,确…

A029-基于Spring Boot的物流管理系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【flutter】flutter2升级到3.

文章目录 背景flutter2-3升级的修改之处界面效果其它 背景 以这个 https://github.com/aa286211636/Flutter_QQ 为例子, 升级下看看 flutter2-3升级的修改之处 flatButton变为TextButton设备屏幕尺寸获取: Screen.width(context)变为MediaQuery.of(context).size…

自由学习记录(21)

感觉反而 还复杂一点,关系并不纯粹,游戏里用的少...的确 是知道为什么游戏不用了 理解思想就可以了,实际操作也是动态的分析,硬套某种模式也不是怎么很合适 MVC的了解应该是差不多了,重点还是实际中的使用了 所以删了…