好,又来到一个重难点区域,前进!
目录:
机器学习常见面试问题汇总
问题汇总(1):逻辑回归
问题汇总(2):支持向量机
问题汇总(3):树模型
问题汇总(4):聚类
问题汇总(5):神经网络
问题汇总(6):EM算法
问题汇总(7):朴素贝叶斯
三种决策树:ID3、C4.5、CART的内容
- ID3:基于信息增益确定分支节点,增益越大,纯度越高。对取值数目较多的属性有所偏好。
- C4.5:基于信息增益率确定分支节点,增益率越大,纯度越高。对取值数目较少的属性有所偏好,但是C4.5并不是直接根据增益率决定划分依据,而是先从候选划分当中找出信息增益高于平均水平的属性,再从中选增益率最高的。对于连续值特征的处理,采用二分法划分数据集;对于缺失值,则将该样本划分入所有子节点,但是权重要调整。
- CART:基于基尼指数确定分支节点。基尼指数(又叫基尼不纯度)的意义是从数据集D中随机抽取两个样本类别标识不一致的概率。基尼指数越小,纯度越高。是属于分类回归都可以做的决策树,支持所有类型。
补充:
- 多变量决策树,可以实现‘斜划分’(即不沿坐标轴平行线划分)
- 信息熵和基尼指数的关系?
(信息熵在x=1处一阶泰勒展开就是基尼指数)
优点:
- 可以处理非线性特征
- 虑了变量之间的相互作用
- 对于缺省值问题也能够获得很好得结果
- 使用决策树训练得到的模型相当直观,在业务上也非常容易解释。决策树并不是以概率分数作为直接结果,但是可以使用类概率反过来分配给终端节点。这玩意很容易过拟合,但是随机森林(一般用CART树组成,不用C4.5的原因,可能是因为C4.5会剪枝?咱随机森林是不会剪枝的,这辈子都不会剪枝的)克服了这个问题。
剪枝
- 预剪枝
- 后剪枝:(三种方法)
Reduced-Error Pruning(REP,错误率降低剪枝),最简单,需要验证集
Pessimistic-Error Pruning(PEP,悲观错误剪枝),C4.5剪枝方法
Cost-Complexity Pruning(CCP,代价复杂度剪枝),CART剪枝方法
随机森林
优点:
- 简单,容易实现,计算开销小,并且它在很多现实任务中展现出来了强大的性能。它相对于Bagging能够收敛于更小的泛化误差,且训练效率要优于Bagging,被誉为“代表集成学习技术水平的方法”。
- 它能够处理很高维度(feature很多)的数据,并且不用做特征选择
PS:特征子集是随机选择的 - 在训练完后,它能够给出哪些feature比较重要
PS:http://blog.csdn.NET/keepreder/article/details/47277517 - 在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强
- 训练速度快,容易做成并行化方法 (训练时树与树之间是相互独立的 )
- 在训练过程中,能够检测到feature间的互相影响
- 实现比较简单
- 对于不平衡的数据集来说,它可以平衡误差。
- 如果有很大一部分的特征遗失,仍可以维持准确度。
- 随机森林有袋外数据(OOB),因此不需要单独划分交叉验证集
- 对缺失值、异常值不敏感。
缺点:
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
RF与GBDT的异同
相同点:
- 都属于集成学习方法,由多棵树组成,最终结果由多棵树一起决定(不过决定方式不太同)
不同点:
- GBDT是采用boosing方法,RF采用的是baggging方法。
- GBDT里面的树是回归树(毕竟回归树才能算残差呀),RF则回归树和分类树都可以用。GBDT的树一般都是小树苗,比如深度小于5,叶子节点小于10之类的。
- RF的树可以并行生成,GBDT只能串行生成。
- 对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来。
- 随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成。
- 随机森林是通过减少模型方差(variance)提高性能,GBDT是通过减少模型偏差(bias)提高性能,随机森林相较于GBDT不容易过拟合,但是在大多数情况下,RF模型的精度略低于GBDT模型的精度。
-
随机森林对异常值不敏感,数据样本随机采样,特征随机采样(一般一棵树的特征为
,n为总特征数),GBDT对异常值则较为敏感 。
- 随机森林自带out-of-bag (oob)错误评估功能。 RF的重要特性是不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计,它可以在内部进行评估,也就是说在生成的过程中可以对误差进行无偏估计,由于每个基学习器只使用了训练集中约63.2%的样本,剩下约36.8%的样本可用做验证集来对其泛化性能进行‘包外估计’。
LGB、XGB、GBDT 异同
LightGBM 下的 boosting 简介
xgboost的原理没你想像的那么难
机器学习三大神器: LGB、XGB、GBDT
三者的比较
XGB:
- 允许使用除了CART树之外的弱分类器,如LR。
- xgboost通过对目标函数做二阶泰勒展开,用到了二阶导数信息,求下一步要拟合的树的叶子节点权重。
- 使用列抽样来防止过拟合。
- 做一次pre-sort,这样在选择分裂节点时比较迅速。
- 支持并行化(在特征维度和样本维度)
- 除了类似于GBDT的缩减系数外,xgboost对每棵树的叶子节点个数(相当于做了预剪枝)和权重(相当于L2正则)都做了惩罚,避免过拟合。
- level-wise生长策略。
LGB:(个人使用时,最直观感觉一个字,就是“快”)
- 使用了GOSS/EFB,详见第一篇引用。
- left-wise 生长策略。
- 使用直方图,数据分箱(内存以及计算上有很大优势,且也可以用直方图做差加速)直方图算法只需要遍历桶就行了,时间为O(bin)
- 速度更快,内存消耗更低。
网友评论