决策树系列算法总结(ID3, C4.5, CART, Random Forest, GBDT)

来源:互联网 发布:java redis list对象 编辑:程序博客网 时间:2024/05/18 13:45

前言

线性系列的算法(比如logistic regression,SVM;当然,它们不完全是线性的)的逻辑一般是求每个特征对最终分类结果的贡献权重。但是,这种线性组合并不总是有意义的。在这种情况下,如果不想使用多层的神经网络做分类的话,用决策树系列的算法就是不错的选择。

注:这里不想使用神经网络的情况有很多,比如训练样本不多,不足以支撑神经网络那么多参数的时候(经验上,样本数应该至少是参数的10倍)。又或者,希望更快出结果的时候(神经网络无论是写代码,调参,训练都比较耗时)。

另,本文更多的是总结性质的,只写核心思想,试图对决策树系列算法给出一个overview,算法细节请参看相关引文。更适合对决策树算法有一定了解的人。。

决策树

决策树的训练算法主要有三种。不过它们的总体逻辑都是一样的,即自顶向下的构建决策树。在当前树的每个叶子节点做判断,看其是否需要继续向下生成子树。如果需要的话,选取某一个特征作为判断依据,向下分裂一层。如此直至没有任何叶子节点可以继续分裂。同时,为了防止过拟合,在用上述方法生成决策树后,会对决策树进行剪枝,即将某一个非叶子节点下面的子树全都砍掉,让当前非叶子节点称为叶子节点。

ID3

ID3算法是早期的决策树算法,1975年由J. Ross Quinlan提出。 
其主要思想是根据信息增益来进行节点分裂时的特征选择。即贪心的选取信息增益最大的特征来作为分裂依据。 

C4.5

C4.5算法是ID3算法的改进版,主要改进的三点: 
1. 用信息增益率来进行feature选择,避免了ID3算法中倾向于选择取值较多的feature的问题 
2. 可以处理连续值的feature。主要做法是尝试各种连续feature的二分方式,取信息增益最大的切分方法 
3. 加入了对决策树进行剪枝的策略


另外,C4.5算法还有一个改进版的C5.0算法。不过C5.0是C4.5的商业化版本,细节并没公开。主要改进就是用了boosting,可以用更少的memory,更小的rule set,但是能获得更高的准确率。

CART

CART(Classification and Regression Tree)算法跟ID3和C4.5的不同在于: 
1. 其建立的是二叉树。虽然算法流程跟上面两个算法差不多,不过其每次只对feature进行二分。对于连续的feature就是普通的二分,对于离散的,则是对离散feature的每个取按照是不是这个值来分。 
2. 其使用的判断样本的不纯度的方法不再是基于熵,而是基于Gini系数 
3. 其不仅可以用来做分类,还可以用来做回归(做回归时,衡量不纯度用的是最小二乘误差,如果想详细了解回归可以参考GBDT部分) 

随机森林

其核心思想就是训练多棵决策树,来共同决策。

具体做法就是,对于有N个样本的数据,假设总共有M个feature。则: 
1. 首先,有放回的随机选取N个样本 
2. 随机选取m个feature 
3. 构建一颗决策树,返回第一步,循环

其中决策树的个数是需要认为给定的hyperparameter 

GBDT

GBDT全称Gradient Boosting Decision Tree,又叫 MART(Multiple Additive Regression Tree)。跟前面几种算法有本质区别: 
1. 其本质是回归决策树(regression decision tree),更适合做回归,当然也可以做二分类,设定一个阈值即可。 
2. 虽然其也是训练多个决策树来生成最后的结果。不过其并不是通过这些树的投票或者平均数来生成最终的结果,而是通过这些树输出的累加(具体看下面的引文)。核心思想是每个决策树只学习真理的一小部分


原创粉丝点击