机器学习面试——XGBoost,GBDT,RF(上)
1、常见的集成思想
bagging:基学习器之间并行训练,且学习器之间没有依赖,像是集体决策的过程,每个个体都进行单独学习,再通过投票的方式做最后的集体决策。常见的算法有随机森林
boosting:基学习器之间串行训练,且学习器之间存在依赖,将基学习器层层叠加,每一层在训练的时候,对前一层基学习器分错的样本给予更高的权重。类似于人类的学习过程,对于错误,进行加强学习,直到犯错误的次数减少到很低的程度。常见的算法有AdaBoost、GBDT、XGBoost。
Stacking:首先使用原始数据训练出一级学习器,将一级学习器的输出作为输入并使用对应原始标记作为新标记,组成新的数据集来训练二级学习器(结合学习器)。常用于模型融合。
2、从偏差和方差的角度解释Bagging和Boosting
偏差是由于分类器的表达能力有限导致的系统性错误;
方差是由于分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合;
bagging是采用分而治之策略,通过对训练样本进行多次采样,并分别训练出不同模型,然后做综合,减小集成分类器之间的方差。
boosting是通过逐步聚焦于基学习器分错的样本,减小集成分类器的偏差。
2、随机森林的随机性?
数据集:有放回随机取样
特征:随机选取特征,进行分割点计算
3、Adboost、提升树(boosting tree),梯度提升树的异同?
相同:
- 加法模型:模型是基学习器进行累加,得到一个最终的加法模型。
- 前向分步算法:从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,简化优化的复杂度。
区别:
Adaboost的实现步骤:
(1)初始化权重分布,假设模型有均匀的权值分布。
(2)对数据进行学习,计算Gm(分类器)在训练数据集上的分类误差率,
(3)计算Gm(分类器)系数,系数代表在最终分类器上的重要性。
(4)更新权重(m步的权重分布),
(5)对基学习器进行累加,组成线性组合,得到最终的分类器:
注释:I(x)是指示函数,sign(x)是符号函数。
,
提升树(Boosting Tree)的实现步骤:
提升方法实际采用加法模型和前向分布算法,以决策树为基函数的提升方法称为提升树,对分类问题决策树是二叉分类树,损失函数时指数损失,对于回归问题决策树是二叉回归树,损失函数是均方损失。
分析:
其中,r是当前模型拟合数据的残差。
梯度提升树(Gradient boosting DT):
将当前模型损失函数的负梯度作为残差的近似替换值。
4、RF和GBDT的区别
相同点:都用了集成思想
不同点:
- RF是bagging思想,减小了方差,GBDT是boosting思想,减小了偏差
- RF是串行,GBDT是并行
- RF是分类和回归树,GBDT只能回归树
- RF是采用投票进行最终决策,GBDT是多棵树累加决策
- RF对异常值不敏感,且不需要归一化,GBDT对异常值敏感(串行),需要归一化(GBDT的树是在上一颗树的基础上通过梯度下降求解最优解,归一化能收敛的更快,而随机森林本来就是通过减少方差提高性能的,树之间建立关系是独立的,不需要归一化)
5、GBDT的缺点?
- 在高维稀疏的数据集上,表现性不好。
- 训练过程是串行,需要在决策树内部采用一些局部并行的手段提高训练速度。
6、GBDT和XGBoost的异同?
不同:
- GBDT用了一阶导数信息,XGBoost用了一阶、二阶导数信息
- GBDT不执行并行化,XGBoost在数据和特征方便增加了并行化处理,(数据采样、特征重要性排序)
- GBDT对异常值敏感,XGBoost新增了缺失值处理策略
- GBDT只能是树模型,XGBoost可以自定义基学习器
- XGBoost增加了正则化的策略
7、Xgboost 如何寻找最优特征?是有放回还是无放回呢?
Xgboost在训练的过程中给出各个特征的增益评分,最大增益的特征会被选出来作为分裂依据,从而记忆了每个特征对在模型训练时的重要性。从根到叶子中间节点涉及某特征的次数作为该特征重要性排序。Xgboost是不放回,还支持子采样和列采样。
8、Xgboost为什么要用泰勒展开,优势在哪里?
XGBoost使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准,使用泰勒展开取得函数做自变量的二阶导数形式,可以再不选定损失函数具体形式的情况下,仅仅依靠输入数据的值就可以进行叶子分裂优化算法,本质上将损失函数的选取和模型算法优化/参数选择分开,这种去耦合增强了XGBoost的适用性,使得模型按需选取损失函数。
9、RF如何处理缺失值?
方法一:将数值型变量中的缺失值用其所对应类别中的中位数替换。把描述型变量缺失的部分用所对应类别出现最多的数值替代。
方法二:在方法一的基础上做了升级,引入了权重变量,即对需要替换的数据先和其他数据做相似度测量,如果是分类变量,则用没有缺失的观测实例相似度的权重投票,如果是连续型变量,则用加权平均和进行填充。
10、XGBoost如何处理缺失值?
xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。
11、随机森林如何评估特征重要性?
12、XGBoost如何给特征评分?
在CART树中,通过基尼指数选取分离点的特征,一个特征被选中的次数越多,该特征的评分就越高。
在XGboost中,枚举不同的树结构,利用打分函数来寻找最优的结构树。从树深度0开始,每个节点遍历所有特征,对于单个特征,首先对特征的值进行排序,然后线性扫描该特征进行选择最好的切割点,再比较所有的特征,选择信息增益增高的特征为当前节点。
假设年龄这个特征,我们首先对年龄进行排序,设定阈值a,将小于阈值a的分为一类,大于阈值a的分为一类,计算该特征的基尼指数,若存在多个阈值,就会出现多个基尼指数值,选择最大的那个为当前的阈值,并计算所有特征(年龄、性别、职业等),选择最大的gini指数的特征为当前节点。这种只看到当前节点的思想就是greddy exact。
引入新叶子的惩罚项是为了优化目标函数,对应了树的剪枝,当分割阈值小于惩罚项,就忽略这个分割。
机器学习面试——XGBoost,GBDT,RF(上)相关推荐
- 机器学习面试问题汇总—史上最详细
本人计算机小白一枚,将自己学到的知识点整理出来,一方面是对自己学习的小总结,另一方面是欢迎大家批评指正.如果觉得写得还可以,大家可以转发关注此博客,谢谢!后续会有新算法持续更新~.. . ------ ...
- [机器学习] 面试常见问题+解析汇总
机器学习面试题的分类 The first really has to do with the algorithms and theory behind machine learning. You'll ...
- 机器学习算法总结--GBDT
参考如下 机器学习(四)- 从gbdt到xgboost 机器学习常见算法个人总结(面试用) xgboost入门与实战(原理篇) 简介 GBDT是一个基于迭代累加的决策树算法,它通过构造一组弱的学习器( ...
- BAT机器学习面试1000题系列(第1~305题
1 请简要介绍下SVM,机器学习 ML模型 易SVM,全称是support vector machine,中文名叫支持向量机.SVM是一个面向数据的分类算法,它的目标是为确定一个分类超平面,从而将不同 ...
- BAT机器学习面试1000道
本文转载自: https://blog.csdn.net/sinat_35512245/article/details/78796328 1.请简要介绍下SVM. SVM,全称是support vec ...
- BAT机器学习面试1000题系列(第150~279题)
首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat leadai的博客 RSS订阅 转 BAT机器学习面试1000 ...
- 【转】BAT机器学习面试1000题系列(1~50)
BAT机器学习面试1000题系列 整理:July.元超.立娜.德伟.贾茹.王剑.AntZ.孟莹等众人.本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者 ...
- BAT机器学习面试1000题系列(详细版)
BAT机器学习面试1000题系列 置顶 2017年12月14日 15:19:15 阅读数:20913 几点声明: 1.本文的内容全部来源于七月在线发布的BAT机器学习面试1000题系列: 2.文章中带 ...
- 太给力了!40000字整理了机器学习面试200题!
来源:CSDN 刷题,是面试前的必备环节.本文作者总结了往年BAT机器学习面试题,干货满满,值得收藏. 1.请简要介绍下SVM. SVM,全称是support vector machine,中文名叫支 ...
最新文章
- json_encode 中文不乱码
- windows xp远程桌面没有反应
- 测试tcp连接数工具_后端开发程序员不知道压力测试怎么能行
- 大地形实时渲染资源网收集
- new Random().Next(1, 100); 多线程同时执行结果很高概率相同,
- OnlineJudge 离线题库采集
- 原型模式 java 深浅_JAVA设计模式---原型模式--浅客隆和深克隆
- 八个角最多可以把平面分成多少部分?_一个空间最多能被分成几块?
- c++ list sort
- MySQL 修改数据
- 基于vue框架项目开发过程中遇到的问题总结(三)
- python协同过滤调用包_简单的python协同过滤程序实例代码
- 为什么 Cloudera 要创建 Hadoop 安全组件 Sentry ?
- C/C++[PAT B level 1036]图形输出
- 【C语言】15-预处理指令1-宏定义
- oracle 给权限语句,oracle权限语句大全
- 3dmax室内模型导入Unity3d 快速烘焙光照【2020】
- 【GA MTSP】基于matlab遗传算法求解多旅行商问题(同起点不同终点)【含Matlab源码 1325期】
- 【网络编程--UDP、TCP】
- Android-Glide清除缓存图片