使用Python的Scikit-Learn进行决策树建模和可视化:以隐形眼镜数据集为例
决策树是一种强大的机器学习算法,它在数据挖掘和模式识别中被广泛应用。决策树模型可以帮助我们理解数据中的模式和规则,并做出预测。在本文中,我们将介绍如何使用Python的Scikit-Learn库构建决策树模型,并使用Graphviz进行可视化。我们将以一个实际的示例数据集(lenses.txt)为基础,来演示整个过程。
**准备工作**
首先,确保你已经安装了Scikit-Learn和Graphviz库。你可以使用以下命令来安装它们:
pip install scikit-learn
pip install graphviz
此外,我们需要一个数据集来演示决策树的建模和可视化。我们将使用一个名为"lenses.txt"的示例数据集,该数据集描述了一组隐形眼镜的特征,并预测了应该使用哪种类型的隐形眼镜。
**数据集介绍**
首先,让我们来了解一下"lenses.txt"数据集。这个数据集包含以下特征列:
1. `age`:患者的年龄。
2. `prescription`:视力矫正处方的类型。
3. `astigmatic`:是否患者患有散光。
4. `tear_rate`:眼泪生产率。
还有一个目标列:
- `class`:决定了应该使用哪种类型的隐形眼镜(硬材质、软材质、不适用)。
**数据预处理**
在开始建模之前,我们需要对数据进行预处理。具体地,我们需要将类别特征转换为数值特征,以便可以用于决策树模型。下面是数据预处理的代码:
import pandas as pd# 读取lenses.txt文件并设置列名
data = pd.read_csv("lenses.txt", sep="\t", header=None)
data.columns = ["age", "prescription", "astigmatic", "tear_rate", "class"]# 将类别特征转换为数值
data = data.apply(lambda x: pd.Categorical(x).codes if x.dtype == "object" else x)# 转换特征列名为字符串
data.columns = data.columns.astype(str)# 分割数据为特征和目标
X = data.drop("class", axis=1)
y = data["class"]
现在,我们已经准备好数据,并将其转换为适合决策树建模的格式。
**构建决策树模型**
接下来,让我们使用Scikit-Learn创建决策树模型。我们将使用`DecisionTreeClassifier`类来构建分类器。
from sklearn.tree import DecisionTreeClassifier# 创建决策树模型
model = DecisionTreeClassifier()
**划分训练集和测试集**
在训练模型之前,我们需要将数据集划分成训练集和测试集。这有助于评估模型的性能。通常,我们将大部分数据用于训练,一小部分用于测试。
from sklearn.model_selection import train_test_split# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
**训练决策树模型**
现在,我们可以使用训练数据来训练决策树模型。
# 训练模型
model.fit(X_train, y_train)
模型已经训练完成,接下来我们将评估它的性能。
**模型评估**
在评估模型之前,让我们使用测试数据来进行预测,并计算模型的准确度。
from sklearn.metrics import accuracy_score# 预测
y_pred = model.predict(X_test)# 计算模型准确度
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确度: {accuracy}")
模型的准确度告诉我们模型在测试数据上的性能。在这种情况下,我们使用准确度来衡量模型的性能,但根据具体问题,还可以使用其他指标。
**决策树的可视化**
决策树模型是一种非常直观的机器学习模型,我们可以将其可视化以更好地理解其决策过程。为了可视化决策树,我们将使用Graphviz工具。首先,我们需要生成决策树的可视化图形。
from sklearn.tree import export_graphviz
import graphviz# 可视化决策树
dot_data = export_graphviz(model,out_file=None,feature_names=data.columns[:-1],class_names=data["class"].unique().astype(str),filled=True,rounded=True,special_characters=True,
)graph = graphviz.Source(dot_data)
上述代码生成了决策树的可视化图形,其中包含决策树的节点和分支。接下来,我们可以将图形保存为文件或在默认的图形查看器中打开它。
# 将可视化图形保存为文件
graph.render("lenses_decision_tree")# 在默认的图形查看器中打开可视化图形
graph.view()
这样,我们就成功生成了决策树模型的可视化图形。您可以使用默认的PDF查看器打开生成的图形文件,并
深入了解模型的决策过程。
**保存和分享决策树图**
如果您希望分享您生成的决策树图形,您可以将图形文件发送给他人。这使得您可以轻松与团队成员或同事共享模型的可视化结果,以帮助他们理解模型的工作原理。
**总结**
在本文中,我们介绍了如何使用Python的Scikit-Learn库来构建决策树模型,并使用Graphviz进行可视化。我们从数据准备开始,将类别特征转换为数值特征,然后构建、训练和评估决策树模型。最后,我们演示了如何将模型的决策过程可视化,并将结果保存和分享。
决策树是一种强大的机器学习工具,它可以用于分类和回归问题。通过可视化决策树,我们可以更好地理解模型的决策过程,这对于解释模型和与他人共享结果非常有帮助。
这篇文章详细介绍了如何使用Scikit-Learn构建和可视化决策树模型。希望这个指南对您理解决策树算法和其应用有所帮助。祝您在探索机器学习和数据科学的旅程中取得成功!
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, export_graphviz
import graphviz
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 读取lenses.txt文件并设置列名
data = pd.read_csv("lenses.txt", sep="\t", header=None)
data.columns = ["age", "prescription", "astigmatic", "tear_rate", "class"]# 将类别特征转换为数值
data = data.apply(lambda x: pd.Categorical(x).codes if x.dtype == "object" else x)# 转换特征列名为字符串
data.columns = data.columns.astype(str)# 分割数据为特征和目标
X = data.drop("class", axis=1)
y = data["class"]# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建决策树模型
model = DecisionTreeClassifier()# 训练模型
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 计算模型准确度
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确度: {accuracy}")# 可视化决策树
dot_data = export_graphviz(model,out_file=None,feature_names=data.columns[:-1],class_names=data["class"].unique().astype(str),filled=True,rounded=True,special_characters=True,
)graph = graphviz.Source(dot_data)
graph.render("lenses_decision_tree") # 将可视化图形保存为文件
graph.view() # 在默认的图形查看器中打开可视化图形
相关文章:
使用Python的Scikit-Learn进行决策树建模和可视化:以隐形眼镜数据集为例
决策树是一种强大的机器学习算法,它在数据挖掘和模式识别中被广泛应用。决策树模型可以帮助我们理解数据中的模式和规则,并做出预测。在本文中,我们将介绍如何使用Python的Scikit-Learn库构建决策树模型,并使用Graphviz进行可视化…...
开源软件:释放创新的力量,改变数字世界的游戏规则
在充满活力的技术领域,创新是至高无上的,有一种方法已获得显著的吸引力——开源软件。开源软件凭借其透明、协作和无限可能性的精神,彻底改变了我们开发、共享和定制应用程序的方式。从操作系统到数据分析工具,其影响跨越了多个领…...
【QT】鼠标常用事件
新建项目 加标签控件 当鼠标进去,显示【鼠标进入】,离开时显示【鼠标离开】 将QLable提升成自己的控件,然后再去捕获 添加文件 改继承的类名 提升类 同一个父类,可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…...
LuatOS-SOC接口文档(air780E)--mlx90640 - 红外测温(MLX90640)
常量# 常量 类型 解释 mlx90640.FPS1HZ number FPS1HZ mlx90640.FPS2HZ number FPS2HZ mlx90640.FPS4HZ number FPS4HZ mlx90640.FPS8HZ number FPS8HZ mlx90640.FPS16HZ number FPS16HZ mlx90640.FPS32HZ number FPS32HZ mlx90640.FPS64HZ number FPS6…...
java连接本地数据库可以简写为///
java连接数据库配置文件写为: server:port: 8091 spring:application:name: user-managerdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/user?serverTimezoneAsia/Shanghai&characterEncodingutf-8username: root…...
基于springboot漫画动漫网站
基于springbootvue漫画动漫网站 摘要 基于Spring Boot的漫画动漫网站是一个精彩的项目,它结合了现代Web开发技术和漫画爱好者的热情。这个网站的目标是为用户提供一个便捷的平台,让他们能够欣赏各种漫画和动漫作品,与其他爱好者分享他们的兴趣…...
autoFac 生命周期 试验
1.概述 autoFac的生命周期 序号名称说明1InstancePerDependency每次请求都创建一个新的对象2InstancePerLifetimeScope同一个Lifetime生成的对象是同一个实例3SingleInstance每次都用同一个对象 2.注 InstancePerLifetimeScope 同一个Lifetime生成的对象是同一个实例&#x…...
foreach、for in 和for of的区别?
forEach,for...in 和 for...of 是 JavaScript 中用于遍历数据的三种不同的结构。它们在遍历数组、对象和可迭代对象(如 Set 和 Map)时非常有用。尽管它们都可以用于循环遍历,但它们之间存在一些重要的区别: forEach&a…...
【Effective C++】条款45: 运用成员函数模板接受所有兼容的类型
假设有如下继承结构: class Top{}; class Middle: public Top{}; class Bottom: public Middle{};public继承意味着is-a关系,所有的基类都是派生类,但反之则不是,例如所有的学生都是人,但不是所有的人都是学生. 派生类到基类的指针可以直接隐式转换 Top* pt1 new Middle; T…...
WSL1 安装 debian xfce 用xrdp 导入远程桌面
凑合能用 晃晃行 晃晃不行 而且比较卡 还经常报崩溃 sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils apt install locales -y 安装过完应该会提示设置locales,如果安装完之后想要更改相关设置,可以使用如下命令重新设置loca…...
WPF RelativeSource属性-目标对象类型易错
上一篇转载了RelativeSource的三种用法,其中第二种用法较常见,这里记录一下项目中曾经发生错误的地方,以防自己哪天忘记了,又犯了同样错误—WPF RelativeSource属性-CSDN博客 先回顾一下: 控件关联其父级容器的属性—…...
Java while 和do while 循环
循环是程序中的重要流程结构之一。循环语句能够使程序代码重复执行,适用于需要重复一段代码直到满足特定条件为止的情况。 所有流行的编程语言中都有循环语句。Java 中采用的循环语句与C语言中的循环语句相似,主要有 while、do-while 和 for。 另外 Ja…...
应用软件安全编程--03净化传递给 Runtime.exec() 方法的非受信数据
每个 Java 应用都有一个 Runtime 类的实例, 一般需要使用 shell 时调用它,从而可以在 POSIX 中 使用/bin/sh 或者在Windows 平台中使用cmd.exe。 当参数中包含以空格、双引号或者其他以一/开头 的用来表示分支的字符时,就可能发生参数注入攻…...
uniapp阻止冒泡的方法,点击事件嵌套点击事件,怎么阻止同时触发
uniapp阻止冒泡的方法 当我们遇到点击事件嵌套点击事件的时候,点击里边的事件,外边的也会跟着触发该怎么办? 起初我尝试用了css里的修改z-index属性的方法,把里边的<view>标签放在上边,结果两个事件还是同时触发…...
【云原生基础】了解云原生,什么是云原生?
📑前言 本文主要讲了云原生的基本概念和原则的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句&#x…...
Android.bp探究
有时不知道Android.bp要咋写,特意看了下源码: ./build/soong/androidmk/androidmk/android.go 简单的Android.bp的模板是下面这个样子: [module type] {name: "[name value]",[property1 name]:"[property1 val…...
【LeetCode】415 字符串相加
415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 示例 1:…...
【RP-RV1126】配置一套简单的板级配置
文章目录 官方配置新建一套新配置新建板级pro-liefyuan-rv1126.mk配置文件新建一个Buildroot的defconfigs文件 吐槽:RP-RV1126 的SDK奇怪的地方make ARCHarm xxx_defconfig 生成的.config文件位置不一样savedefconfig命令直接替换原配置文件坑爹的地方 Buildroot上增…...
解决uniapp的video标签和transition属性使用时出现错位的问题
template:三个视频都每个占满屏幕,点击按钮滚动最外层bgBox元素, style: 想要加上动画过渡效果: 这是显示第一个视频: 点按钮向上滑动滚动到第二个视频时: 视频错位了 ,因为视频消失又出现的时候…...
电脑校园杂志电脑校园杂志社电脑校园编辑部2023年第9期目录
智慧校园 基于vue.js的“微校园”APP设计 吴秋伟 周慧 董锐 李仙云 余维 邓巧平 彭微1-3 探析AIGC对网络安全的革新:挑战与机遇共存 康良成 张朋4-6 文本信息自动摘要技术综述 滕宇飞7-9《电脑校园》投稿:cn7kantougao163.com 区块链应用于图书馆服务的策…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
