zoukankan      html  css  js  c++  java
  • 决策树

    决策树

    ID3算法

    1. 信息论基础

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

      [H(X)=-sum_{i=1}^np_ilog_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}^nfrac{|D_i|}{|D|}log_2frac{|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)的方差最小,表示为:

      [underbracemin_{A,s}[underbracemin_{c_1}sum_{x_iin (A,s)}(y_i-c_1)^2+underbracemin_{c_2}sum_{x_iin 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()])
      
  • 相关阅读:
    GIS开发站点收藏
    读取Excel中的数据到DataSet
    SPSS统计功能与模块对照表
    相关性分析主要源码
    Matlab典型论坛
    EasyUI入门视频教程
    利用EF ORM Mysql实体运行程序出错解决方案
    小议
    六、 从Controller中访问模板数据(ASP.NET MVC5 系列)
    五、 创建连接串连接本地数据库(ASP.NET MVC5 系列)
  • 原文地址:https://www.cnblogs.com/guesswhy/p/12882794.html
Copyright © 2011-2022 走看看