11.14 机器学习-朴素贝叶斯+决策树算法

news2024/11/20 23:38:38

# 贝叶斯底层逻辑 一个数据有可能是几种 结果 选一个概率最高的结果赋给它

# 朴素贝叶斯 假设各个特征之间全部独立 P(A*B*C*D*E)=P(A)*P(B)*P(C)*P(D)*P(E)

# A是特征向量 B是结果

# P(B|A)=P(A|B)*P(B)/P(A)

# P(A|X1,X2,X3,X4,X5)=P(X1,X2,X3,X4,X5|A)*P(A)/P(X1,X2,X3,X4,X5)

# 由于特征之间独立

# P(X1,X2,X3,X4,X5|A)=P(X1|A)*P(X2|A)*P(X3|A)*P(X4|A)*P(X5|A)*P(A)/(P(X1)*P(X2)*P(X3)*P(X4)*P(X5)) #这个式字就可以 用数据集计算出来了

# 拉普拉斯平滑系数 为了防止0概率的出现 这样即使 x2/A一个都没有也不会出现0概率的情况 这个概率要拿去乘的

# P(X2|A)= A发生的概率下x2发生的数量+1 / A发生的数量 + 有多少种X

# API

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.naive_bayes import MultinomialNB

import joblib

import pandas as pd

from scipy.stats import mode

def naive_bayes1():

    # sklearn.naive_bayes.MultinomialNB()

    # estimator.fit(x_train, y_train)

    # y_predict = estimator.predict(x_test)

    X,y=load_iris(return_X_y=True)

    X_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,random_state=666,train_size=0.7)

    # 创建 朴素贝叶斯 预估器

    NB1=MultinomialNB()

    NB1.fit(X_train,y_train)

    score=NB1.score(X_test,y_test)

    print(score)

    # 保存模型

    # joblib.dump(NB1,"assets/model/NB_iris.pkl")

    flow1=[[5,3,2,4],[3,6,2,1],[6,2,4,2]]

    res=NB1.predict(flow1)

    print(load_iris().target_names[res])

    pass

def naive_bayes2():

    df1 = pd.read_csv("assets/csv/titanic.csv")

    x = df1[["age", "sex", "pclass"]]

    y = df1["survived"]

    # 计算 age 列的众数

    age_mode = mode(x["age"].dropna())[0]  # 使用 dropna() 去掉 NaN 值后计算众数

    # print(age_mode)

    # 用众数填充 age 列中的 NaN 值

    x["age"].fillna(age_mode, inplace=True)

    # 处理 性别字符串变为 数字

    x["sex"] = x["sex"].map({"female": 1, "male": 0}) #方式1

    # # 方式2

    # x2=x["sex"]=="female"

    # x["sex"]=x2

    # 处理 pclass字符串变为 数字

    x["pclass"] = x["pclass"].map({"1st": 1, "2nd": 2,"3rd":3})

    X_train,X_test,y_train,y_test=train_test_split(x,y,stratify=y,random_state=666,train_size=0.7)

    # 创建 朴素贝叶斯 预估器

    NB1=MultinomialNB()

    NB1.fit(X_train,y_train)

    score=NB1.score(X_test,y_test)

    print(score)

    # print(y)

if __name__=="__main__":

    # naive_bayes1()

    naive_bayes2()

    pass

# 1、决策节点

# 通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向。

# 2、叶子节点

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

# 3、决策树的深度

# 所有节点的最大层次数。

# 决策树具有一定的层次结构,根节点的层次数定为0,从下面开始每一层子节点层次数增加

# 4、决策树优点:

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

#  5、 决策树缺点:

# ​      容易产生过拟合,所以不要把深度调整太大了。

# 基于信息增益决策树的建立 根据信息增益决定先判断谁 信息增益高的先判断

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

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

# 算结果的信息熵 每个特征的信息增益=结果的信息熵 - 本身的信息熵

#  基于基尼指数决策树的建立(了解)

# API

# class sklearn.tree.DecisionTreeClassifier(....)

# 参数:

# criterion "gini" "entropy” 默认为="gini"

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

#   当criterion取值为"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.tree import DecisionTreeClassifier,export_graphviz

from sklearn.datasets import load_iris

from sklearn.preprocessing import StandardScaler

from sklearn.model_selection import train_test_split

def decision_tree_classifier():

    model1=DecisionTreeClassifier(criterion="entropy",max_depth=2) # criterion 构建决策树的方式 entropy 为信息增益方式 默认为gini方式 max_depth决策树的深度 默认为2

    X,y=load_iris(return_X_y=True)

    X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.7,random_state=666)

    sacler1=StandardScaler()

    x_stand_train=sacler1.fit_transform(X_train)

    x_stand_test=sacler1.transform(X_test)

    model1.fit(x_stand_train,y_train)

    score= model1.score(x_stand_test,y_test)

    print(score)

    # 决策树可视化

    export_graphviz(model1,feature_names=load_iris().feature_names,out_file="assets/dot/iris_tree.dot")

   



 

if __name__=="__main__":

    decision_tree_classifier()

    pass

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

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

相关文章

STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)

配置EXIT外部中断其实就是把GPIO刀NVIC的各个外设配置好 第一步:配置RCC,把我们涉及到的外设的时钟都打开 (此处EXTI是默认打开的,而NVIC是内核外设无需配置) 第二步:配置GPIO,选择端口为输入模式 第三…

pytest结合allure做接口自动化

这是一个采用pytest框架,结合allure完成接口自动化测试的项目,最后采用allure生成直观美观的测试报告,由于添加了allure的特性,使得测试报告覆盖的内容更全面和阅读起来更方便。 1. 使用pytest构建测试框架,首先配置好…

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令,生成自签名证书和私钥文件: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509:生成自签名证书。…

Linux网络:守护进程

Linux网络:守护进程 会话进程组会话终端 守护进程setsiddaemon 在创建一个网络服务后,往往这个服务进程是一直运行的。但是对于大部分进程来说,如果退出终端,这个终端上创建的所有进程都会退出,这就导致进程的生命周期…

5.4.2-1 编写Java程序在HDFS上创建文件

本次实战涉及使用Java操作Hadoop HDFS,包括创建文件、判断文件存在性及异常处理。通过手动添加依赖、启动HDFS服务,成功在HDFS上创建和检查文件。进一步探索了文件操作的最佳实践,如检查文件存在性以避免重复创建,以及处理HDFS安全…

十六.SpringCloudAlibaba极简入门-整合Grpc代替OpenFeign

前言 他来了他来了,停了快2个月了终于又开始更新文章啦,这次带来的绝对是干货!!!。由于公司项目进行重构的时候考虑到,OpenFeign做为服务通信组件在高并发情况下有一定的性能瓶颈,所以将其替换…

【pytest】pytest注解使用指南

前言:在 pytest 测试框架中,注解(通常称为装饰器)用于为测试函数、类或方法提供额外的信息或元数据。这些装饰器可以影响测试的执行方式、报告方式以及测试的组织结构。pytest 提供了多种内置的装饰器,以及通过插件扩展…

百度AI人脸检测与对比

1.注册账号 打开网站 https://ai.baidu.com/ &#xff0c;注册百度账号并登录 2.创建应用 3.技术文档 https://ai.baidu.com/ai-doc/FACE/yk37c1u4t 4.Spring Boot简单集成测试 pom.xml 配置&#xff1a; <!--百度AI--> <dependency> <groupId>com.baidu.…

A040-基于springboot的智能停车计费系统设计与实现

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

力扣 LeetCode 222. 完全二叉树的节点个数(Day7:二叉树)

解题思路&#xff1a; 解法一&#xff1a;普通二叉树解法 使用后序遍历 有一行的精简版代码但不利于理解采用的哪一种遍历方式 解法二&#xff1a;利用上完全二叉树的特点 一个指针left&#xff0c;一个指针right left一直向左遍历&#xff0c;right一直向右遍历&#xff…

hhdb数据库介绍(9-21)

计算节点参数说明 checkClusterBeforeDnSwitch 参数说明&#xff1a; PropertyValue参数值checkClusterBeforeDnSwitch是否可见否参数说明集群模式下触发数据节点高可用切换时&#xff0c;是否先判断集群所有成员正常再进行数据节点切换默认值falseReload是否生效是 参数设…

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://baiduworld.baidu.com 首先&#xff0c;跟大家分享一张图&#xff0c;这个是我们目前大模型应用落地的场景分布。可以看到&#xff0c;大模型…

得物彩虹桥架构演进之路-负载均衡篇

文 / 新一 一、前言 一年一更的彩虹桥系列又来了&#xff0c;在前面两期我们分享了在稳定性和性能2个层面的一些演进&优化思路。近期我们针对彩虹桥 Proxy 负载均衡层面的架构做了一次升级&#xff0c;目前新架构已经部署完成&#xff0c;生产环境正在逐步升级中&#xf…

C++ lambda(匿名函数)捕获自己

今天写算法题时无意间遇到一种情况,我的深度优先遍历函数要在函数内调用自身,如果是普通函数没什么问题,但如果是 匿名函数 的话会有一些问题,甚至问ai,ai也没打上来,上网搜了半天,才找到这个的解答,故作此文 以费契那波数列为例 // 普通函数式 int fun(int pos) {if (pos …

解决Spring Boot整合Redis时的连接问题

前言 在使用Spring Boot整合Redis的过程中&#xff0c;经常会遇到连接问题&#xff0c;尤其是当Redis服务部署在远程服务器上时。 问题描述 当你尝试连接到Redis服务器时&#xff0c;可能会遇到以下错误&#xff1a; org.springframework.data.redis.connection.PoolExcept…

vue3 路由守卫

在Vue 3中&#xff0c;路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理&#xff0c;比如权限验证、数据预取等&#xff0c;从而增强应用的安全性和效率。路由守卫分为几种不同的类型&#xff0c;每种类型的守卫都有其特定的应用场景。 其实路…

向潜在安全信息和事件管理 SIEM 提供商提出的六个问题

收集和解读数据洞察以制定可用的解决方案是强大网络安全策略的基础。然而&#xff0c;组织正淹没在数据中&#xff0c;这使得这项任务变得复杂。 传统的安全信息和事件管理 ( SIEM ) 工具是组织尝试使用的一种方法&#xff0c;但由于成本、资源和可扩展性等几个原因&#xff0…

星海智算:Stable Diffusion3.5镜像教程

Stable Diffusion3.5 模型介绍 Stable Diffusion 3.5是由Stability AI推出的最新图像生成模型&#xff0c;它是Stable Diffusion系列中的一个重大升级。这个模型家族包括三个版本&#xff0c;分别是Stable Diffusion 3.5 Large、Stable Diffusion 3.5 Large Turbo和Stable Dif…

STM32电源管理—实现低功耗

注&#xff1a; 本文是学习野火的指南针开发板过程的学习笔记&#xff0c;可能有误&#xff0c;详细请看B站野火官方配套视频教程&#xff08;这个教程真的讲的很详细&#xff0c;请给官方三连吧&#xff09; 在响应绿色发展的同时&#xff0c;在很多应用场合中都对电子设备的功…

3D Gaussian Splatting 代码层理解之Part2

现在让我们来谈谈高斯分布。我们已经在Part1介绍了如何根据相机的位置获取 3D 点并将其转换为 2D。在本文中,我们将继续处理高斯泼溅的高斯部分,这里用到的是代码库 GitHub 中part2。 我们在这里要做的一个小改动是,我们将使用透视投影,它利用与上一篇文章中所示的内参矩阵…