一 原理
决策树是一种基本的分类与回归方法。根据特征对数据不断划分,直到满足停止条件。决策树学习的本质是从训练数据中归纳出一组分类规则。
1. 过程:
学习时:利用训练数据,根据损失函数最小的原则建立决策树模型;
预测时:对给定的样本,利用建立好的树模型进行分类。
2. 特征选择:
每次选择一个特征对数据集进行划分,特征选择方法有如下几种
-
信息增益(ID3)
用熵来度量数据的无序程度,熵定义为信息的期望值。
x i x_i xi的信息定义为: l ( x i ) = − l o g 2 p ( x i ) l(x_i )=-log_2p(x_i) l(xi)=−log2p(xi),
其中 p ( x i ) p(x_i) p(xi)是选择该分类的概率。熵 H = − ∑ i = 1 n P ( x i ) l o g 2 p ( x i ) H=-∑_{i=1}^nP(x_i) log_2p(x_i) H=−∑i=1nP(xi)log2p(xi)
信息增益方法:每次选择划分后数据集熵减少最多的特征。
-
信息增益比(C4.5)
信息增益方法存在偏向于选择取值较多的特征的问题,使用信息增益比对其进行校正:
g R ( D , A ) = g ( D , A ) / H A ( D ) g_R (D,A)=g(D,A)/H_A (D) gR(D,A)=g(D,A)/HA(D)H A ( D ) = − ∑ i = 1 n ∣ D i ∣ / ∣ D ∣ l o g 2 ∣ D i ∣ / ∣ D ∣ H_A (D)=-∑_{i=1}^n|D_i |/|D| log_2|D_i |/|D| HA(D)=−∑i=1n∣Di∣/∣D∣log2∣Di∣/∣D∣
其中n是特征A取值的个数
-
CART方法
假设决策树是二叉树,内部节点特征的取值为是、否,左边是,右边否。
回归:特征选择方法为选择划分后平方误差最小的特征和切分点
分类:特征选择方法为基尼指数
基尼指数:
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=∑_{k=1}^Kp_k (1-p_k )=1-∑_{k=1}^Kp_k^2 Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2适合样本特征取值为0,1的情况
3. 停止划分的条件
- 程序遍历完所有划分数据集的属性(不包括cart方法);
- 每个分支下所有实例都具有相同的分类;
- 信息增益小于阈值;
- 节点的样本数低于阈值;
- 达到最大深度;
二 实现
-
sklearn
DecisionTreeClassifier()
-
参数
splitter:字符型;默认“best”,确定每个节点的分支策略,输入“random”为使用随机一部分特征的随机分支,best为选出来的一些随机特征中的最优的,可以减少过拟合。
criterion:不纯度的指标;默认为gini,[‘gini’,‘entropy’]
max_depth:树的最大深度,超过最大深度就被剪枝;默认为None;适合样本少维度高的数据集;可以从3开始
max_samples_leaf:在回归中,可以让模型变的更加平滑,可以搭配max_depth一起用
class_weight:样本不均衡,可以给少量标签更多的权重,向捕获少数类的方向建模。
min_samples_leaf:一个节点在分支后的每个子节点都必须包含至少的个样本,否则就不会进行分支
min_samples_split:一个节点必须要包含至少的训练样本个数,这个节点才允许被分支。
max_features:限制分支时考虑的特征个数,超过限制个数的特征都会被舍弃,默认值为总特征个数得开方取整,既能降低模型复杂度也能提高模型复杂度
min_impurity_decrease:限制信息增益的大小,信息增益小于设定数值得分支不会发生
random_state:若等于某一个数,说明让生成的树或者森林是固定的;不然每次选择的特征是随机的
三 优缺点
优点:
- 不需要前提知识或参数假设;
- 适合高维数据;
- 简单易于理解;
- 短时间内处理大量数据,得到可行且效果较好的结果。
- 能够同时处理数据型和常规性属性。
缺点:
- 对于各类别样本数量不一致数据,信息增益偏向于那些具有更多数值的特征。
- 易于过拟合。
- 忽略属性之间的相关性。
- 不支持在线学习。