决策树——预剪枝

决策树的剪枝有两种思路:
1.预剪枝
2.后剪枝

预剪枝

预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,如果当前结点的划分不能带来决策树模型泛化性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。
所有决策树的构建方法,都是在无法进一步降低熵的情况下才会停止创建分支的过程,为了避免过拟合,可以设定一个阈值,熵减小的数量小于这个阈值,即使还可以继续降低熵,也停止继续创建分支。但是这种方法实际中的效果并不好。

决策树模型的剪枝操作主要会用到DecisionTreeClassifier()函数中的
max_depth:指定了决策树的最大深度
max_leaf_nodes:指定了模型的叶子节点的最大数目
min_sample_split:指定了模型的节点允许分割的最小样本数
min_samples_leaf:指定了模型的一个叶节点上所需的最小样本数
这里使用参数网格搜索的方式,对该模型中的四个参数进行搜索,并通过该在验证集上的预测精度为准测,获取较合适的模型参数组合。
params = {'max_depth': np.arange(2,12,2),
'max_leaf_nodes': np.arange(10,30,2),
'min_samples_split': [2,3,4],
'min_samples_leaf': [1,2]}

clf = DecisionTreeClassifier(random_state=1)
gcv = GridSearchCV(estimator=clf,param_grid=params)
gcv.fit(X_train,y_train)

model = gcv.best_estimator_
model.fit(X_train,y_train)

可视化决策树经过剪剪枝后的树结构

dot_data = StringIO()
export_graphviz(model, out_file=dot_data,
feature_names=X_train.columns,
filled=True,
rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

posted @ 2022-11-26 17:10  李仁真  阅读(198)  评论(0编辑  收藏  举报