网站首页 > 技术文章 正文
决策树是一种树形结构,树结构中的每个节点都可以理解为是一个规则,通过对规则处理的结果进行分类,最终完成对整体数据的分类,当然也可以用于回归。下面我们就来拿一个是否去爬山的案例来说明,比如通过判断明天是否下雨、是否降温来决定是否去爬山,可以构造出如下的决策树:
要实现一个决策树,最核心的就是要确定每个节点要通过哪个特征来分类,比如在我们上面举的例子中,到底是先判断是否下雨这个特征,还是先判断是否降温这个特征。通常有两种方式可以选择:
第一种就是交叉熵,所谓熵,英文是Entropy,最初是一个热力学中的概念,后来在信息论这门学科中出现了“信息熵”的概念,用来表示随机变量的不确定性。比如在ID3,C4.5和C5.0算法中会用到,由于流行度不如CART,所以这里不重点介绍。
第二种就是基尼指数,通常用gini来表示,它指从数据集中随机抽取两个样本,类别不一致的概率,它常被用于CART算法中,而且计算也比较简单,它的计算公式为:Gini(D) = 1 - Σ(p^2)。
这里我们还是拿sklearn内置的鸢尾花数据来做演示说明,代码如下:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import graphviz
from sklearn.tree import export_graphviz
# 加载鸢尾花数据集
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)
# 创建决策树模型
clf = DecisionTreeClassifier(random_state=42, max_depth=3)
# 训练模型
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"决策树模型的准确率: {accuracy:.2f}")
# 使用 matplotlib 可视化决策树
plt.figure(figsize=(12, 8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.title(" Decision Tree")
plt.show()
# 使用 graphviz 可视化决策树
dot_data = export_graphviz(clf, out_file=None,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("iris_decision_tree", format='png', cleanup=True, view=True)
由于上面代码都有注释,因此就不过多解释了,值得说明的是,这里使用DecisionTreeClassifier直接得到一个决策树分类器,然后通过max_depth来指定最大深度为3,然后就是通过fit来训练,通过predict来进行预测,然后就是通过graphviz来绘制出完整的决策树。
我们先来看一下预测结果的准确率,可以看到是100%,如下所示:
对于生成的决策树,这里看一下效果:
这里来说一下决策树的每个节点中的信息都是什么意思,比如以下面的这个绿色的节点为例:
这个节点的含义表示:
第一行的petal width(cm)≤1.6表示这个分类里面都是花瓣宽度小于1.6厘米的数据,第二行的gini=0.059表示这一个节点的基尼指数都是0.059,第三行的samples=33表示这个节点的样本数有33个,第四行的value=【0,32,1】表示这33个样本里面属于第一类的有0个,属于第二类的有32个,属于第三类的有1个,第五行的class则说明这一类主要属于versicolor这个类别,也就是鸢尾花三类中的“变色鸢尾”这个类别。
对于决策树来说,就介绍到这里啦,决策树最大的优点就是易于理解和解释,因为可以把整个流程用画图的方式展示出来,而且也可以通过构建多棵决策树来实现随机森林,来提高准确率,后面我们再介绍随机森林。
猜你喜欢
- 2025-05-14 专访庾恩利:不完美才是完美
- 2025-05-14 实例 | 教你用python写一个电信客户流失预测模型
- 2025-05-14 分析5万多场英雄联盟比赛,教你如何轻松用python预测胜负
- 2025-05-14 python决策树用于分类和回归问题实际应用案例
- 2025-05-14 梯度提升算法决策过程的逐步可视化
- 2025-05-14 为机器学习模型设置最佳阈值:0.5是二元分类的最佳阈值吗
- 2025-05-14 python创建分类器小结
- 2025-05-14 一文带您了解随机森林分类和回归模型:Python示例
- 2025-05-14 pybaobabdt,一个超强的 Python 库!
- 2025-05-14 Scikit-Learn最新更新简介
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)