sklearn(二十):Decision Trees

决策树可以用于classification和regression。
决策树利弊:
优点:

  • model的预测结果容易理解,解释。
  • 与其他model相比,需要较少的preprocessing of data,如:normalization,dummy variable to be created,blank values to be removed。
  • 使用tree的时间复杂度为O(logN)。
  • 该模型能够拟合numerical data and categorical data。
  • 该model能够处理multi-output 问题。

缺点:

  • tree可能造成overfitting问题,解决该问题办法有:减枝、设定叶子节点最少sample、设定tree的深度。
  • 构建的tree,可能随着data中的一些small variation而发生较大变化,为克服这个问题,我们可以将tree用于ensemble model中。
  • an optimal decision tree是一个NP problem,实际的tree algorithm只能保证得到一个“局部最优解”,为了降低这种“局部最优”的影响,我们可以将多棵tree应用于一个ensemble learner中,在该ensemble learner中,每棵tree的sample和feature都通过“有放回随机抽样获得”。
  • decision tree不适用于imbalanced dataset,在这种data中只能构建一种biased tree。因此,在fitting之前,应先balance dataset。

Classification

sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
#criterion:{gini,entropy}。用于判断一个node是否split的标准。
#splitter:{best,random}。选择split一个node的策略,如果=best,则选择能降低criterion的最好的feature 及 splitting value。如果=random,从几个随机的选项中,选择split效果最好的一个。
#max_depth:设定tree的最大深度。
#min_samples_split:要split一个node,其必须满足的最小样本量。
#min_samples_leaf:一个叶子节点必须拥有的最小样本量。
#min_weight_fraction_leaf:各个叶子结点的权重。
#max_features:在寻找最优的split时,所考虑的feature量。
#random_state:设定随机初始状态。
#max_leaf_nodes:最大的叶子节点数。
#min_impurity_decrease:node split前后,criterion差值>该值,则split。
#min_impurity_split:如果node的impurity高于该值,则split。
#class_weight:各个class的权重。
#presort:bool,是否presort???Whether to presort the data to speed up the finding of best splits in fitting. ???

在通过training data获得tree之后,可以通过以下function,将tree画出来。

#通过export_graphviz可以将tree输出为graphviz format。
sklearn.tree.export_graphviz(decision_tree, out_file=None, max_depth=None, feature_names=None, class_names=None, label=’all’, filled=False, leaves_parallel=False, impurity=True, node_ids=False, proportion=False, rotate=False, rounded=False, special_characters=False, precision=3)

下面给出code 示例:

>>> import graphviz 
>>> dot_data = tree.export_graphviz(clf, out_file=None)   #将clf输出为graphviz format
>>> graph = graphviz.Source(dot_data)   #将graphviz format形式的tree转为picture
>>> graph.render("iris")   #将graph存入'iris.pdf'

Regression

sklearn.tree.DecisionTreeRegressor(criterion=’mse’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=False)

Multi-output problems

在将decision tree应用于multi-output问题是,tree变化有2:

  • 每个叶子结点要存储n个output value instead of 1;
  • node的split准则:分别计算各个output的reduction of impurity,然后求n个output的平均值,以此作为是否split的标准;

Tips on practical use

  • Decision tree在高维数据中有overfitting的危险,因此,在用data
    拟合tree之前,最好先进行dimentionality reduction by PCA , ICA , or Feature
    Selection。
  • remember that:每使tree的深度增加一层,则需要double dataset
    size,因此,在拟合tree时要谨慎选择max_depth of tree,以防止overfitting。
  • 在利用training data拟合tree之前,首先要确保training data is balanced。training data的balance可以通过以下几种方法进行:
    从不同的class中抽取同样多的sample。
    使得不同class中sample的sum of weight相同。
  • 在训练tree时,如果input data是sparse matrix,则在training时可先把input
    data转为scipy.csc_matrix。在predict时,把input data转为scipy.csr_matrix。note that:sparse matrix 的训练速度较dense matrix,呈指数级增长。

Tree algorithms: ID3, C4.5, C5.0 and CART

  • ID3:ID3采用贪心的方式,首先,创建一个完全长成的**“多元树”。然后,在利用减枝策略,对多元树进行减枝的处理,以防止其overfitting。在树的生成过程中,每个node的分裂原理如下:寻找一个categorical feature**,使得根据这个feature对node进行分裂后,其**“信息增益entropy”**能够达到最大。ID3使用entropy:信息增益,作为分支准则
  • C4.5是在ID3的基础上做了进一步的改进:1)ID3的feature为categorical,在C4.5中,允许data的feature为连续值,C4.5将把这些连续值划分为多个interval,然后对属于每个interval的数值label,从而达到categorical feature的效果;2)C4.5将训练好的tree转化为了一系列的if-then rules。并且根据这些if-then rule预测的精确度来决定他们被应用的order。当砍掉一个if-then rules,可以增加整体的精确度的话,则砍掉这条if-then语句。C4.5使用entropy:信息增益比率,作为分支准则
  • C5.0与C4.5相比,拥有更小的if-then rule set,占用更少的memory,但是拥有更高的accuracy。C5.0使用entropy
  • CART与C4.5很相似,但是,他创建的是“二叉树”,且支持numerical
    variable,能够进行classification和regression。不建立if-then rule
    set。CART使用gini指数:信息增益,作为分支准则

Mathematical formulation

classification mathematical formulation

classification中,node split的判断准则有两种:
1)采用node split 前后entropy的差值,来判断使用哪个feature进行splitting。
entropy公式如下:


2)采用gini指数来衡量node split前后的信息增益,公式如下:

node split之后,Impurity的计算公式如下:

Regression mathematical formulation

Regression中衡量采用某feature split node效果的标准有2个:
Mean Squared Error:

Mean Absolute Error:

Xm is training data in node m。

决策树模型 ID3/C4.5/CART算法比较

决策树

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
sklearn0.19中文文档 PDF格式高清。 .1. 广义线性模型 1.1.1. 普通最小二乘法 1.1.1.1. 普通最小二乘法复杂度 1.1.2. 岭回归 1.1.2.1. 岭回归的复杂度 1.1.2.2. 设置正则化参数:广义交叉验证 1.1.3. Lasso 1.1.3.1. 设置正则化参数 1.1.3.1.1. 使用交叉验证 1.1.3.1.2. 基于信息标准的模型选择 1.1.3.1.3. 与 SVM 的正则化参数的比较 1.1.4. 多任务 Lasso 1.1.5. 弹性网络 1.1.6. 多任务弹性网络 1.1.7. 最小角回归 1.1.8. LARS Lasso 1.1.8.1. 数学表达式 1.1.9. 正交匹配追踪法(OMP) 1.1.10. 贝叶斯回归 1.1.10.1. 贝叶斯岭回归 1.1.10.2. 主动相关决策理论 - ARD 1.1.11. logistic 回归 1.1.12. 随机梯度下降, SGD 1.1.13. Perceptron(感知器) 1.1.14. Passive Aggressive Algorithms(被动攻击算法) 1.1.15. 稳健回归(Robustness regression): 处理离群点 (outliers)和模型错误 1.1.15.1. 各种使用场景与相关概念 1.1.15.2. RANSAC: 随机抽样一致性算法(RANdom SAmple Consensus) 1.1.15.2.1. 算法细节 1.1.15.3. Theil-Sen 预估器: 广义中值估计 1.1.15.3.1. 算法理论细节 1.1.15.4. Huber 回归 1.1.15.5. 注意 1.1.16. 多项式回归:用基函数展开线性模型 1.2. 线性和二次判别分析 1.2.1. 使用线性判别分析来降维 1.2.2. LDA 和 QDA 分类器的数学公式 1.2.3. LDA 的降维数学公式 1.2.4. Shrinkage(收缩) 1.2.5. 预估算法 1.3. 内核岭回归 1.4. 支持向量机 1.4.1. 分类 1.4.1.1. 多元分类 1.4.1.2. 得分和概率 1.4.1.3. 非均衡问题 1.4.2. 回归 1.4.3. 密度估计, 异常(novelty)检测 1.4.4. 复杂度 1.4.5. 使用诀窍 1.4.6. 核函数 1.4.6.1. 自定义核 1.4.6.1.1. 使用 python 函数作为内核 1.4.6.1.2. 使用 Gram 矩阵 1.4.6.1.3. RBF 内核参数 1.4.7. 数学公式 1.4.7.1. SVC 1.4.7.2. NuSVC 1.4.7.3. SVR 1.4.8. 实现细节 1.5. 随机梯度下降 1.5.1. 分类 1.5.2. 回归 1.5.3. 稀疏数据的随机梯度下降 1.5.4. 复杂度 1.5.5. 实用小贴士 1.5.6. 数学描述 1.5.6.1. SGD 1.5.7. 实现细节 1.6. 最近邻 1.6.1. 无监督最近邻 1.6.1.1. 找到最近邻 1.6.1.2. KDTree 和 BallTree 类 1.6.2. 最近邻分类 1.6.3. 最近邻回归 1.6.4. 最近邻算法 1.6.4.1. 暴力计算 1.6.4.2. K-D 树 1.6.4.3. Ball 树 1.6.4.4. 最近邻算法的选择 1.6.4.5. leaf_size 的影响 1.6.5. 最近质心分类 1.6.5.1. 最近缩小质心 1.7. 高斯过程 1.7.1. 高斯过程回归(GPR) 1.7.2. GPR 示例 1.7.2.1. 具有噪声级的 GPR 估计 1.7.2.2. GPR 和内核岭回归(Kernel Ridge Regression)的比 较 1.7.2.3. Mauna Loa CO2 数据中的 GRR 1.7.3. 高斯过程分类(GPC) 1.7.4. GPC 示例 1.7.4.1. GPC 概率预测 1.7.4.2. GPC 在 XOR 数据集上的举例说明 1.7.4.3. iris 数据集上的高斯过程分类(GPC) 1.7.5. 高斯过程内核 1.7.5.1. 高斯过程内核 API 1.7.5.2. 基础内核 1.7.5.3. 内核操作 1.7.5.4. 径向基函数内核 1.7.5.5. Matérn 内核 1.7.5.6. 有理二次内核 1.7.5.7. 正弦平方内核 1.7.5.8. 点乘内核 1.7.5.9. 参考文献 1.7.6. 传统高斯过程 1.7.6.1. 回归实例介绍 1.7.6.2. 噪声数据拟合 1.7.6.3. 数学形式 1.7.6.3.1. 初始假设 1.7.6.3.2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sarah ฅʕ•̫͡•ʔฅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值