首页 > 编程语言 >决策树算法介绍:原理与案例实现

决策树算法介绍:原理与案例实现

时间:2024-06-17 23:28:18浏览次数:20  
标签:iris 剪枝 案例 算法 train test import 决策树

一、引言

在机器学习领域,决策树是一种常用且直观的分类和回归方法。它通过一系列简单的决策规则,将数据集分割成更小的子集,最终形成一个树状结构。本文将详细介绍决策树算法的原理,并通过具体案例实现来帮助读者更好地理解和应用这一算法。

二、决策树原理

1. 决策树的基本概念

决策树是一种树形结构,其中每个内部节点表示一个特征的测试,每个分支代表一个测试结果,每个叶节点代表一个类别或回归值。决策树可以用于分类(分类树)和回归(回归树)任务。

2. 信息增益与基尼系数

在构建决策树时,选择哪个特征来分割数据是至关重要的。常用的分割标准包括信息增益(Information Gain)和基尼系数(Gini Index)。

信息增益

信息增益衡量的是通过某个特征进行分割后,数据集的不确定性减少的程度。计算公式如下:

[ IG(D, A) = Entropy(D) - \sum_{v \in Values(A)} \frac{|D_v|}{|D|} \cdot Entropy(D_v) ]

其中,( Entropy(D) ) 是数据集 ( D ) 的熵, ( D_v ) 是在特征 ( A ) 上取值为 ( v ) 的子集。

基尼系数

基尼系数用于衡量数据集的不纯度,计算公式如下:

[ Gini(D) = 1 - \sum_{i=1}^{n} p_i^2 ]

其中,( p_i ) 是数据集中第 ( i ) 类的概率。

3. 决策树的构建

决策树的构建过程通常采用自顶向下的递归分治策略。具体步骤如下:

  1. 选择最佳分割特征:根据信息增益或基尼系数选择最优特征。
  2. 分割数据集:根据选择的特征将数据集分割成若干子集。
  3. 递归构建子树:对每个子集递归调用上述步骤,直到满足停止条件(如所有样本属于同一类别或特征用完)。

4. 决策树的剪枝

为了防止过拟合,通常需要对决策树进行剪枝。剪枝分为预剪枝和后剪枝:

  • 预剪枝:在构建决策树的过程中设置停止条件,如限制树的深度或节点的最小样本数。
  • 后剪枝:先构建完决策树,然后通过剪去一些叶节点来简化树结构。

三、案例实现

下面通过一个具体的案例来实现决策树算法。我们将使用Python和Scikit-Learn库来构建和评估决策树模型。

1. 数据集介绍

我们使用著名的鸢尾花(Iris)数据集,该数据集包含150个样本,每个样本有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),目标是根据这些特征将样本分为三类(Setosa、Versicolour、Virginica)。

2. 数据预处理

python

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

3. 模型训练

python

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 创建决策树分类器
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)

# 训练模型
clf.fit(X_train, y_train)

4. 模型评估

python

# 预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

5. 决策树可视化

python

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

# 绘制决策树
plt.figure(figsize=(12, 8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()

四、总结

本文介绍了决策树算法的基本原理,包括信息增益和基尼系数的计算方法,以及决策树的构建和剪枝过程。通过鸢尾花数据集的案例实现,我们展示了如何使用Scikit-Learn库构建和评估决策树模型。希望本文能帮助读者更好地理解和应用决策树算法。

标签:iris,剪枝,案例,算法,train,test,import,决策树
From: https://blog.csdn.net/weixin_42132035/article/details/139737072

相关文章

  • LeetCode 算法: 环形链表 c++
    原题链接......
  • Adam优化算法
    Adam优化算法Adam(AdaptiveMomentEstimation)是一种用于训练深度学习模型的优化算法,由DiederikP.Kingma和JimmyBa在2014年提出。Adam结合了动量和自适应学习率的方法,具有高效、稳定和适应性强的特点,被广泛应用于各种深度学习任务中。Adam优化算法的基本思想Adam的核心思......
  • 多叉树的DFS深度优先遍历,回溯法的基础算法之一
    一、前言多叉树一般用于解决回溯问题。想必大家都学过二叉树,以及二叉树的深度优先遍历和广度优先遍历,我们思考:能不能将二叉树的DFS转化为多叉树的DFS?二、多叉树的结构多叉树的本质,就是一棵普通的树,比如下图:如果忽略将来的变化,那么,这棵树可以认为是一个未满的4叉树。......
  • (算法)找到字符串中所有字母异位词——<滑动窗⼝+哈希表>
    1.题⽬链接:438.找到字符串中所有字⺟异位词2.题⽬描述:3.解法(滑动窗⼝+哈希表): 算法思路:◦因为字符串p的异位词的⻓度⼀定与字符串p的⻓度相同,所以我们可以在字符串s中构造⼀个⻓度为与字符串p的⻓度相同的滑动窗⼝,并在滑动中维护窗⼝中每种字⺟的数量; ◦当窗......
  • 进行一个字符串算法的总结
    本文参考字符串基础byAlex_Wei。Manacher算法这玩意是用来求回文子串的。虽然一个字符串的子串数量是\(O(n^2)\)级别的,但是回文串有更好的描述方式。注意到若一个子串\([l,r]\)是以\(mid\)为回文中心的回文串,那么将左端点和右端点朝着\(mid\)方向挪动若干单位也......
  • 目标检测算法之YOLO(YOLOv4-YOLOv6)
    YOLO算法理解YOLOv4BagofspecialsCross-stagepartialconnections(CSP)SpatialPyramidPooling(SPP)PANpath-aggregationblockSAMMishactivationMulti-inputweightedresidualconnections(MiWRC)BagoffreebiesMosaic方法ClasslabelsmoothCmBN和Dynamicmini-ba......
  • MD5哈希加密算法
    [TOP]简介MD5(Message-DigestAlgorithm5)是一种被广泛使用的密码散列函数,它可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。MD5并不是一种加密算法(因为它不可逆),而是一种摘要算法或哈希算法。以下是MD5加密(更准确地说是哈希)原理的简要概述:说明输入:MD......
  • 代码随想录算法训练营第38天|● 理论基础 ● 509. 斐波那契数● 70. 爬楼梯 ● 746.
    动态规划理论基础动态规划,英文:DynamicProgramming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,动态规划做题步骤确定dp数组(dptable)以及......
  • 【论文复现|智能算法改进】基于多策略的改进蜜獾算法及其应用
    目录1.算法原理2.改进点3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】蜜獾算法(HBA)原理及实现2.改进点限制反向学习机制在挖掘模式和蜂蜜模式不同路径更新的基础上引入限制反向学习机制,在算法迭代时,对当前的种群个体进行限制反向学习,生成新的限制反向解......
  • JPS(Jump Point Search)跳点搜索路径规划算法回顾
      本篇文章主要回顾一下几年前学的JPS跳点搜索规划算法的相关内容,之前学的时候没有进行概括总结,现在补上  一、A*算法简单回顾–  1、基本介绍和原理  A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。......