赞
踩
决策树是很多算法模型的基础,回顾下
如图,思考一下一个决策问题:是否去相亲,一个女孩的母亲要给这个女孩介绍对象。
决策树相对于LR模型,简单清晰可解释性好很多,就是构造一课树,从根节点走到叶子节点就有答案了。
决策树更像是编程语言中的if-else一样,去做条件判断。
以上就是决策树的基本思想,那么如果有了一棵决策树,就相当于有了一个模型,接下来就是应用了。和其他模型一样,关注的还是决策树如何构造。
决策树基于“树”结构进行决策的,这时我们就要面临两个问题 :
决策树的总体流程是“分而治之”的思想,分而治之之后就是继续用贪心思想去构造,一是自根至叶的递归过程,一是在每个中间节点寻找一个“划分”属性,相当于就是一个特征属性了。接下来我们来逐个解决以上两个问题。
就是说,我第一个节点选哪个特征,选好后往下分叉时继续怎么选特征。后面就重点讲树怎么长的过程。
往下看的前提是能明白信息熵、条件熵、信息增益、信息增益率、基尼指数这些概念,可以参看文章
决策树最核心的就是每个节点该选择哪个特征。ID3算法使用信息增益来进行选择,公式如下。
不过,信息增益有一个问题:对可取值数目较多的属性有所偏好,看公式就能理解。例如:考虑将“编号”作为一个属性。为了解决这个问题,引出了另一个 算法C4.5。
为了解决信息增益的问题,引入一个信息增益率:
G a i n R a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) I V ( a ) = − Σ V v = 1 ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ GainRatio\left( D,a \right) =\frac{Gain\left( D,a \right)}{IV\left( a \right)} \\ IV\left( a \right) =-\underset{v=1}{\overset{V}{\varSigma}}\frac{|D^v|}{|D|}\log _2\frac{|D^v|}{|D|} GainRatio(D,a)=IV(a)Gain(D,a)IV(a)=−v=1ΣV∣D∣∣Dv∣log2∣D∣∣Dv∣
特征a的可能取值数目越多(即V越大),则IV(a)的值通常就越大。IV是实际上是特征的信息熵
信息增益比本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。不过有一个缺点:信息增益率偏向取值较少的特征。
使用信息增益率:基于以上缺点,并不是直接选择信息增益率最大的特征,而是现在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益率最高的特征。
CART:classification and regression tree
ID3和C4.5是使用信息熵来表示纯度,CART是使用基尼指数来表示纯度。
公式表示在样本集合中一个随机选中的样本被分错的概率。
举例来说,现在一个袋子里有2种颜色的球若干个,伸手进去掏出2个球,颜色不一样的概率,这下明白了吧。**Gini(D)越小,数据集D的纯度越高。**基尼指数可以理解为熵模型的一阶泰勒展开
对于某个特征的基尼系数计算公式
G i n i _ i n d e x ( D , a ) = Σ V v ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index\left( D,a \right) =\underset{v}{\overset{V}{\varSigma}}\frac{|D^v|}{|D|}Gini\left( D^v \right) Gini_index(D,a)=vΣV∣D∣∣Dv∣Gini(Dv)
举个例子
假设现在有特征 “学历”,此特征有三个特征取值: “本科”,“硕士”, “博士”,
当使用“学历”这个特征对样本集合D进行划分时,划分值分别有三个,因而有三种划分的可能集合,划分后的子集如下:
1.划分点: “本科”,划分后的子集合 : {本科},{硕士,博士}
2.划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士}
3.划分点: “博士”,划分后的子集合 : {博士},{本科,硕士}}
对于上述的每一种划分,都可以计算出基于 划分特征“学历”= 某个特征值比如本科、硕士、博士 ,将样本集合D划分为两个子集的纯度:
因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)
然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。这里划分直接划分成两个集合噢!如上划分点加入G(D,“本科”)最小,那么划分了两个集合{本科},{硕士,博士}。仍然存在多个类型的集合{硕士,博士}仍然按照上述计算规则进行往下划分
综上案例,实际上CART树是一个二叉树。从二分类视角看CART
决策树的剪枝基本策略有 预剪枝 (Pre-Pruning) 和 后剪枝 (Post-Pruning)。
基本不用ID3和C4.5,仅作原理和演变了解
因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。
按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。
既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如Adaboost、SVM、LR、Knn、KMeans之类则需要归一化?因为对于线性模型,特征值差别很大时,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。 但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。
Classification And Regression Tree(CART)是决策树的一种,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),两者在建树的过程稍有差异。
这里只说回归树了,上述聊的就是分类树
回归树:选择均方差最小的切分点
CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点是基于第j个特征值进行分裂的,设该特征值小于s的样本划分为左子树,大于s的样本划分为右子树。
R
1
(
j
,
s
)
=
{
x
∣
x
(
j
)
⩽
s
}
a
n
d
R
2
(
j
,
s
)
=
{
x
∣
x
(
j
)
>
s
}
R_1\left( j,s \right) =\left\{ x|x^{\left( j \right)}\leqslant s \right\} \,\,and\,\,R_2\left( j,s \right) =\left\{ x|x^{\left( j \right)}>s \right\}
R1(j,s)={x∣x(j)⩽s}andR2(j,s)={x∣x(j)>s}
而CART回归树实质上就是在该特征维度对样本空间进行划分,而这种空间划分的优化是一种NP难问题,因此,在决策树模型中是使用启发式方法解决。典型CART回归树产生的目标函数为:
Σ
x
i
ϵ
R
m
(
y
i
−
f
(
x
i
)
)
2
\mathop {\varSigma} \limits_{x_i\epsilon R_m}\left( y_i-f\left( x_i \right) \right) ^2
xiϵRmΣ(yi−f(xi))2
因此,当我们为了求解最优的切分特征j和最优的切分点s,就转化为求解这么一个目标函数:
min
j
,
s
[
min
c
1
Σ
x
i
ϵ
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
min
c
2
Σ
x
i
ϵ
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\underset{j,s}{\min}\left[ \underset{c_1}{\min}\mathop {\varSigma} \limits_{x_i\epsilon R_1\left( j,s \right)}\left( y_i-c_1 \right) ^2+\underset{c_2}{\min}\mathop {\varSigma} \limits_{x_i\epsilon R_2\left( j,s \right)}\left( y_i-c_2 \right) ^2 \right]
j,smin[c1minxiϵR1(j,s)Σ(yi−c1)2+c2minxiϵR2(j,s)Σ(yi−c2)2]
所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。
后面再补代码吧,有描述错的欢迎指出,不闹笑话。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。