机器学习算法应用——CART决策树

news/2024/6/16 15:22:21

CART决策树(4-2)

CART(Classification and Regression Trees)决策树是一种常用的机器学习算法,它既可以用于分类问题,也可以用于回归问题。CART决策树的主要原理是通过递归地将数据集划分为两个子集来构建决策树。在分类问题中,CART决策树通过选择一个能够最大化分裂后各个子集纯度提升的特征进行分裂,从而将数据划分为不同的类别。

CART决策树的构建过程包括以下几个步骤:

  1. 特征选择:从数据集中选择一个最优特征,用于划分数据集。最优特征的选择基于某种准则,如基尼指数(Gini Index)或信息增益(Information Gain)。
  2. 决策树生成:根据选定的最优特征,将数据集划分为两个子集,并递归地在每个子集上重复上述过程,直到满足停止条件(如子集大小小于某个阈值、所有样本属于同一类别等)。
  3. 剪枝:为了避免过拟合,可以对生成的决策树进行剪枝操作,即删除一些子树或叶子节点,以提高模型的泛化能力。

CART决策树的优点包括:

  1. 计算简单,易于理解,可解释性强。
  2. 不需要预处理,不需要提前归一化,可以处理缺失值和异常值。
  3. 既可以处理离散值也可以处理连续值。
  4. 既可以用于分类问题,也可以用于回归问题。

然而,CART决策树也存在一些缺点:

  1. 不支持在线学习,当有新样本产生时,需要重新构建决策树模型。
  2. 容易出现过拟合现象,生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却未必有很好的分类能力。
  3. 对于一些复杂的关系,如异或关系,CART决策树可能难以学习。

CART决策树在许多领域都有广泛的应用,如推荐系统中的商品推荐模型、金融风控中的信用评分和欺诈检测、医疗诊断中的疾病预测等。此外,CART决策树还可以用于社交媒体情感分析等领域。

  1. 数据

使用Universal Bank数据集。

示例:

        

IDAgeExperienceIncomeZIP CodeFamilyCCAvgEducationMortgagePersonal LoanSecurities AccountCD AccountOnlineCreditCard
1251499110741.61001000
24519349008931.51001000
339151194720111000000
43591009411212.72000000
53584591330412000001
63713299212140.4215500010
75327729171121.52000010
85024229394310.33000001
93510819008930.6210400010
103491809302318.93010000
1165391059471042.43000000
12295459027730.12000010
1348231149310623.83001000
145932409492042.52000010
15674111291741121001000
166030229505411.53000011
1738141309501044.7313410000
184218819430542.41000000
1946211939160428.13010000
205528219472010.52001001
215631259401540.9211100010
2257276390095323000010
23295629027711.2126000010
244418439132020.7116301000
2536111529552123.9115900001
264319299430530.519700010
274016839506440.23000000
2846201589006412.41000011
295630489453912.23000011
3038131199410413.32010111
315935359310611.2312200010
3240162994117122000010
335328419480120.6319300000
34306189133030.93000000
35315509403541.83000010
364824819264730.71000000
3759351219472012.91000001
385125719581411.4319800000
39421814194114353011110
403813809411540.7328500010
415732849267231.63001000
42349609412232.31000000
433271329001941.1241210010
443915459561610.71000010
4546201049406515.71000011
465731529472042.51000001
473914439501430.7215300010
4837121949138040.2321111111
495626819574724.53000001
504016499237311.81000001
5132889209340.72001010
5261371319472012.91000010
53306729400510.1120700000
5450261909024532.1324010010
55295449581910.23000010
56411713994022281000010
575530299400530.12001110
5856311319561621.23010000
59282939406520.21000000
603151889132024.5145500000
614924399040431.72001010
6247211259340715.7111201000
6342182290089111000000
6442173294523402000010
6547231059002423.31000000
6659351319136013.81000011
6762361059567022.8133600000
685323459512342313201000
694721609340732.11000011
705329209004540.21000010
7142181159133513.51000001
7253296993907412000010
73442013092007151000001
7441168594606143000011
752831359461123.31000001
763171359490143.82010111

注意:数据集中的编号(ID)和邮政编码(ZIP CODE)特征因为在分类模型中无意义,所以在数据预处理阶段将它们删除。

  1. 使用CART决策树对数据进行分类
  1. 使用留出法划分数据集,训练集:测试集为7:3。
# 使用留出法划分数据集,训练集:测试集为7:3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  1. 使用CART决策树对训练集进行训练
# 使用CART决策树对训练集进行训练,深度限制为10层
model = DecisionTreeClassifier(max_depth=10)
model.fit(X_train, y_train)

决策树的深度限制为10层,max_depth=10。

  1. 使用训练好的模型对测试集进行预测并输出预测结果模型准确度
# 使用训练好的模型对测试集进行预测
y_pred = model.predict(X_test)# 输出预测结果和模型准确度
accuracy = accuracy_score(y_test, y_pred)
print("模型准确度:", accuracy)
  1. 可视化训练好的CART决策树模型
# 可视化训练好的CART决策树模型
dot_data = export_graphviz(model, out_file=None,feature_names=X.columns,class_names=['0', '1'],filled=True, rounded=True,special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("Universal_Bank_CART")  # 保存为PDF文件
  1. 安装graphviz模块

首先在windows系统中安装graphviz模块

32位系统使用windows_10_cmake_Release_graphviz-install-10.0.1-win32.exe

64位系统使用windows_10_cmake_Release_graphviz-install-10.0.1-win64.exe

注意:安装时使用下图中圈出的选项

安装完成后使用pip install graphviz指令在python环境中安装graphviz库。

  1. 使用graphviz模块可视化模型
# 可视化训练好的CART决策树模型
dot_data = export_graphviz(model, out_file=None,feature_names=X.columns,class_names=['0', '1'],filled=True, rounded=True,special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("Universal_Bank_CART")  # 保存为PDF文件

完整代码:

# 导入所需的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.tree import export_graphviz
import graphviz# 读取数据集
data = pd.read_csv("universalbank.csv")# 数据预处理:删除无意义特征
data = data.drop(columns=['ID', 'ZIP Code'])# 划分特征和标签
X = data.drop(columns=['Personal Loan'])
y = data['Personal Loan']# 使用留出法划分数据集,训练集:测试集为7:3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 使用CART决策树对训练集进行训练,深度限制为10层
model = DecisionTreeClassifier(max_depth=10)
model.fit(X_train, y_train)# 使用训练好的模型对测试集进行预测
y_pred = model.predict(X_test)# 输出预测结果和模型准确度
accuracy = accuracy_score(y_test, y_pred)
print("模型准确度:", accuracy)# 可视化训练好的CART决策树模型
dot_data = export_graphviz(model, out_file=None,feature_names=X.columns,class_names=['0', '1'],filled=True, rounded=True,special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("Universal_Bank_CART6")  # 保存为PDF文件


http://www.mrgr.cn/p/88516412

相关文章

圆柱齿轮的旋向如何判断?

上期出了个题,给了两个内齿轮,请大家来判断他们的旋向,看到了有不少小伙伴评论给出了自己的答案,正确和错误差不多各半吧,错的占比要大一些。这期咱们就好好聊一聊这个问题。 外齿轮的旋向大家貌似判断都没什么问题&a…

前端笔记-day03

文章目录 01-初始CSS02-CSS引入方式03-标签选择器04-类选择器05-id选择器06-通配符选择器07-画盒子08-字体大小09-文字粗细10-字体倾斜11-行高12-行高垂直居中13-字体族14-font复合属性15-文本缩进16-文本对齐方式17-图片对齐方式18-文本修饰线19-文字颜色20-调试工具21-综合案…

031.下一个排列Java实现

题意 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#…

【资源分享】野比大雄的生化危机宫格解密工具

一款简单的游戏工具*----------------------------------------------[下载区]----------------------------------------------* 蓝奏云(提取码:ysgg) *----------------------------------------------[下载区]----------------------------------------------**---------…

pwn知识——劫持IO-file_jumps攻击和environ攻击

导言 哎,异或fd指针真是令人讨厌 IO_file_jumps _IO_lock_t _IO_stdfile,_IO_wide_data(针对宽字节的虚函数表),_IO_FILE_plus(含有stdin,stdout)三者均被定义为IO_file_jumps 原理 IO_file_jumps是一个全局变量符号,存有以下符号这个结构体主要跟缓冲区有关,比如调用…

堆排序 之实现最小的K个数

目录 1、方式一:通过自定义实现建堆和堆化操作 2、方式二:借助模块heapq实现 2.1、模块heapq的基本使用 2.2、使用heapq实现最小的k个数 3、堆在实际项目的应用 实现语言:Python 3.9 题目来源:牛客 分析: 要找…

示例七、超声波传感器测距

通过以下几个示例来具体展开学习,了解超声波传感器原理及特性,学习超声波传感器的应用: 示例七、超声波传感器测距 一、基本原理: 1、超声波测距仪的系统结构 利用超声测距原理测量物体之间的距离,当此距离小于某一设定值时&…

嵌入式软硬件设计流程

转载自:https://blog.csdn.net/jiangjunjie_2005/article/details/44024933从图书馆看到一经典国外嵌入式设计书籍,其中关于“软硬件设计流程”画得精彩,特列出如下:

ctfshow web入门 php反序列化 web267--web270

web267 查看源代码发现这三个页面 然后发现登录页面直接admin/admin登录成功 然后看到了 ///backdoor/shell unserialize(base64_decode($_GET[code]))EXP <?php namespace yii\rest{class IndexAction{public $checkAccess;public $id;public function __construct(){…

WPF 基础、WPF 相关知识、学习、参考项目

前言:最初参加工作时,做过WPF项目 ,后面几年后者虽然有写WPF项目,但多数都是边边角角,写一点满足工作需要。现在写下WPF,主要就是玩一玩,尝试下不同的东西。这是我的代码仓库:地址 (如果对您有帮助,给颗小星星奖励下吧),在WPF/Lesson 10 Practice/Practice/下面。基…

Rust Course学习(编写测试)

如果友友你的计算机上没有安装Rust&#xff0c;可以直接安装&#xff1a;Rust 程序设计语言 (rust-lang.org)https://www.rust-lang.org/zh-CN/ Introduce 介绍 Testing in Rust involves writing code specifically designed to verify that other code works as expected. It…

WPF 整体结构基础

前言:最初参加工作时,做过WPF项目 ,后面几年后者虽然有写WPF项目,但多数都是边边角角,写一点满足工作需要。现在写下WPF,主要就是玩一玩,尝试下不同的东西。这是我的代码仓库:地址 (如果对您有帮助,给颗小星星奖励下吧),在WPF/Lesson 10 Practice/Practice/下面。基…

使用Django中的Session和Cookie来传递数据

在Django中&#xff0c;Session和Cookie是两种常用的机制&#xff0c;用于在服务器端和客户端之间传递数据。下面我将简要介绍如何在Django中使用Session和Cookie来传递数据。 1、问题背景 在 Django 中&#xff0c;可以使用 request.POST 来获取表单提交的数据。但是&#xf…

最新ChatGPT中文系统网站源码+系统部署+支持AI对话、AI绘画、AI音乐等大模型

一、系统介绍 本文将介绍最新的ChatGPT中文版AI创作系统——星河易创AI系统&#xff0c;该系统基于ChatGPT的核心技术&#xff0c;融合了自然语言问答、绘画、音乐等创作功能&#xff0c;并兼容官方GPT全模型。该系统提供多样化的应用&#xff0c;包括GPTs的多场景应用、实时G…

布局全球内容生态,酷开科技Coolita AIOS以硬核品质亮相

当前&#xff0c;全球产业链供应链格局持续重构&#xff0c;成为影响中国对外经济发展的重要因素。2024年4月15至5月5日&#xff0c;历史久、规模大、层次高&#xff0c;作为中国外贸风向标的第135届中国进出口商品交易会&#xff08;即广交会&#xff09;在美丽的广州隆重举行…

CLI举例:通过URL分类控制用户访问的网站

华为CLI举例&#xff1a;通过URL分类控制用户访问的网站 配置基于URL分类的URL过滤功能&#xff0c;可以实现对用户访问的某一类网站的控制。既可以是FW自带的预定义分类&#xff0c;也可以是管理员配置的自定义分类。 组网需求 如图1所示&#xff0c;FW作为企业网关部署在网络…

Spring如何解决循环依赖问题?

当然是用三级缓存来解决循环依赖问题。 那二级缓存能解决吗&#xff1f; 首先我们要知道Spring bean的生命周期 1.实例化&#xff08;new&#xff09; 2.属性赋值&#xff08;populate&#xff09; 3.初始化 一堆钩子函数&#xff08;动态代理的生成也在这一步&#xff09…

【机器学习】卷积神经(CNN)在图像识别中的革命性应用:自动驾驶的崛起

卷积神经网络&#xff08;CNN&#xff09;在图像识别中的革命性应用&#xff1a;自动驾驶的崛起 一、卷积神经网络&#xff08;CNN&#xff09;的基本原理二、CNN在图像识别中的显著成果三、CNN在自动驾驶汽车中的物体检测和识别四、CNN在图像识别中的代码实例 随着人工智能和深…

一、RocketMQ基本概述与部署

RocketMQ基本概述与安装 一、概述1.MQ概述1.1 用途1.2 常见MQ产品1.3 MQ常用的协议 2.RocketMQ概述2.1 发展历程 二、相关概念1.基本概念1.1 消息&#xff08;Message&#xff09;1.2 主题&#xff08;Topic&#xff09;1.3 标签&#xff08;Tag&#xff09;1.4 队列&#xff0…

鸿蒙内核源码分析(文件句柄篇) | 你为什么叫句柄

句柄 | handle int open(const char* pathname,int flags); ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); int close(int fd);只要写过应用程序代码操作过文件不会陌生这几个函数,文件操作的几个关键步骤嘛,跟把大…