“简单来说,决策树就是设计分支判断条件”
大家都学过数据结构,其中的树形结构都了然于心,决策树就可以看成是,每一个分叉处做出条件,满足哪一个,就继续向下走,直到把树遍历完成为止。
既然都说到这份上了,决策树的关键一定不是预测,毕竟遍历的操作和if...else...大家都会,条件也会给出来,那决策树重要的一点在于什么呢?
“建树”
关键在于怎样生成决策树:
依据什么标准或者指标去生成,到底哪个特征放在前面(哪个作为权重最大的,最能区分的)
量化分类区分:
信息熵
基尼系数(评估一个分类区分度)
“信息熵”:
想必大家高中都学过“熵”这个概念:熵越大越不平衡
信息熵越小,分类区分度越好,排前面 ,信息熵越大(越不确定,意味着越糊涂)
用我们陈老师的话来说就是:把聪明的特征区分排前面!!!!
“基尼系数”:
基尼系数越小,意味着信息越确定
而这两个比较下来的话,算法时间复杂度的角度:推荐基尼系数
直观的看一下分类的图:
一就是一二就是二,如果切割的很细,就容易出现过拟合
好的,懂得了工式和原理,我们写一个DecisionTree类(代码注释均已标出),这样更加便于理解:
样本点:
dt = DecisionTree() dt.fit(X,y) print(dt.tree)
调用后生成的树:
预测新样本:
dt.predict(t,r) print(r)