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(上)相关推荐

  1. 机器学习面试问题汇总—史上最详细

    本人计算机小白一枚,将自己学到的知识点整理出来,一方面是对自己学习的小总结,另一方面是欢迎大家批评指正.如果觉得写得还可以,大家可以转发关注此博客,谢谢!后续会有新算法持续更新~.. . ------ ...

  2. [机器学习] 面试常见问题+解析汇总

    机器学习面试题的分类 The first really has to do with the algorithms and theory behind machine learning. You'll ...

  3. 机器学习算法总结--GBDT

    参考如下 机器学习(四)- 从gbdt到xgboost 机器学习常见算法个人总结(面试用) xgboost入门与实战(原理篇) 简介 GBDT是一个基于迭代累加的决策树算法,它通过构造一组弱的学习器( ...

  4. BAT机器学习面试1000题系列(第1~305题

    1 请简要介绍下SVM,机器学习 ML模型 易SVM,全称是support vector machine,中文名叫支持向量机.SVM是一个面向数据的分类算法,它的目标是为确定一个分类超平面,从而将不同 ...

  5. BAT机器学习面试1000道

    本文转载自: https://blog.csdn.net/sinat_35512245/article/details/78796328 1.请简要介绍下SVM. SVM,全称是support vec ...

  6. BAT机器学习面试1000题系列(第150~279题)

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat leadai的博客 RSS订阅 转 BAT机器学习面试1000 ...

  7. 【转】BAT机器学习面试1000题系列(1~50)

    BAT机器学习面试1000题系列 整理:July.元超.立娜.德伟.贾茹.王剑.AntZ.孟莹等众人.本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者 ...

  8. BAT机器学习面试1000题系列(详细版)

    BAT机器学习面试1000题系列 置顶 2017年12月14日 15:19:15 阅读数:20913 几点声明: 1.本文的内容全部来源于七月在线发布的BAT机器学习面试1000题系列: 2.文章中带 ...

  9. 太给力了!40000字整理了机器学习面试200题!

    来源:CSDN 刷题,是面试前的必备环节.本文作者总结了往年BAT机器学习面试题,干货满满,值得收藏. 1.请简要介绍下SVM. SVM,全称是support vector machine,中文名叫支 ...

最新文章

  1. json_encode 中文不乱码
  2. windows xp远程桌面没有反应
  3. 测试tcp连接数工具_后端开发程序员不知道压力测试怎么能行
  4. 大地形实时渲染资源网收集
  5. new Random().Next(1, 100); 多线程同时执行结果很高概率相同,
  6. OnlineJudge 离线题库采集
  7. 原型模式 java 深浅_JAVA设计模式---原型模式--浅客隆和深克隆
  8. 八个角最多可以把平面分成多少部分?_一个空间最多能被分成几块?
  9. c++ list sort
  10. MySQL 修改数据
  11. 基于vue框架项目开发过程中遇到的问题总结(三)
  12. python协同过滤调用包_简单的python协同过滤程序实例代码
  13. 为什么 Cloudera 要创建 Hadoop 安全组件 Sentry ?
  14. C/C++[PAT B level 1036]图形输出
  15. 【C语言】15-预处理指令1-宏定义
  16. oracle 给权限语句,oracle权限语句大全
  17. 3dmax室内模型导入Unity3d 快速烘焙光照【2020】
  18. 【GA MTSP】基于matlab遗传算法求解多旅行商问题(同起点不同终点)【含Matlab源码 1325期】
  19. 【网络编程--UDP、TCP】
  20. Android-Glide清除缓存图片

热门文章

  1. Screen Painter 程序设计
  2. Linux文件查找命令find,xargs详述
  3. linux 每日学一点《明明白白配置lilo启动引导器》
  4. 【狂神说】分析前后端分离开源项目?
  5. jboss mysql cluster_jboss配置mysql数据库连接池
  6. android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮
  7. 【机器学习】逻辑斯蒂回归概率计算和手动计算对比
  8. JS_13原型与原型链
  9. c++远征之多态篇——虚函数及其实现原理
  10. 驱动的定义、分类、安全性