决策树的一些概念与探讨

决策树通常包括三个步骤:特征选择、决策树的生成、决策树的修剪。

用决策树分类,从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子节点,这是每一个子节点对应该特征的一个取值,如此递归地对实例进行测试并匹配,直至达到叶节点,最后将实例分到叶节点的类中。

决策树的if-then规则:由决策树的根节点到叶节点的每一条路径构建一条规则,路径上内部节点的特征对应着规则的条件,而叶节点的类对应着规则的结论。每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。

决策树学习本质上是从训练数据集中归纳出一组分类规则,需要一个与训练数据矛盾较小的决策树。所选的条件概率应该不仅对数据有很好的拟合,而且对未知数据有很好的预测。

决策树实际上就是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类过程,这一过程对应着对特征空间的划分,也对应着决策树的构建。

分类过程:

先构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。然后构建叶节点,并将这些子集分到所对应的叶节点中去。如果还有子集未被分类,那就对这些子集选择新的最优特征,继续分割然后递归下去,直到所有训练数据子集都正确分类或者没有合适的特征为止。

虽然用这方法可以对训练数据有很好的分类能力,但对未知的测试数据可能会发生过拟合现象。这就需要对已生成的树进行自下而上的剪枝,让其简化,具有更好的泛化能力。具体就是去掉过于细节的叶节点,让其回退到父节点或更高的节点,将更高的节点改为新的节点。

决策树的生成对应于模型的局部选择,剪枝对应于全局选择。决策树的生成只考虑局部最优,而剪枝则考虑全局最优。

特征选择是决定用哪个特征来划分特征空间。选取的特征应该使得各个子集在当前条件下有最好的分类。

对决策树进行剪枝的原因:由于决策树虽然对训练数据分类很准确,但是对测试数据没有那么准确,会出现过拟合现象,因此需要对决策树进行简化,这个简化过程就称为剪枝。

剪枝是从已生成的树裁掉一些子树或叶节点,并将其根节点或父节点作为新的叶节点。

设H(x)和H(y)分别是x和y的信息熵,如果作出韦恩图那么联合熵H(x,y)就是H(x)和H(y)的并集,H(y|x)=H(x,y)-H(x),它们的互信息I(x,y)[g(x,y)]=H(y)-H(y|x)=H(x)-H(x|y)

信息增益表示得知特征X的信息而使得类Y的信息不确定性减少的程度。

信息增益:特征A对训练数据集D的信息增益g(D,A)为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差:

g(D,A)=H(D)−H(D|A)

这个称为互信息,它度量了在已知A以后D的不确定性的减少程度。由于信息增益的大小是相对于训练数据集而言的,并没有绝对意义,所以在解决相对困难的分类问题时,训练数据集经验熵较大,信息增益值会偏大,反之信息增益值会偏小,而使用信息增益比就可以解决这个问题。

信息增益比:gR(D,A)=g(D,A)/H(D)因为我们不希望H(D)比较大,但是当我们遇到某一些特征的分类个数特别多,有些特征分成几十个类别,而有些特征就分为几个类别,那么分成几十个类别的那些特征就应该惩罚它,也就是用信息增益比。

预剪枝:在决策树生成的时候决定是否剪枝。

后剪枝:先生成决策树,再通过交叉验证来剪枝。

gini系数:对所有样本发生的概率与不发生的概率乘起来再求和。

                                                    Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_{k})=1-\sum_{k=1}^{K}p_{k}^{2}

                                                                   =1-\sum_{k=1}^{K}\left ( \frac{|C_{k}|}{|D|} \right )^{2}

D是总的样本个数,Ck是每一个类别上的个数。

Gini系数就可以把ln(x)这个曲线看作是它切线这条直线的近似。

只有一个是n,其他都是零,很纯,所以叫纯结点。所有都是均值所以叫均结点,这是最不好的情况,对我们的分类决策没有任何好处。例如我给你说这个学校50%的女生与男生,……但如果我知道这是一个理工科的,那么男生的概率就会高一点。

每个叶子的样本数是不一样的。

决策树防止过拟合:在生成每一个节点的时候都考虑这个是否还可以拓展。

预剪枝:

通过设置每个节点至少包含的样本数,比如10,那么再考虑这个节点能否再分的时候如果大于10就继续分下去,否则就不分,或者将它的子节点剪掉就会变成最终的叶子节点。

或者通过给定叶子节点的熵值的阈值来划分,比如给定熵值0.5,就不让它进行进一步的划分。这两种方法都叫做前剪枝。

后剪枝:

先生产一颗庞大的树,然后再考虑其中的哪些节点可以剪枝掉。

由于叶子节点是最终决定样本属于哪个类别的,因此叶子节点越多树也就越复杂,越容易过拟合,所以就让叶子节点数多的让它损失大一些。

Tleaf是叶子节点的数目,作为正则项,超参数a做调节。a=0表明最原始的不剪枝的那棵树是最好的,Tleaf越小越好,当它为1的时候就相当于完全剪枝掉所有的孩子。把所有节点的a值都算出来然后将值最小的剪掉,通过砍掉这些子节点得到从原始到根的n棵树,选出其中最好的一颗。

可以做分类和回归的树简称CART。

猜你喜欢

转载自blog.csdn.net/weixin_38241876/article/details/84891762