决策树(DecisionTree)

一、决策树前置知识准备

    1.1 信息熵

    信息熵也叫香农熵,其计算公式为:

    1.2 条件熵

    在给定X的条件下,所有的不同x值的条件下Y的熵的平均值叫做条件熵。

    计算公式为:

    1.3 纯度度量的公式(值越大越不纯)

    1)信息熵     

    2)基尼系数

                        

    3)错误率    

                        

二、决策树

    sklearn.tree.DecisionTreeClassifier(criterion=’gini’splitter=’best’max_depth=Nonemin_samples_split=2min_samples_leaf=1min_weight_fraction_leaf=0.0max_features=Nonerandom_state=Nonemax_leaf_nodes=Nonemin_impurity_decrease=0.0min_impurity_split=Noneclass_weight=Nonepresort=False)

    2.1 决策树的构建方法:

    决策树的构建是决策树算法的重点。在KNN中我们讲过KD-Tree的构建,决策树的构建方法与此类似。不同的是KD-Tree中的划分方法是具有最大方差的特征进行划分。决策树的划分指标是要求划分的叶子节点的数据足够的“纯”。因此,在决策树(分类)中,我们使用其他的划分指标,如ID3的信息增益,C4.5的信息增益率,CART中的基尼增益率划分等。

    在回归树中,我们使用MSE或者MAE作为数据划分指标,最后的回归值为待测数据点所在的叶子节点的数据点的样本平均值。

    决策树的划分是一种“贪心”的划分,只考虑当前划分的特征能否使得数据足够的纯,不考虑最终的结果,它是不能够回溯的。

    具体的构建方法如下:

    1)计算每个特征的“纯”度值的划分指标(就是上面提到的信息增益、信息增益率、基尼增益率等)的值。

    2)选择“纯”度较低的特征(也就是最优的划分特征)进行数据划分,得到相应的子节点。

    3)重复上面两个步骤,继续划分,直到达到停止条件则停止构建。

    决策树划分的停止条件主要有:

    1)每个叶子节点只有一种类型的时候则停止构建

    2)决策树的层数、迭代次数或者节点中的数据点的个数少于给定阈值,则停止构建。

    考虑到数据点较多的情况下按照停止条件1构建得到的树深度过大(会出现过拟合问题),所以一般采用停止条件2来构建决策树。

    2.2 决策树常见的几种算法

    1) ID3算法

    2) C4.5算法(剪枝操作)

    3) CART算法(二叉树,也是最常用的一种)

    三种算法的基本区别就是数据分割的标准不同,ID3的信息增益C4.5的信息增益率CART中的基尼增益率划分。此外,ID3只能够用于离散数据的处理;C4.5可以处理连续数据点;CART为分类回归树且必须为二叉树。

    2.3 决策树算法效果评估

    决策树算法效果评估方法和一般算法一样,也采用混淆矩阵进行计算准确率、召回率、精确率等指标。

    此外,决策树还可以采用叶子节点的纯度值进行效果评估,值越小效果越好。即:   

         

    其中leaf表示叶子节点的总个数,Dt表示叶子节点中的数据点个数,D表示数据点总个数,H(t)表示“纯”度信息。

    2.4 决策树的特征选择(feature_importances)

    在决策树构建的过程中,我们将信息增益率较大的特征首先进行分割,因此我们认为越是在决策树上层的特征具有越强的作用。所以我们可以适用决策树进行特征选择的操作。

    在sklearn的API中,我们可以运用feature_importances参数输出各个特征的重要性程度值。值越大表示特征越重要,反之亦然。

三、决策树的剪枝操作

    在我们的决策树构建过程中,我们设置停止条件如定义决策树的深度等方法提前结束决策树的构建的方法叫做前置剪枝

    在我们的决策树构建过程中,我们首先建立好决策树,然后根据一定的规则,逐渐剪除叶子节点,直至最后的根节点,将每次剪枝后的模型作为一棵决策树。然后,对这n棵树进行模型训练测试,选择最优的树作为最终的决策树模型。这个过程叫做后置剪枝

    不管是前置剪枝,还是后置剪枝都是决策树算法最简单、最有用的优化方法。

    剪枝的指标:剪枝系数α

    在剪枝过程中,我们认为叶子节点中的数据点个数越多,决策树越复杂,剪枝后的loss值越大。

    这里重新定义新的loss值为:,其中leaf为叶子节点数

    这里我们希望剪枝前后的loss值不变,因此当时,得到剪枝系数α的求解公式为:

                

    其中,表示剪枝后的损失函数值,表示剪枝前的损失函数值,表示剪枝前的叶子节点数。

我们希望剪枝后的模型损失函数最小





猜你喜欢

转载自blog.csdn.net/qq_32241189/article/details/79838852