机器学习-决策树算法详解

news/2024/11/20 14:20:48/文章来源:https://www.cnblogs.com/gao1261828/p/18288567

决策树算法

决策树算法是一种流行且功能强大的工具,用于机器学习、数据挖掘和统计学等各个领域。它们通过对不同变量之间的关系进行建模,提供了一种基于数据的决策的清晰直观的方法。本文将介绍什么是决策树、决策树的工作原理、决策树的优缺点以及决策树的应用。

什么是决策树?

决策树是一种流程图式结构用于做出决策或预测。它由表示对属性的决策或测试的节点、表示这些决策结果的分支以及表示最终结果或预测的叶节点组成。每个内部节点对应于对属性的测试,每个分支对应于测试结果,每个叶节点对应于类标签或连续值。对于该算法的使用者来说,有2个难点需要关注:1,决策树的构建规律。2 ,决策树过拟合的解决方法——剪枝。

决策树的结构

  1. 根节点:代表整个数据集和要做出的初步决定。
  2. 内部节点:表示对属性的决策或测试。每个内部节点有一个或多个分支。
  3. 分支:表示决策或测试的结果,通向另一个节点。
  4. 叶节点:表示最终决策或预测。这些节点不再进行进一步的分裂。

举个例子,假设你试图评估一个人是否要买一辆汽车,你可以使用以下决策规则来做出选择:

数据集结构类似, (汽车颜,汽车年份,汽车品牌, 汽车行驶里程,购买结果)  。经过对数据集的训练后,获得的决策树模型如下:

 

 

 

决策树如何工作/生成?

因为决策树是一个可迭代结构,所以当我们有了生成第一个节点的方法后,重复这一过程就可以。  第一个节点构建中,我们需要确定选取哪一个属性作为判断节点,

然后,确定2个判断后的分支结果 。

一个通常的构建决策树的过程包括:

  1. 选择最佳属性:使用基尼不纯度、熵或信息增益等指标,选择分割数据的最佳属性。这是决策树算法的核心,它直接推动了决策树结构的生长。(具体过程见拆分指标)
  2. 拆分数据集:根据所选属性将数据集拆分为子集。
  3. 重复该过程:对每个子集递归重复该过程,创建一个新的内部节点或叶节点,直到满足停止标准(例如,节点中的所有实例都属于同一类或达到预定义的深度)。

拆分指标

基尼不纯度:衡量如果根据数据集中的类别分布对新实例进行随机分类,则该实例被错误分类的可能性。

熵 :测量数据集中的不确定性或杂质的数量。这里我详细说说熵指标构建节点的过程。熵的取值范围为[0, 1] ,熵越大,说明数据集的信息量越大,最大为1. 所以当取数据集中某一个属性进行划分(注意:当前熵时,还没有划分,只是存在这样的一个划分。属性是自变量,而划分的分类             是因变量,也是预测的结果)时,它的信息熵计算公式如下:

       ,其中,当前数据集 公式 中有 公式 类,其中第 公式 类样本占比为 公式。 比如 购车数据集内,购车结果有2个分类,根据样本可以计算它的信息熵。这个也可认为是根节点的信息熵。

信息增益:衡量的是我们选择某个属性进行划分时信息熵的变化(可以理解为基于这个规则划分,不确定性降低的程度)。 比如继续引入 “汽车颜色”这个属性(划分)后对这个数据集熵的下降程度是多少。计算公式为:

    ,其中 a是一个划分属性。 D是该划分下的一个样本集合。最后,我们对所有的属性都进行一次划分,并计算信息增益,取使得增益最大的属性作为第一个节点。

决策树的优点

  • 简单性和可解释性:决策树易于理解和解释。其视觉表现形式与人类的决策过程非常相似。
  • 多功能性:可用于分类和回归任务。
  • 无需特征缩放:决策树不需要对数据进行规范化或缩放。这样,前期的数据预处理方面大大简化。
  • 处理非线性关系:能够捕捉特征和目标变量之间的非线性关系。

决策树的缺点

  • 过度拟合:决策树很容易过度拟合训练数据,尤其是当决策树很深且有很多节点时。发生过度拟合后,该算法对于 测试集预测率高,但在实际预测中表现不好。
  • 不稳定性:数据的细微变化可能会导致生成完全不同的树。
  • 偏向具有更多级别的特征:具有更多级别的特征可以主导树结构。

修剪

为了克服过度拟合,可以使用修剪技术。修剪通过删除在分类实例方面提供较小能力的节点来减小树的大小。修剪主要有两种类型:

  • 预修剪(早期停止):一旦树满足某些标准(例如,最大深度、每片叶子的最小样本数),就停止树的生长。
  • 后期修剪:从成年树上去除那些不能提供强大动力的树枝。

 

决策树的实例

这个实例是用于预测印第安皮马人的患糖尿病的判断模型,数据集结构为(怀孕次数,血浆葡萄糖浓度,血压,皮肤厚度,血清胰岛素浓度,BMI,糖尿病系, 年龄,结果

# 加载库
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split 
from sklearn import metrics # 加载数据集
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']pima = pd.read_csv("pima_indians_diabetes.csv", header=None, names=col_names)
pima.head()# 分离 特征变量和目标变量数据
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols]
y = pima.label#  切分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)# 创建决策树模型,并训练模型
clf = DecisionTreeClassifier(criterion="entropy", max_depth=3)
clf = clf.fit(X_train,y_train)# 预测测试集数据
y_pred = clf.predict(X_test)# 显示预测集数据准确度
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
# 后续还有模型优化

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】挖矿病毒 logrotate 185.196.8.123

185.196.8.123 logrotate如果你最近也中了这个病毒,看这篇文章就对了。 网上找了几篇类似文章,都是教你杀进程、删文件,但新版的病毒已经进化了,进程杀死复活,文件删掉又有了... 经过本人几天的尝试,最终找到了干掉他的方法。先确定下你的症状是不是跟我一样? 问题现象:…

分片集群平衡器Balancer

分片集群平衡器 MongoDB 平衡器是一个后台进程,用于监控每个分片集合中每个分片的数据量。当给定分片上的分片集合的数据量达到特定的 迁移阈值时,平衡器会尝试在分片之间自动迁移数据,并在尊重区域的情况下使每个分片的数据量达到均衡。默认情况下,平衡器进程始终处于启用…

Pytnon变量print打印计数显示前面补零 0001、0002

前言全局说明Pytnon变量计数显示前面补零 0001、0002一、说明 环境: Windows 11 家庭版 23H2 22631.3737 Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32二、变量print打印计数显示前面补零 0001、0002 >>> fram…

CTF流量分析刷题(1)

简单的一道流量分析题目可以看到是传了一个webshell先URL解码,再进行base64解码可以看到是读取了flag.txt的内容,很容易即可拿到flag。

深耕分析型数据库领域,火山引擎ByteHouse入围《2024爱分析数据库厂商全景报告》

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群。近日,爱分析发布《2024爱分析数据库厂商全景报告》,报告中爱分析将数据市场从上至下划分为数据库服务、数据库运维管理产品、数据库产品三层,其中数据库产品又包括事务型关系数据库、…

AI Agent技术的最新进展与改变世界的典型项目巡礼

AI Agent技术的最新进展与改变世界的典型项目巡礼AI Agent技术的最新进展与改变世界的典型项目巡礼 1. AI Agent 技术发展以及典型项目 1.0 前 AI Agent 时代在学术探索的浩瀚星空中,机器人技术领域的璀璨明珠莫过于Agent技术的深入研究,这一领域历来是创新与突破的温床。回溯…

Unity读取xml文件

在XML中配置字典名称,字典的key和value,目前key和value都是用的string类型,通过ParseXml类的ParseData函数,传递字典名称和key来获取value xml文件内容解析数据类 using UnityEngine; using System.Xml; using System;/// <summary> /// 读取xml信息类 /// </summ…

【比赛】高一小学期2

【比赛】高一小学期2 题解挺唐的比赛,一道数位 dp 原题一道平衡树,然后 T1 数据范围还整错了。。没图了呜呜【比赛】高一小学期2$Rank$赛时日前赛后T1 同类分布 思路 印象里为数不多搞懂了的数位 dp,但过太久忘了,只能赛时打暴力 后来发现跟正解很接近了,只是在 dfs 前的预…

针对于早期版本的flutter开发的app的处理

下为某个flutter开发的app的hook app为flutter开发,知道是一个AES加密,但是相关so中方法的hook经验较少 这个app的dart的版本较早,是2.10的,找了一个开源的脚本,对代码进行了处理,获取到相对的so层的方法和地址 脚本地址:https://github.com/rscloura/Doldrums 目前较好…

(10)逻辑综合添加约束(环境约束)

一、环境约束此外,还有电路内互连线的延时也没有考虑在内四个环境约束:1.输出负载如果电路的输出负载过大,将会加大电路的transition time,从而影响电路时序此外,若dc默认输出负载为0,即相当于不接负载,这样综合出来的电路时序显然过于乐观,不能反映实际工作情况可以设…

[GIT] 解决:git status时有Untracked files(未跟踪的文件)

1 问题描述git pull时失败,报Please move or remove them before you merge。结果git status显示有一堆不太想提交的Untracked files(未跟踪的文件)。那么,Untracked files文件状态的文件,是什么?一般又如何处理呢?2 原因分析我们要真正弄明白问题的原因,我们就要先知道文…

windows版Oracle11g安装记录

一、下载Oracle 11g数据库安装包 已上传至博客园文件中 二、安装Oracle 11g 下载下来是下图这样的两个压缩包:1、解压这两个压缩包到同一个文件夹(切记路径文件不可有中文、空格和不规则字符。): 2、将解压好的win64_11gR2_database_2of2\database\stage\Components下的所有…