决策树是一种机器学习算法,它可以实现分类和回归任务,甚至是多输出任务。它也是随机森林的重要组成部分,而随机森林则是现今最为强大的机器学习算法之一,因此了解决策树的原理是非常重要的。
说明: 为了说明方便,本篇博客插入了许多图片,部分图片由《机器学习实战》的作者通过jupyter notebook绘制,上传于GitHub供大家学习。
决策树分类
决策树训练和可视化
为了更加直观的了解决策树的工作原理,我们可以对决策树的训练结果进行可视化。首先我们可以使用决策树来制作一个鸢尾花分类器:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data[:,2:] #读取花瓣的长和宽
y = iris.target
tree_clf = DecisionTreeClassifier(max_depth=2) #深度为2
tree_clf.fit(X,y)
训练好了决策树之后,我们可以使用export_graphviz()方法输出一个图形定义文件来查看训练好的决策树的结构:
from sklearn.tree import export_graphviz
export_graphviz(
tree_clf, #训练好的决策树
out_file="iris_tree.dot", #输出的文件路径
feature_names=iris.feature_names[2:], #提取特征的名字
class_names=iris.target_names, #提取标签的名字
rounded=True, #让决策树的框图圆润
filled=True
)
对于输出的dot文件我们需要下载graphviz来打开,并将其输出为png等常见的文件格式。下载地址(下载msi)。下载安装完成之后,在目录中的bin文件夹中打开gvedit.exe,使用其打开dot文件,即可查看图片,点击setting按钮对其进行输出。
可视化结果如下:

分类过程
预测过程根据上面的图可以清楚的看出来,当有一个示例输入时,先判断花瓣长度是否小于等于2.45cm,若是则进入左边的结点(深度1),属于setosa鸢尾花,若不是则进入右边的结点继续进行判断:花瓣的宽度是否小于等于1.75cm,若是则属于versicolor否则属于virginica。
每个结点中的samples表示它使用的训练实例的数量,value则表示该节点中训练集中每个类别中的数目,而gini则代表基尼不纯度,用来表示不纯度,如果应用的所有训练实例都属于一个类别,则gini=0,结点是“纯”的。基尼不纯度的计算公式为:
G i = 1 − ∑ k = 1 n p i , k 2 G_i=1-\sum^n_{k=1}p_{i,k}^2 Gi=1−k=1∑npi,k2
其中 p i , k p_{i,k} pi,k是第i个节点上,类别为k的训练实例占比。
还有一种计算不纯度的方式,成为信息熵,其计算公式为:
H i = − ∑ k = 1 p i , k ≠ 0 n p i , k l o g ( p i , k ) H_i=-\sum_{k=1\ p_{i,k}\neq0}^np_{i,k}log(p_{i,k}) Hi=−k=1 pi,

最低0.47元/天 解锁文章
1506

被折叠的 条评论
为什么被折叠?



