![06cc639180297c528aae6ec569cf73cb.png](https://i-blog.csdnimg.cn/blog_migrate/635ccef730186f9ac9292f33d78685fe.jpeg)
前言
在上一小节中介绍了一个新指标:信息熵。通过信息熵可以计算当前数据的不确定度。构建决策树时,初始状态下,根节点拥有全部的数据集。在根节点的基础上,根据划分后左右两个节点中的数据计算得到的信息熵最低为指标,找到一个合适的维度以及在这个维度上的一个阈值,然后根据找到的维度以及对应的阈值将在根节点中的全部数据集划分成两个部分,两个部分的数据分别对应两个不同的节点。对于两个新节点,再以同样的方式分别对两个新节点进行同样的划分,这个过程递归下去就形成了决策树。本小节主要通过代码来模拟使用信息熵作为指标的划分方式。
sklearn中的决策树
回顾使用 sklearn 中封装好的决策树对鸢尾花数据集进行训练,通过绘制训练好的决策树的决策边界来更加直观的可视化在各个节点上划分的维度以及对应的阈值。
使用 sklearn.datasets 模块中的 load_iris 方法加载鸢尾花数据集,为了方便可视化,只选取鸢尾花数据集的最后两个特征。
In[1]: from sklearn import datasets
iris = datasets.load_iris()
# 只选取petal length和petal width两个特征
X = iris.data[:, 2:]
y = iris.target
有了数据集,可以在 sklearn.tree 中导入 DecisionTreeClassifier 决策树分类器。在实例化决策树分类器时,指定两个参数:
- max_depth: 决策树的最大深度,深度越大,模型越容易过拟合;
- criterion: 决策树的划分标准,其中
entropy
为信息熵,gini
为基尼系数;
In[2]: from sklearn.tree import DecisionTreeClassifier
dt_clf = DecisionTreeClassifier(max_depth=2,
criterion="entropy",
random_state=42)
dt_clf.fit(X, y)
Out[2]: DecisionTreeClassifier(class_weight=None,
criterion='entropy', max_depth=2,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False, random_state=None,
splitter='best')
训练好了决策树,接下来可以使用 plot_decision_boundary 方法来绘制决策边界,与此同时将只包含后两个特征的原始数据集也绘制出来。
In[4]: import numpy as n