赞
踩
以下都是本人在学习机器学习过程中的一些心得和笔记,仅供参考。
if/else
问题中进行学习,并且得出结论!如果你要区分四种动物:熊、鹰、企鹅和海豚,可以转换成一颗决策树来表示。
mglearn.plots.plot_animal_tree()
在这张图中,树的每个节点代表一个问题或者一个包含答案的终结点(叶结点)。树的边将问题的答案与将问的下一个问题连接起来。
用机器学习的语言来说就是,为了区分四类动物(熊、鹰、企鹅和海豚),我们利用三个特征(“有没有羽毛”,“会不会飞”,“有没有鳍”)来构建一个模型。
我们在下面的二维分类数据集上构造决策树,这个two_moons
数据集由2个半月组成,每个类别都包含50个数据点。
i
的值是否大于a
?”mglearn.plots.plot_tree_progressive()
上图选出了第一个测试,将数据集在x[1]=0.0596
处垂直划分可以得到最多信息,它在最大程度上将类别 0 中的点与类别 1 中的点进行区分。
右侧的决策树,通过测试 x[1] <=0.0596
的真假来对数据集进行划分,在图中表示为一条黑线。
如果测试结果为真,那么将这个点分配给左结点,左结点里包含属于类别 0 的 2 个点和属于类别 1 的 32 个点。否则将这个点分配给右结点,右结点里包含属于类别 0 的 48 个点和属于类别 1 的 18 个点。
尽管第一次划分已经对两个类别做了很好的区分,但底部区域仍包含属于类别 0 的点,顶部区域也仍包含属于类别 1 的点。我们可以在两个区域中重复寻找最佳测试的过程,从而构建出更准确的模型。
上图展示了信息量最大的下一次划分,这次划分是基于 x[0]
做出的,分为左右两个区域。
这一递归过程生成一棵二元决策树,其中每个结点都包含一个测试。或者你可以将每个测试看成沿着一条轴对当前数据进行划分。这是一种将算法看作分层划分的观点。由于每个测试仅关注一个特征,所以划分后的区域边界始终与坐标轴平行。
对数据反复进行递归划分,直到划分后的每个区域(决策树的每个叶结点)只包含单一目标值(单一类别或单一回归值)。如果树中某个叶结点所包含数据点的目标值都相同,那么这个叶结点就是纯的(pure)。这个数据集的最终划分结果见下图。
为什么要控制决策树的复杂度,就是防止过拟合。
防止过拟合有两种常见的策略:
pre-pruning
),及早停止树的生长post-pruning
)或剪枝(pruning
),先构造树,但随后删除或折叠信息量很少的结点预剪枝的限制条件可能包括限制树的最大深度、限制叶结点的最大数目,或者规定一个结点中数据点的最小数目来防止继续划分。
scikit-learn
的决策树在 DecisionTreeRegressor
类和 DecisionTreeClassifier
类中实现。D但是scikit-learn
只实现了预剪枝,没有
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。