什么是决策树?
决策树的思想在我们的日常生活中非常常见,甚至在很多时候我们会不自觉的使用这种思路来进行一些判断。
举一个简单的例子。假设有一个公司想要招聘一个机器学习的算法工程师,公司在招聘的时候很有可能会采用下面的流程:
根据上面的层次关系我们可以绘制出一个树形结构。
在这棵树中,所有叶子节点的位置其实都是最终的决策,这个决策可以理解成对输入的受聘者信息进行了一个分类,将这名受聘者分成"录用"或者"留作后续考察"两个类,这样的树形结构就叫做决策树。
这样一棵决策树有树结构(计算机领域)的所有性质,比如:
直接使用sklearn为我们封装好的决策树进行具体的分类,然后通过分类结果的决策边界来更加深入的认识决策树。
本小节使用非常经典的鸢尾花数据集 iris,由于我们要对数据进行可视化,所以只保留鸢尾花样本特征中的两个特征,这里选择后两个特征(iris.data[:, 2:]
)。
使用 sklearn 封装的决策树对鸢尾花数据集进行分类只需要从 sklearn.tree 包中导入 DecisionTreeClassifier 类即可。
构造决策树时传入两个参数:
通过 fit 函数拟合训练模型。接下来使用前面一直使用的 plot_decision_boundary 函数绘制使用决策树来解决分类问题的决策边界,与此同时使用 scatter 函数将三个类别的训练样本也绘制出来。
下面简单的通过绘制的决策边界来分析得到的大概是个什么样子的决策树。此时的鸢尾花数据集中的特征全是数字特征,也就是说每一个特征都是一个实数。此时每个样本有两个特征x,y(暂时命名为x和y),用横轴表示 x 特征,用纵轴表示 y 特征。
为了方便,将决策边界中蓝色样本点所处的类别称为类别 A(红色区域),将决策边界中橙色样本点所处的类别称为类别 B(黄色区域),将决策边界中绿色样本点所处的类别称为类别 C(蓝色区域)。根据绘制的决策边界可以分析出:
根据绘制的决策边界我们可以得到上面的层次关系,同样的我们可以根据上面的层次关系绘制对应的树形结构。
「这就是决策树在面对属性是这种数值特征时是怎样处理的,在每一个节点上选择某一个维度以及和这个维度相应的一个阈值。」 比如在根节点上选择 x 这个维度和 2.4 的阈值,判断样本点在 x 这个维度上是否小于 2.4,当判断为否后的节点选择了 y 这个维度和 1.8 的阈值,判断样本点在 y 这个维度上是否小于 1.8。
简单总结一下关于决策树的一些特征:
了解了什么是决策树,剩下的问题就是如何构建决策树。首先决策树中每一个节点都是找到一个维度,其次找到这个维度中的一个阈值,然后以这个维度的这个阈值作为依据判断是否继续划分,因此构建决策树的核心问题:
上面的例子非常简单只有两个特征维度。如果数据集比较复杂的话,可能有成百上千个维度,具体要在那个维度上进行划分?如果选好了某个维度,相应的到底要在这个维度上的那个值上进行划分?因此每个节点上在哪个维度上做划分和某个维度上的哪个值做划分是构建决策树的关键问题。
本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!