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

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文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【nodejs 命令行交互神器 - inquirer.js】

需求 大家在开发时,有时需要从命令行读取用户的输入,或者让用户选择。在nodejs中,这个怎么实现? 原生实现 ❌ process.stdin.setEncoding(utf8);process.stdin.on(readable, () > {let chunk;// 使用循环确保我们读取所有的可用输入wh…

【C++算法】队列相关经典算法题

1. N叉树的层序遍历 首先我们遇到这个题目,没有任何思路,我们就可以来模拟一下层序的流程,首先我们肯定是访问根节点1,访问之后呢就是访问下一层的最左节点3,此时第一层的节点1已经访问过了就可以不要了,然…

词令蚂蚁新村今日答案:微信小程序怎么查看蚂蚁新村今天问题的正确答案?

微信小程序怎么查看蚂蚁新村今天问题的正确答案? 1、打开微信,点击搜索框; 2、打开搜索页面,选择小程序搜索; 3、在搜索框,输入词令搜索点击进入词令微信小程序; 4、打开词令微信小程序关键词口…

每日10亿数据的日志分析系统OOM

背景 一个每日10亿数据的日志清洗系统,主要工作就是从消息队列中消费各种各样的日志,然后对日志进行清洗,例如:用户敏感信息(姓名、手机号、身份证)进行脱敏处理,然后把清理完的数据交付给其他系统使用。 我们项目中,…

设计模式2——原则篇:依赖倒转原则、单一职责原则、合成|聚合复用原则、开放-封闭原则、迪米特法则、里氏代换原则

设计模式2——设计原则篇 目录 一、依赖倒转原则 二、单一职责原则(SRP) 三、合成|聚合复用原则(CARP) 四、开放-封闭原则 五、迪米特法则(LoD) 六、里氏代换原则 七、接口隔离原则 八、总结 一、依赖…

《2024年AI安全报告》:AIML工具使用量飙升594.82%

人工智能(AI)不仅仅是一种开拓性的创新技术,甚至已经成为一种常态,企业正在工程、IT营销、财务、客户服务等领域迅速采用AI和机器学习(ML)工具。但与此同时,他们必须平衡AI工具带来的诸多风险&a…

JWT深入浅出

文章目录 JWT深入浅出1.JWT是什么2.为什么选JWT2.1 传统Session认证2.2 JWT认证 3.JWT怎么用4. jwt绝对安全吗? JWT深入浅出 1.JWT是什么 JWT(JSON Web Token)是一种用于在网络应用间传递信息的开放标准,通常用于身份认证和非敏…

24寸2K显示器 - HKC G24H2

🔥🖥️ 嘿,大家好!今天,我要给大家介绍一款超棒的显示器——HKCG24H2!这款显示器可是个全能选手,无论你是工作狂人还是游戏迷,它都能满足你的需求! 😎&#x…

传输层之 UDP 协议

UDP协议端格式 教科书上的: 16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度,描述了这个数据报多长; 实际上的: UDP 会把载荷数据,就是通过 UDP Socket,即 sen…

PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态

批量生成Checkbox并添加到TableWidget中 for i in range(10):checkbox_i QCheckBox(fCheckbox_{i}) # 生成Checkbox并命名为Checkbox_iself.ui_1.tableWidget_1.setCellWidget(i,1,checkbox_i) 批量检查勾选状态 # 批量生成Checkbox并存入列表 list_Checkbox_1 [] for …

vue3专栏项目 -- 三、使用vue-router 和 vuex(下)

一、添加columnDetail 页面 首页有专栏列表(ColumnList组件),专栏列表中有很多专栏,然后点击某个专栏就进入专栏详情页(ColumnDetail组件),专栏详情页中有很多文章,点击某个文章就进…

uni-segmented-control插件使用

dcloud插件市场 前端/uniapp 1.HBuildX打开目标项目 2.进入dcloud插件市场下载目标插件 3.看到如下提示(已经可以在目标项目中使用插件啦) 4.项目正式使用

物联网平台之单体架构

介绍本文主要介绍平台的单体架构,包括各个组件之间的数据流描述以及所做的一些架构选择。在单体架构模式下,所有 ThingsKit 组件都在单个 Java 虚拟机 (JVM) 中启动,并共享相同的操作系统资源。由于 ThingsKit 是用 Java 编写的,因…

springcloud alibaba微服务框架涉及的技术

一、微服务架构中核心模块及其使用技术总览 二、各模块详细说明 1、注册中心 该模块主要功能为 自动提供服务的注册与发现,集中式管理服务,让 服务调用端发现服务,让服务提供端注册服务,倘若没有注册中心,那客户端就…

JUC下的BlockingQueue详解

BlockingQueue是Java并发包(java.util.concurrent)中提供的一个接口,它扩展了Queue接口,增加了阻塞功能。这意味着当队列满时尝试入队操作,或者队列空时尝试出队操作,线程会进入等待状态,直到队列状态允许操作继续。这…

记录使用极空间NAS通过Docker部署小皮面板(PhpStydy)运行 八图片当面付支付宝接口 PHP项目的遭遇

事件的起因还得从我用八图片的图片加密支付跳转功能,实现打赏金额发案例源码下载链接挣个烟钱的事。八图片的支付接口是PHP web项目的。正好我有个极空间的NAS,搭建到NAS上省去了买主机的费用。 导读 八图片是什么?极空间NAS 部署 PHP网站安装…

eNSP中小型园区网络拓扑搭建(上)

→b站直通车,感谢大佬← →eNSP中小型园区网络拓扑搭建(下)← 不带配置命令的拓扑图已上传~ 项目背景: 某公司准备新建一张网络供企业办公使用。写字楼共3层,一层会客大厅、二层行政部及市场部、三层研发部。一层设…

探讨 vs2019 c++ 里函数指针与函数类型在使用上的语法区别

(1)咱们可以用 decltype () 来判断函数的类型。但以这个类型定义有用的可指向已存在函数的变量,却行不通。测试如下: 如果把上面的注释去掉会报错: 所以函数类型只有语法意义。但在使用上没有函…

InputStream,OutputStream的用法以及相应的案例

1. 文件系统的操作:File类。 2. 文件内容的操作:Stream流。 字符流:IntputStream , OutputStream。 字节流:read , write。 InputStream,OutputStream InputStream和OutputStream都不能被实例…

论文笔记:DeepMove: Predicting Human Mobility with Attentional Recurrent Networks

WWW 2018 1 Intro 根据对百万级用户群的研究,93%的人类移动是可预测的。 早期的mobility预测方法大多基于模式的。 首先从轨迹中发现预定义的移动模式(顺序模式、周期模式)然后基于这些提取的模式预测未来位置。最近的发展转向基于模型的方法进行流动性预测。 利用…