深度学习主要涉及人工神经网络,它在处理非结构化数据(如图像、文本等)的预测问题中通常优于其他算法或框架。然而,当涉及到结构化数据时,基于决策树的算法如XGBoost表现更佳。 首先说一下结论,神经网络算法更适合同质类数据(即数据的每一维变量是有同样含义的,比如图像中的像素和文字中的字符),决策树算法更适合异质类数据(比如风控场景中的年龄、收入、职业)。
小数据量多特征,集成树模型优于神经网络。数据量增大后神经网络优势体现。 结论上大部分项目首选xgboost,速度快效果好用时少。特定复杂又大的项目,神经网络调参
数据挖掘比赛中大部分数据是feature类数据。所谓feature类数据,就是每一维都有明确的含义, 比如房价预测的时候,数据里各维分别表示房子大小,楼层,离地铁站距离,是否是学区房等等; 与之对应的是raw data数据,比如图像、语音等等,一个像素点和一个波幅的值没有明确的含义。 对于feature类数据,用决策树还是一个蛮好的选择,既有非线性拟合能力, 又可解释,而且又有比较完整的理论指导你如何调参。神经网络虽然有非线性拟合能力, 但是解释性不强,参数不太好调。对于raw data类数据,神经网络有独特的优势, 通过data driven的方式可以学习到一些比较好的representation, 比如在图像和语音里,神经网络代表着当前最先进的生产力
神经网络尤其是深度神经网络适用的场景是图片、视频、音频、文字这样的,有大量特征, 每个特征和最终结果都可能有关但关系又不那么明显(所谓从特征到结果有较大的gap, 你用一个像素去判断手写数字几乎就是瞎猜,但是用一个特征判断泰坦尼克号乘客的生存情况 准确率很有可能高于50%),容易获得海量数据(10^5甚至10^6以上)的场景。 深度神经网络可以从大量特征中提取更高级的特征,海量数据可以减弱过拟合。 而传统数据挖掘任务相对而言特征数量较少,特征与结果之间的关系更为明显, 数据量相对较低。如果使用深度神经网络,很有可能会造成严重的过拟合。 对这类任务,一般采用特征工程+集成学习的方法。
XGboost
XGBoost并不是一个模型,而是属于一种机器学习领域(而非深度学习)的集成学习算法(或者说框架,或者tree boosting system),XGBoost代表eXtreme Gradient Boosting,属于一种tree boosting方法或者叫GBDT方法(Gradient Boosting Decision Tree),作用是对多个弱(weak)模型做集成学习(ensemble of models)构成一个强模型,这些模型一般都是决策树结构(比如CART即Classification And Regression Tree),训练目标是损失函数 + 正则项(即Regularized Learning Objective),XGBoost完成的任务一般就是分类(classification)、回归(regression)、排序(ranking)