1.算法流程

给定样本集D((x1,y1),(x2,y2)......(xn,yn)),和属性A{a1,a2,....an}

(1)若当前节点样本全部为同一类C,则将当前节点设为叶结点,并将其结点的类别设为C。

(2)若当前结点,属性集A为空,或者样本在属性集A上的取值相同,则将当前结点设为叶结点,并将其结点的类别设为D中数目最多的类。

(3)若当前结点的样本集为空,则把父节点的类别作为当前结点的类别。

(4)否则,从A结点中找出最优的划分属性ai,

(5)对于ai的不同取值av,分别生成子节点,子节点的样本集为D中在ai上取值为av的子集Dv,属性集为、A-ai.

(6)循环递归

2.划分选择

从算法流程中可以看出,决策树算法的关键在于划分属性的选择。

(1)信息增益

信息熵:信息熵越小,表明样本集D的纯度越高

信息增益越大,表明属性a划分所得到的纯度提升越大。

python 调用spss CHAID决策树_机器学习

信息增益对可取值数目较多属性有所偏好

(2)信息增益率

信息增益率对取值数目较少的属性有所偏好

python 调用spss CHAID决策树_递归_02

(3)基尼指数

基尼指数表示随机从样本集中抽取两个样本,两个样本不属于同一类的概论。

python 调用spss CHAID决策树_预测_03

3.剪枝处理

判断增加的分支是否对提高决策树的泛化能力有所帮助,如果不能提升泛化能力则进行剪枝。

(1)预剪枝

在分支之前进行测试,如果没有提升则不进行剪枝。

速度快,但是在当前结点不会提升性能不代表在之后的结点不会提升性能,从而带来了欠拟合的风险。

(2)后剪枝

在决策树建立之后,从下而上进行剪枝,判断将当前分支替换为父结点是否会造成性能的下降,如果不能则替换之。

训练时间久,欠拟合的风险小。

4.连续与缺失值

(1)对连续值的处理是将其离散化。

(2)对缺失值的处理是:

在选择最优划分时,只使用没有缺失值的样本进行计算。

在划分类别时,将有缺失值的样本划分到所有子节点类别中。