机器学习:决策树分类代码实现

2024-08-23 23:20

本文主要是介绍机器学习:决策树分类代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、概念

        决策树分类是一种监督学习算法,用于分类问题,即预测离散标签。其核心原理是通过树状图模型来模拟决策过程,从而对数据进行分类。

2、数据准备

        收集数据集,并对其进行清洗和预处理。

        将数据集分为特征(X)和目标变量(y)

datas=pd.read_excel("电信客户流失数据.xlsx")data=datas.iloc[:,:-1]
target=datas.iloc[:,-1]

3、特征选择

        决策树通过选择最能区分数据的特征来构建模型。特征选择的标准通常基于信息增益、基尼不纯度或熵等指标。

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2,random_state=42)

4、构建树模型

        根节点:从整个数据集开始,选择一个特征及其阈值作为根节点,这个特征应该能够最大程度地减少数据的不确定性。

        分裂:根据根节点的特征值将数据集分割成若干子集,每个子集对应树的一个分支。

        递归构建:对每个子集重复上述过程,选择新的最优特征进行分裂,直到满足停止条件。

5、停止条件

        树达到最大深度。

        节点中的样本数量小于预设的最小分割阈值。

        节点中的样本全部属于同一类别。

6、剪枝:剪枝是决策树优化的重要步骤,它通过移除树的部分分支来减少模型复杂度。

        预剪枝:在树完全生长之前就停止生长,以避免过拟合。

        后剪枝:先让树完全生长,然后从底部开始剪除那些对分类贡献不大的分支。

7、运用交叉验证找到最合适的tree.DecisionTreeClassifier

参数

from sklearn.model_selection import cross_val_score
# 导入交叉验证评分函数scores = []
# 初始化一个空列表,用于存储每个max_depth参数下的模型平均召回率c_param_range = [8, 9, 10, 11, 12, 13, 14]
# 定义一个列表,包含要测试的max_depth参数值for i in c_param_range:# 遍历c_param_range中的每个max_depth值dtr = tree.DecisionTreeClassifier(criterion="gini", max_depth=i, random_state=51, min_samples_leaf=2)# 创建决策树分类器实例,设置分裂标准为"gini",最大深度为当前的i,随机种子为51,叶子节点最小样本数为2score = cross_val_score(dtr, data, target, cv=8, scoring='recall')# 对决策树模型进行8折交叉验证,评分标准为召回率score_mean = sum(score) / len(score)# 计算交叉验证得到的召回率分数的平均值scores.append(score_mean)# 将计算出的平均召回率添加到scores列表中best_c = c_param_range[np.argmax(scores)]
# 使用np.argmax找到scores列表中最大值的索引,这个索引对应的max_depth值即为最佳的max_depth参数

8、训练模型

        使用训练数据集来训练决策树模型。

dtr=tree.DecisionTreeClassifier(criterion="gini",max_depth=best_c,random_state=51,min_samples_leaf=2)
dtr.fit(x_train,y_train)

9、预测

        在决策树构建完成后,新样本通过树的路径进行分类。从根节点开始,根据样本的特征值沿着树向下移动,直到到达叶节点,叶节点的类别即为样本的预测类别。

test_predict=dtr.predict(x_test)
print(metrics.classification_report(y_test,test_predict))

10、评估

        使用准确率、召回率、F1分数等指标来评估决策树模型的性能。

10、优化

        通过调整模型参数(如树的深度、最小分割样本数等)和使用交叉验证等方法来优化模型。

tree.DecisionTreeClassifier(criterion=’gini’splitter=’best’max_depth=Nonemin_samples_split=2min_samples_leaf=1min_weight_fraction_leaf=0.0max_features=Nonerandom_state=Nonemax_leaf_nodes=Nonemin_impurity_decrease=0.0min_impurity_split=Noneclass_weight=Nonepresort=False)

树模型参数:

        1.criterion :gini or entropy 【采用基尼系数还是熵值衡量,默认基尼系数

        2.splitter: best or random 前者是在所有特征中找最好的切分点 后者是在部分特征中(数据量大的时候)【默认best无需更改

        3.max_features:(所有),log2,sqrt,N 特征小于50的时候一般使用所有的 【默认取所有特征,无需更改

        4.max_depth: 数据少或者特征少的时候可以不管这个值,如果模型样本量多,特征也多的情况下,可以尝试限制下如果没有设置,那么将会节点完全展开,直到所有的叶子节点都是纯的,或者达到最小叶子节点的个数阈值设置。

        5.min_samples_split :内部节点再划分所需最小样本数),如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。【控制内部节点分裂的情况;假设<10,那么分裂的数量小于10就不会再次分裂了默认2个

        6.min_samples_leaf :叶子节点最少样本数),这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝,如果样本量不大,不需要管这个值【先构成决策树,再剪枝,当小于某个设定值后,删除此节点以及此节点的分支节点】        

        7.min_weight_fraction_leaf:叶子节点最小的样本权重和),这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

        8.max_leaf_nodes :最大叶子节点数),通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制具体的值可以通过交叉验证得到。【假设限制最大的叶子节点数为10个,那么就不会再次分裂了

        9. min_impurity_decrease :

        10.min_impurity_split: 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点。即为叶子节点 。

        11.class_weight 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。

        12.random_state是用来设置决策树分枝中随机模式的参数。当数据集中的特征数量较少时,随机性不会很明显。但是,当特征数量较多时,随机性就会变得明显。random_state参数可以确保每次运行代码时都得到相同的结果。

这篇关于机器学习:决策树分类代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100788

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too