为什么在实际的kaggle比赛中，GBDT和Random Forest效果非常好？
先说结论，不对，random forest在各种比赛里面效果一般，有些人用random forest名次不错并不是因为用了random forest，而是他们特征工程做的比较好，也许他们的特征工程用了gbm，dl等等。特征工程做的很好，那后面用什么模型差别并不是特别大。 下面展开说一下，欢迎讨论： gbm和dl在kaggle中是首选，单个模型效果通常不需要复杂的特征工程就不错。gbm甚至不需要太多时间去调参数也可以达到不错的结果，但是deep learning通常要花比较多的时间去调网络结构，调优化器。和deep learning一样，GBM有overfit甚至perfect fit的能力，这一点在实际应用中很重要。overfit能力强，也就是可塑性强，然后我们要解决的问题就是如何把模型训练的“恰好”。GBM的软件包通常都有early stopping的功能，early stopping让我们可以尽量的去训练一个“恰好”的模型。有时候我会想GBM和增强学习中的explore & exploit思想有相通之处。具体来说，每一次我们训练一个新的weak learner的时候，我们会选一个新的随机样本（random sample），在这个随机样本上面我们先用已经训练好的模型进行预测，这其实就是exploit的过程，然后我们根据这个随机样本上的真实值和预测值计算residual（残差）来训练新的树，这像是explore的过程。线性回归模型就缺乏很强的overfit能力。如果实际数据恰好符合线性模型的关系，那我们可以得到很好的结果，可是如果实际数据不符合线性模型的关系呢？我们可能就需要做特征工程（feature engineering）了。可是特征工程又是一个比较主观的过程。 gbm的overfit 能力强也可以从非参数模型的角度来解释，这是tree的优势，random forest 的perfect fit能力很差，甚至可以说不如单棵树，这是因为random forest的tree是独立训练的，互相没有写协作。可以说random forest虽然是非参数模型，但是有点浪费这个先天优势了。 从explore & exploit 角度看，random forest的训练没有像gbm那样exploit，是一直explore。 有不少人对特征工程有误解。大家想一想，在用deep learning做图像类别识别的时候，网络最后一层是什么？是一个softmax函数，那logistic regression呢？也是一个softmax函数而已，那可以不可以认为这个deep learning模型最后一层之前的所有层都是在做特征工程，然后把特征传入一个逻辑回归？如果这样想，那deep learning也不算一个新模型了。还有用gbm做regression，最后一层是什么呢？就是每一棵树的value的一个线性组合，如果用来做分类，那最后一层就变成了softmax，是不是我们可以说gbm本质就是线性回归或者逻辑回归，或者是generalized linear model加上特征工程呢？这样想就没什么新模型了，大多数模型都可以理解为特征工程+generalized linear model。我认为这个看法是不对的。deep learning或者gbm的“特征工程”都是和最后面的generalized linear model同时发生（同时优化）的，这是一个supervised 的“特征工作”。典型的特征工程是NLP里面的word embedding，我们用word2vec把word投射到一个向量空间，这是第一步。第二步我们再去把这些vector拿去建模，比如用来做sentiment analysis。这两个过程的optimization是分开发生的，所以word2vec的word embedding未必是对第二步我们要做的sentiment analysis最优化的。 虽然gbm本身就是emsemble的模型，但是通常大家谈论ensemble的时候，是指手动的emsemble，比如把logistic regression，svm，gbm放在一起ensemble。gbm本身的ensemble是gbm模型的一部分，是程序自动进行的。最近的kaggle比赛中极少有单个模型可以拿奖（多年前可以，deep learning除外）。单个gbm可以得到不错的结果，但是gbm的包那么多，调参也越来越容易，所以差距越来越难拉开。那就需要特征工程和ensemble了。deep learning的网络结构千变万化，所以可能一个deep learning模型就可能拉开很大的差距。换句话说，用gbm的结果的方差比较小了，deep learning还是比较大。 欢迎关注我们的公众号 —— 机器会学习