从零入手人工智能(5)—— 决策树

news2025/1/12 6:56:00

1.前言

在上一篇文章《从零入手人工智能(4)—— 逻辑回归》中讲述了逻辑回归这个分类算法,今天我们的主角是决策树。决策树和逻辑回归这两种算法都属于分类算法,以下是决策树和逻辑回归的相同点

分类任务:两者都是用于分类任务的算法。无论是决策树还是逻辑回归,它们的目标都是根据输入的特征(或变量)来预测样本的类别。这两种算法都接受一组特征作为输入,并输出一个类别标签。

预测类别:它们都可以预测样本属于哪个类别。无论是二分类问题还是多分类问题,决策树和逻辑回归都能够进行建模和预测。

处理特征:两者都可以处理多种类型的特征,包括数值型特征和类别型特征。

模型评估:两者都可以使用相同的评估指标来评估模型的性能,如准确率、召回率、F1分数、AUC-ROC等。
虽然决策树和逻辑回归有上述相同点,但它在仍然存在差异。决策树和逻辑回归最大的差异在于它们的模型算法原理不同决策树基于树形结构进行决策,通过一系列规则对数据进行分类。而逻辑回归使用逻辑函数(如sigmoid函数)对输入特征进行建模,将线性模型的输出转换为概率值,然后根据概率值判断样本所属的类别。
由于决策树和逻辑回归有着诸多相似之处,所以本文就不额外过多的讲解,直接通过一个入门程序和一个进阶实战程序展示决策树
在这里插入图片描述

2.入门程序

入门程序利用make_classification方法自动生成一组X和Y,其中X有4个特征。使用DecisionTreeClassifier方法建立一个决策树模型,训练模型后,提取模型特征,最后使用 plot_tree 函数可视化决策树的结构。
程序如下

import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.datasets import make_classification  
from sklearn.tree import DecisionTreeClassifier  
from sklearn.model_selection import train_test_split  
  
# 生成分类数据集  
X, y = make_classification(n_samples=1000, n_features=4,  
                           n_informative=2, n_redundant=0,  
                           random_state=0, shuffle=False)  
  
# 划分数据集为训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
  
# 创建决策树分类器  
clf = DecisionTreeClassifier(random_state=42)  
  
# 训练模型  
clf.fit(X_train, y_train)  
  
# 获取特征重要性  
importances = clf.feature_importances_  
indices = np.argsort(importances)[::-1]  
  
# 打印特征排名  
print("Feature ranking:")  
  
for f in range(X.shape[1]):  
    print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))  
  
# 绘制特征重要性  
plt.figure()  
plt.title("Feature importances")  
plt.bar(range(X.shape[1]), importances[indices], align="center")  
plt.xticks(range(X.shape[1]), [f"Feature {i+1}" for i in indices])  
plt.xlim([-1, X.shape[1]])  
plt.show()  
  
# 使用 plot_tree 函数可视化决策树的结构  
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(14, 10), dpi=80)  
plot_tree(clf,   
          feature_names=['feature_{}'.format(i) for i in range(X.shape[1])],    
          class_names=['class_0', 'class_1'],  
          filled=True, rounded=True,  
          ax=axes)  
plt.show()

程序运行结果如下在这里插入图片描述
在这里插入图片描述

3.进阶实战

本实战程序的目的是:根据气象环境数据预测是否会下雨。利用数据表macau_weather.csv中的数据进行训练和测试。
(希望获取源码和测试数据的朋友请在评论区留言)

step1

读取macau_weather.csv中的数据,并可视化数据,根据可视化结果可知数据表中有以下数:

num、date、air_pressure、high_tem、aver_tem、low_tem、 humidity、sunlight_time 、wind_direction、wind_speed、rain_accum

其中rain_accum为目标值(标签:有雨、无雨),以下七个数据为特征变量:

air_pressure、high_tem、aver_tem、low_tem 、humidity、sunlight_time 、wind_direction、wind_speed

在这里插入图片描述

step2

数据表中的一共有426组数据(来源于426天的气象数据记录),检查每组数据是否完整,根据检查结果可知有0.7%的数据存在空缺
在这里插入图片描述

step3

将数据表中的rain_accum转换成1和0,0代表无雨1代表有雨。
在这里插入图片描述

step4

使用DecisionTreeClassifier方法建立决策树模型,利用训练集数据训练模型。
在这里插入图片描述

step5

利用模型和测试集数据,测试模型准确性,并可视化结果,根据可视化图标可知模型预测的准确性达到了87.1%。
在这里插入图片描述
在这里插入图片描述
希望获取源码和测试数据的朋友请在评论区留言

创作不易希望朋友们点赞,转发,评论,关注!
您的点赞,转发,评论,关注将是我持续更新的动力!
CSDN:https://blog.csdn.net/li_man_man_man
今日头条:https://www.toutiao.com/article/7149576260891443724

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

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

相关文章

算法体系-23 第二十三节:暴力递归到动态规划(五)

一 求K次打击之后,英雄把怪兽砍死的概率 1.1 描述 给定3个参数,N,M,K 怪兽有N滴血,等着英雄来砍自己 英雄每一次打击,都会让怪兽流失[0~M]的血量 到底流失多少?每一次在[0~M]上等概率的获得一个…

指令调度基本概念

概述 为了提高处理器执行指令的并行度,处理器将计算机指令处理过程拆分为多个阶段,并通过多个硬件处理单元,将不同指令处理的前后阶段重叠并行执行,形成流水线(pipeline) 处理器的流水线结构是处理器微架构最基本的要素&#xf…

SpringBoot+ENC实现密钥加密及使用原理

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBootENC实现密钥加密及使用原理 ⏱️ 创作时间: 202…

测试测量-DMM直流精度

测试测量-DMM直流精度 最近去面试,发现了自己许多不足,比如我从未考虑过万用表准或者不准,或者万用表有多准? 在过去的实验室中,常用的DMM有KEYSIGHT 34401A以及 KEITHLEY THD2015,就以这两台为例&#x…

为什么 JakeWharton 建议:App 只要用到一个 Activity ?

我们来看看这条回答都提到了哪些内容,对 Activity 和 Fragment 之间的爱恨情仇有何独到的见解,凭什么能得到 JakeWharton 本尊的青睐有加。 因为 Activity 是一个程序入口。你可以将其视为 app 的一个 main 函数。站在用户的立场上,通常你进入…

智慧校园综合门户有哪些特点?

智慧校园的门户系统,作为整个智慧校园架构的门户窗口,扮演着至关重要的角色。它如同一座桥梁,将校园内的各种信息资源、应用服务以及管理功能紧密相连,为师生、家长及管理人员提供了一个集中访问的便捷通道。智慧校园门户的设计理…

【LocalAI】(13):LocalAI最新版本支持Stable diffusion 3,20亿参数图像更加细腻了,可以继续研究下

最新版本v2.17.1 https://github.com/mudler/LocalAI/releases Stable diffusion 3 You can use Stable diffusion 3 by installing the model in the gallery (stable-diffusion-3-medium) or by placing this YAML file in the model folder: Stable Diffusion 3 Medium 正…

Android,RPC原理,C语言实现Binder跨进程通信Demo

RPC原理图 Binder C语言层的Demo演示 新建目录 把两个文件拷贝到我们的Demo下面 1.binder_server.c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <linux/types.h> #include <stdbool.h> #include <string.h> #…

【FreeRTOS】任务管理与调度

文章目录 调度&#xff1a;总结 调度&#xff1a; 相同优先级的任务轮流运行最高优先级的任务先运行 可以得出结论如下&#xff1a; a 高优先级的任务在运行&#xff0c;未执行完&#xff0c;更低优先级的任务无法运行b 一旦高优先级任务就绪&#xff0c;它会马上运行&#xf…

AI大模型企业应用实战(14)-langchain的Embedding

1 安装依赖 ! pip install --upgrade langchain ! pip install --upgrade openai0.27.8 ! pip install -U langchain-openai ! pip show openai ! pip show langchain ! pip show langchain-openai 2 Embed_documents # 1. 导入所需的库 from langchain_openai import Open…

阿里云服务器618没想到这么便宜,买早了!

2年前&#xff0c;我买了个服务器&#xff0c;租用服务器&#xff08;ECS5&#xff09;和网络宽带&#xff08;1M&#xff09;&#xff0c;可以说是非常非常低的配置了。 当时5年的折扣力度最大&#xff0c;但是打完折后&#xff0c;价格依然要近3000多元。 最近看到阿里云618活…

C++风流和MATLAB | Python | CUDA 库埃特流泊肃叶流薄膜流体

&#x1f3af;要点 &#x1f3af;无滑移速度边界条件&#xff1a;&#x1f58a;反弹法计算库埃特流、泊肃叶流 | &#x1f58a;湿节点法计算库埃特流、泊肃叶流 | &#x1f3af;力模型&#xff1a;&#x1f58a;反弹法和不同的格子玻尔兹曼体力模型计算泊肃叶流 | &#x1f58…

winmail添加gmail和QQ邮箱(现已更新为outlook mail)

想在windows自带的邮件桌面应用里&#xff0c;不仅能访问outlook邮件&#xff0c;也能访问gmail邮件和QQ邮件的方法。 参考文章&#xff1a; Windows 10 的邮件怎么添加并同步 Gmail&#xff1f;​www.zhihu.com/question/53079836/answer/147669935?utm_psn178781450843941…

预训练是什么?

预训练是什么&#xff1f; 图像领域的预训练 在介绍图像领域的预训练之前&#xff0c;我们首先介绍下卷积神经网络&#xff08;CNN&#xff09;&#xff0c;CNN 一般用于图片分类任务&#xff0c;并且CNN 由多个层级结构组成&#xff0c;不同层学到的图像特征也不同&#xff…

【LLM之KG】CoK论文阅读笔记

研究背景 大规模语言模型&#xff08;LLMs&#xff09;在许多自然语言处理&#xff08;NLP&#xff09;任务中取得了显著进展&#xff0c;特别是在零样本/少样本学习&#xff08;In-Context Learning, ICL&#xff09;方面。ICL不需要更新模型参数&#xff0c;只需利用几个标注…

谁说串口通信波特率越高越好?

在电子世界里&#xff0c;串口通信就像是电子设备之间的“悄悄话”&#xff0c;它们通过串行数据传输来交换信息。但你知道吗&#xff1f;串口通信的波特率并不是越高越好&#xff0c;这事儿得好好聊聊。 1.什么是串口通信&#xff1f; 串口通信&#xff0c;就像它的名字一样&a…

【转型指南】从软件测试到技术多面手

★ 导言 小艺是一位毕业于985的计算机硕士&#xff0c;工作多年&#xff0c;现在某大厂从事软件测试方面的管理工作。目前在工作中游刃有余&#xff0c;但面对技术的飞速变化和职业发展的不确定性&#xff0c;还是难免焦虑&#xff0c;正在积极思考如何进一步提升自己&#xff…

谈谈面试常考题:懒加载,防抖,节流(方法实现详解)

前言 最近在学习中确实收获了挺多东西&#xff0c;其中我觉得有必要拿来进行分享一下的就是懒加载了&#xff0c;还有相关的防抖和节流。因为在浏览器中这些都是属于很常见的性能优化&#xff0c;面试也是常考题。话不多说&#xff0c;速度发车。 什么是懒加载&#xff1f;懒…

关于Pytorch转换为MindSpore的一点建议

一、事先准备 必须要对Mindspore有一些了解&#xff0c;因为这个框架确实有些和其它流程不一样的地方&#xff0c;比如算子计算、训练过程中的自动微分&#xff0c;所以这两个课程要好好过一遍&#xff0c;官网介绍文档最好也要过一遍 1、零基础Mindspore&#xff1a;https://…