转载自:http://hi.baidu.com/hehehehello/blog/item/b2d09752cbda41140df3e35e
1)为了建树时计算均方差,GBDT是对每个分类单独生成一个对连续值划分的决策树森林。所以GBDT对于多分类问题可能不像我们想象的那么适合。同时,GBDT里的决策树与平时我们说的多分类决策树(如C4.5)是不一样的。GBDT里面的决策树并不是用最大熵来作为划分依据的(其实它是找实例含量最大的叶子节点下手,随机找几个feature,然后挑均方差最小的feature&value 做分支切分,这样逐步生成的)
2)决策树类算法相对于SVM/Bayes/Regression类算法的优点在于,它能够允许不同特征组合拥有不同的判别式,不像SVM只能有一个唯一的全局判别式。所以它们尤其适合于不同特征组合会产生不同效应的情形(比如《机器学习》课本里那个看天气打网球的例子)。实际应用中,若不管怎么改核函数SVM都无法获得较好的training结果,那就该考虑用决策树试一下了。
3)决策树类算法的缺点在于,它非常的武断。就像现代考试制度一样,59.9和60.1对于决策树来说可以完全是两码事。而SVM就人性化多了。个人认为这也是为什么决策树要引入gradientboosting的原因,决策树森林很大程度上是通过多个树的加和来弱化了这种武断的条件函数的缺点。至于大家异口同声的过拟合的问题,是可以通过限定叶子节点最小的实例数目来缓解的,个人不认为是大问题。而且过拟合问题不是决策树独有的,神经网络也过拟合呀,cross-validation不就是用来解决这个问题的吗。
4) GBDT的源码推荐elf开源项目:http://elf-project.sourceforge.net/
里面有很多很精彩的C++应用。
5)GBDT一般要生成几百颗树之后才能有较好效果,所以不像C4.5一样,很难直观的从决策树形态看到哪些feature起了决定性作用。不过已经有人在展现方面做了很赞的工作:http://vis.berkeley.edu/courses/cs294-10-fa07/wiki/index.php/FP-Jerry_Ye_and_Jimmy_Chen