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算法比较

决策树

猜你喜欢

转载自blog.csdn.net/u014765410/article/details/82950658