关注我,持续分享逻辑思维&管理思维&面试题; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可接项目赚外快,绝对划算。不仅学会如何编程,还将学会如何将AI技术应用到实际问题中,为您的职业生涯增添一笔宝贵的财富。
-------------------------------------正文----------------------------------------
决策树算法是一种模仿人类决策过程的分类算法,它通过一系列的问题将数据分类。
决策树的原理
- 基本单元:决策树由节点组成,包括决策节点(内部节点)和叶节点(外部节点)。
- 决策节点:每个决策节点代表一个特征属性上的判断条件。
- 叶节点:叶节点代表分类结果,通常是各类标签。
- 分支:从决策节点延伸出来的是分支,每个分支代表一个判断条件的结果。
- 信息增益:决策树在分裂节点时,通常使用信息增益作为标准,以确保树的生长能够最大化类别的区分能力。
决策树的构建过程
- 选择最佳特征:从数据集的所有特征中选择一个最优的特征作为决策节点。
- 分裂数据集:根据所选特征的不同结果,将数据集分裂成多个子集。
- 递归构建:对每个子集递归地应用选择最佳特征和分裂数据集的步骤,直到满足停止条件。
- 停止条件:当数据集中的样本全部属于同一类别,或达到预设的最大深度,或样本数量小于预定阈值时,停止树的生长。
决策树的剪枝
- 预剪枝:在构建过程中提前停止树的生长,以避免过拟合。
- 后剪枝:先让树完全生长,然后从下往上剪除对分类贡献不大的子树。
案例一
假设我们有一个简单的数据集,包含以下特征和标签:
- 特征:
[年龄, 有工作, 有信用卡]
- 标签:
[类别]
数据集示例:
年龄 | 有工作 | 有信用卡 | 类别
------+--------+-----------+------
25 | 是 | 否 | A
45 | 否 | 是 | B
35 | 是 | 是 | A
60 | 否 | 否 | B
构建决策树步骤
- 计算信息增益:计算每个特征的信息增益,选择信息增益最大的特征作为决策节点。
- 分裂数据集:使用选定的特征(例如“有工作”)分裂数据集。
- 递归构建子树:对每个子集递归执行步骤1和2。
- 生成叶节点:当子集中的样本全部属于同一类别时,生成叶节点。
示例代码(Python使用scikit-learn)
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
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=1)
# 创建决策树分类器实例
clf = DecisionTreeClassifier()
# 训练模型
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
案例二
我们使用scikit-learn内置的Iris数据集,这是一个经典的多分类问题数据集,包含了三种鸢尾花的四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和对应的类别标签。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import tree
# 加载数据集
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.2, random_state=42)
训练决策树模型
# 初始化决策树分类器
clf = DecisionTreeClassifier(random_state=42)
# 训练模型
clf.fit(X_train, y_train)
评估模型性能
# 预测测试集结果
y_pred = clf.predict(X_test)
# 输出准确率
print("Accuracy:", accuracy_score(y_test, y_pred))
可视化决策树
# 可视化决策树
fig, ax = plt.subplots(figsize=(15, 10))
tree.plot_tree(clf, ax=ax, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
在这个案例中,我们首先加载了Iris数据集,并将其划分为训练集和测试集。然后,我们使用训练集训练了一个决策树分类器,并用测试集评估了模型的性能。最后,我们使用matplotlib和scikit-learn的plot_tree
函数可视化了训练好的决策树。
感兴趣的同学辛苦 关注/点赞 ,持续分享逻辑、算法、管理、技术、人工智能相关的文章。
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。
或关注博主免费专栏【程序员宝典--常用代码分享】里面有大量面试涉及的算法或数据结构编程题。
博主其它经典原创:《管理心得--如何高效进行跨部门合作》,《技术心得--如何成为优秀的架构师》、《管理心得--如何成为优秀的架构师》、《管理心理--程序员如何选择职业赛道》,及
《C#实例:SQL如何添加数据》,《C#实战分享--爬虫的基础原理及实现》欢迎大家阅读。