决策树

决策树

ID3算法

  1. 信息论基础

    信息论中,熵度量了事务的不确定性,越不确定的事务,它的熵就越大。表示形式如下:

    \[H(X)=-\sum_{i=1}^np_i\log_2 p_i \]

    多个变量联合熵表示如下:

    \[H(X,Y)=-\sum_{i=1}^np(x_i,y_i)\log p(x_i,y_i) \]

    条件熵的表示如下:

    \[H(X|Y)=-\sum_{i=1}^np(x_i,y_i)\log p(x_i|y_i)=\sum_{j=1}^np(y_j)H(X|y_j) \]

  2. ID3算法

    ID3算法是使用信息增益来判断当前节点应该用哪个特征来构建决策树。由上节可知,\(H(X)-H(X|Y)\)它度量了X在知道了Y以后不确定性减少的程度,这个度量我们称为互信息,记为\(I(X,Y)\),在决策树ID3算法中叫做信息增益,信息增益越大,则越适合做分类。

  3. ID3算法过程

    1)先算样本总体的熵H(D)

    2)对于每个特征算其条件熵H(D|A)

    3)计算信息增益I(D,A)=H(D)-H(D|A)

    4)选择对应信息增最大的那个特征作为分类特征。

  4. ID3算法缺点

    1)取值较多的特征比取值少的特征信息增益大

    2)ID3不能应用于连续型数据

    3)没有考虑缺失值

    4)没有考虑过拟合问题

C4.5算法

  1. 对ID3算法缺点的改进

    1)对于取值多信息增益大的问题,引入信息增益比的度量\(I_R(X,Y)\)它定义如下:

    \[I_R(D,A)=\frac{I(A,D)}{H_A(D)} \]

    其中D为样本特征的输出集合,A为样本特征,对于特征熵\(H_A(D)\)定义如下:

    \[H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|Di|}{|D|} \]

    其中n为特征A的类别数,\(|D_i|\)为特征A的第i个取值对应的样本个数,|D|为样本总个数。

    这样,特征越多的对应特征熵越大,它作为分母可以校正信息增益偏向于取值较多特征的问题。

    2)将连续特征的离散化,主要是将相邻两个样本取平均值

    \[T_i=\frac{a_i+a_{i+1}}{2} \]

    3)调节权重,具体略。。。

    4)引入正则化和剪枝的方法

  2. C4.5算法的缺点

    1)决策树算法容易过拟合

    2)二叉树比C4.5生成的多叉树效率更高

    3)C4.5如何应用于回归模型

    4)对数运算和排序计算很耗时

CART算法

  1. 使用基尼系数代替信息增加比

    基尼系数代表了模型的纯度,基尼系数越小,则不纯度越低,特征越好,这和信息增益比是相反的。基尼系数表示为如下:

    \[Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2 \]

    如果是二分类问题,则表示为:

    \[Gini(p)=2p(1-p) \]

    对于给定样本D,假设有K个类别,第k个类别的数量为\(C_k\),则样本的基尼系数表示为:

    \[Gini(D)=1-\sum_{k=1}^K(\frac{|C_k|}{|D|})^2 \]

    特别对于二分类问题,可以表示如下:

    \[Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) \]

    二次计算比对数运算效率更高。基尼系数和熵的曲线非常接近。

  2. CART将多分类改为多次二分类

    计算以\(T_i=\frac{a_i+a_{i+1}}{2}\)作为分类点的基尼系数,选择基尼系数小的点,作为分类点。

  3. CART算法流程

    1)计算当前节点的各个特征对数据集D的基尼系数。

    2)选择基尼系数最小的特征A,将剩余数据分为\(D_1、D2\)两部分

    3)递归直至没有特征或满足误差要求

  4. CART回归算法

    算法输出离散值则为分类,输出连续值则为回归。

    CART回归树的度量目标是,对于任意特征划分特征A,对于划分点s两边分成的数据集\(D_1、D_2\),使得求出的\(D_1、D_2\)的方差最小,表示为:

    \[\underbrace\min_{A,s}[\underbrace\min_{c_1}\sum_{x_i\in (A,s)}(y_i-c_1)^2+\underbrace\min_{c_2}\sum_{x_i\in D_2(A,s)}(y_i-c_2)^2] \]

    其中,\(c_1\)\(D_1\)数据集样本输出均值,\(c_2\)\(D_2\)数据集样本输出均值。

  5. CART剪枝算法

    剪枝,目的是增强算法的泛化能力,类似于线性回归的正则化。

决策树算法总结

决策树算法优点:

  1. 简单直观,生成的树很直观
  2. 不需要预处理,不需要归一化、处理缺失值等
  3. 预测代价是\(O(\log _2m)\),m为样本数
  4. 可以处理离散值和连续值
  5. 可以处理多维输出分类
  6. 可解释性强
  7. 可以用剪枝提高泛化能力
  8. 对异常点容错性较好,健壮性高

决策树算法缺点:

  1. 容易过拟合
  2. 样本发生改变,树结构剧烈变动
  3. 最优决策树是一个NP难问题,通过启发式方法寻找决策树
  4. 比较复杂的关系很难用决策树学习
  5. 某些特征样本比例过大,决策树容易偏向这些特征

scikit-learn决策树算法使用

scikit-learn决策树算法使用CART算法,可以做分类和回归,分类的类是DecisionTreeClassifier,回归决策树对应的是DecisionTreeRegressor。

  1. 主要参数

    1)criterion:默认是gini、即CART算法,也可是entropy即信息增益,回归时使用mse或者mae

    2)splitter:特征选择的标准best或者random

    3)max_features:

    4)max_depth:决策树的最大深度

    5)min_sample_split:限制子树继续划分的条件

    6)其他

  2. 注意事项

    1)当样本少而特征多时,很容易过拟合

    2)在样本少而特征多时,推荐先做维度规约,如主成分分析PCA、特征选择Losso或者独立成分分析ICA等,维度下降后,决策树模型效果更好。

    3)注意观察样本,分布是否均匀。

  3. 可视化决策树(略)

  4. DecisionTreeClassifier实例

    from sklearn.tree import DecisionTreeClassifier
    clf = DecisionTreeClassifier(max_depth=4)
    clf.fit(X,y)
    z=clf.predict(np.c_[xx.raverl(),yy.ravel()])
    
posted @ 2020-05-13 15:45  hi_heisen  阅读(178)  评论(0)    收藏  举报