【Python机器学习】构造决策树

通常来说,构造决策树直到所有叶结点都是纯的叶结点,但这会导致模型非常复杂,并且对于训练数据高度过拟合。

为了防止过拟合,有两种常见策略:

1、尽早停止树的生长,也叫预剪枝

2、先构造树,但随后删除或折叠信息量很少的结点,也叫后剪枝。

预剪枝的限制条件可能包含限制树的最大深度、限制叶结点的最大数目、规定一个结点中数据点的最小数目。

如果不防止过拟合:

python 复制代码
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
import graphviz


plt.rcParams['font.sans-serif'] = ['SimHei']

cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(
    cancer.data,cancer.target,stratify=cancer.target,random_state=42
)
tree=DecisionTreeClassifier(random_state=0)
tree.fit(X_train,y_train)
print('训练集score:{:.3f}'.format(tree.score(X_train,y_train)))
print('测试集score:{:.3f}'.format(tree.score(X_test,y_test)))

可以看到,训练集上精度是100%,但测试集的精度只有93.7%。

防止过拟合,比如限制决策树的深度为4:

python 复制代码
tree=DecisionTreeClassifier(max_depth=4,random_state=0)

可以看到,虽然训练集的精度下降,但是测试集的精度有所提升。

还可以用tree模块的export_graphviz函数来将树可视化。这个函数会生成一个dot文件,然后用graphviz读取这个文件并可视化(通过生成pdf文件的方式):

python 复制代码
export_graphviz(tree,out_file='tree_1.dot',class_names=['malignant','benigh'],feature_names=cancer.feature_names,impurity=False,filled=True)
with open('tree_1.dot') as f:
    dot_graph=f.read()
g=graphviz.Source(dot_graph)
g.render('决策树可视化')
相关推荐
*Lisen12 小时前
从零手写 FlashAttention(PyTorch实现 + 原理推导)
人工智能·pytorch·python
用户83562907805112 小时前
用 Python 轻松在 Excel 工作表中应用条件格式
后端·python
red1giant_star12 小时前
Python根据文件后缀统计文件大小、找出文件位置(仿Everything)
后端·python
雷欧力13 小时前
如何使用 Claude API?3 种接入方案实测,附完整代码(2026)
python·claude
神仙别闹13 小时前
基于 Python 实现 BERT 的情感分析模型
开发语言·python·bert
Uopiasd1234oo13 小时前
上下文引导模块改进YOLOv26局部与全局特征融合能力双重提升
深度学习·yolo·机器学习
NQBJT13 小时前
VS Code配置Python人工智能开发环境
开发语言·人工智能·vscode·python
浮游本尊13 小时前
一文讲透巡检链路:采集程序 → 上传数据包 → 后端解析入库 → 分析出报告
python
哥布林学者13 小时前
深度学习进阶(十四)ConvNeXt
机器学习·ai
a11177613 小时前
MonoGS 在 Jetson Orin Nano 上的部署与性能测试
python·开源·torch·cv