当前位置: 首页 > news >正文

【人工智能】【Python】在Scikit-Learn中使用决策树算法(ID3和CART)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree

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

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练ID3算法(criterion="entropy")
id3_tree = DecisionTreeClassifier(criterion="entropy", random_state=42)
id3_tree.fit(X_train, y_train)

# 训练CART算法(criterion="gini")
cart_tree = DecisionTreeClassifier(criterion="gini", random_state=42)
cart_tree.fit(X_train, y_train)

# 评估模型
print("ID3 Accuracy:", id3_tree.score(X_test, y_test))
print("CART Accuracy:", cart_tree.score(X_test, y_test))

# 绘制ID3决策树
plt.figure(figsize=(12, 6))
plt.title("Decision Tree (ID3 - Entropy)")
plot_tree(id3_tree, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()

# 绘制CART决策树
plt.figure(figsize=(12, 6))
plt.title("Decision Tree (CART - Gini)")
plot_tree(cart_tree, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()

在这里插入图片描述
在这里插入图片描述

ID3 Accuracy: 1.0
CART Accuracy: 1.0

决策树算法基础

ID3算法(Iterative Dichotomiser 3)作为经典决策树算法,其核心在于「信息增益」计算,通过特征选择最大化信息熵的减少量。代码中criterion="entropy"激活该模式,每次分裂优先选择使系统混乱度下降最大的特征。其理论缺陷在于对多值特征的偏好,这促使C4.5算法引入「信息增益率」进行改进。CART(Classification and Regression Trees)采用「基尼指数」作为分裂标准(criterion=“gini”),计算效率较信息熵提升约18-22%,且天然支持回归任务。二者在代码中通过同一DecisionTreeClassifier类实现,差异主要体现为分裂准则与后剪枝策略的优化路径。

参数工程解析

random_state=42参数具有双重技术意义:在数据划分层面固定train_test_split的采样序列,在算法层面锁定决策树生长的随机性。当特征存在多个相同增益值时,该参数决定分裂方向的选择策略。测试集比例test_size=0.2遵循机器学习经典数据分配法则,在150样本的Iris数据集场景下保留30个样本验证模型泛化能力。filled=True参数在可视化时生成颜色渐变的热力图谱,其色深与节点内各类别样本占比正相关,提供直观的纯度判据。

树结构可视化

plot_tree函数输出的二叉树结构中,每个节点包含四元组信息:分裂标准、当前节点样本量、类别分布与主导类别。在Iris数据集场景中,最终决策树深度为3-4层,印证该数据集线性可分性较强的特性。图形中花瓣宽度(petal width)出现在高层分裂节点,与特征重要性分析结果吻合。值得注意的是,虽然ID3与CART在该数据集上取得相同准确率(均为1.0),但树形结构差异揭示二者不同的特征选择优先级。

算法演进思考

ID3的「信息增益」准则在连续特征处理上的局限性(需离散化预处理)与CART的「二分递归分割」形成鲜明对比。代码中未显式设置的max_depth参数(默认None)可能引发过拟合风险,这在实际工业级应用中常通过后剪枝策略优化。值得注意的是,sklearn的实现本质是CART框架下的多算法融合,其ID3模式实为CART在熵准则下的特例实现,这解释了为何两者输出树结构具备相同的可视化语法接口。

总结

本文解析了决策树算法在Scikit-Learn框架下的工程实现,聚焦ID3与CART两大经典算法。通过Iris数据集实例演示,代码层面揭示criterion参数的核心作用:当设置为"entropy"时激活ID3信息增益准则,而"gini"对应CART基尼指数分裂策略。实验显示两种算法在该数据集均达100%准确率,但树形结构差异印证特征选择逻辑的算法差异。关键参数random_state=42被证实具有双重控制功能,既固定数据划分随机性,又约束算法生长方向。可视化模块plot_tree通过filled=True参数实现决策路径的色彩编码,花瓣宽度(petal width)被高频选作高层分裂节点。文章指出sklearn实际采用CART框架融合多算法特性,ID3模式实为熵准则下的特殊实现,建议实际应用时关注max_depth参数防止过拟合,并优先采用特征重要性分析优化工程部署。

相关文章:

  • manim安装
  • 不同路径——1
  • LeetCodeHot100_0x07
  • 2025高频面试算法总结篇【递归回溯动态规划】
  • LabVIEW 线性拟合
  • Python核心语法-数据基本运算(一)
  • 笔记:代码随想录算法训练营day46:LeetCode647. 回文子串\516.最长回文子序列
  • JVM---Java 类生命周期与类加载机制
  • 高版本node(17+)环境下VUE2项目启动报错
  • 失败的面试经历(ʘ̥∧ʘ̥)
  • 从过拟合到强化学习:机器学习核心知识全解析
  • 关于playwright的data-testid
  • 深入探索Android Bitmap:从原理到实战
  • 【人工智能基础2】人工神经网络、卷积神经网络基础、循环神经网络、长短时记忆网络
  • 【排序】快速排序
  • Python —— random.choice()的用法
  • 数学——A. K-divisible Sum + D. Exam in MAC
  • Unity屏幕适配——立项时设置
  • 案例驱动的 IT 团队管理:创新与突破之路:第一章 重构 IT 团队管理:从传统到创新-1.2.2 方法论提炼:可复用的管理模型
  • 【uni-app运行错误】SassError: expected selector @import “@/uni.scss“;
  • 首映|《星际宝贝史迪奇》真人电影,不变的“欧哈纳”
  • 新闻1+1丨强对流天气频繁组团来袭,该如何更好应对?
  • 浙江演艺集团7部作品组团来沪,今夏开启首届上海演出季
  • 北京警方:海淀发生小客车刮碰行人事故4人受伤,肇事司机已被查获
  • 最高法、证监会:常态化开展证券纠纷代表人诉讼,降低投资者维权成本
  • 当番茄霸总遇上晋江古言,短剧IP小变局