机器学习相关问题

1、XGBOOST相比于GBDT有何不同?XGBOOST为什么快?XGBOOST如何支持并行?

(1)GBDT只能用CART回归树,而XGBOOST可以用CART树(回归/分类),还可以用用想LR之类的线性模型,相当于加入L1、L2正则项的LR或线性回归
(2)列抽样,可以并行,不是树粒度上的,是特征粒度上的,block块,并行计算所有信息增益等信息
(3)可处理多种特征,且对缺失值也不用进行处理
(4)GBDT在残差梯度下降方向拟合,一阶导;XGBOOST泰勒展开至二阶导
(5)近似直方图算法,高效生产候选分割点
(6)shrink,缩减,叶子节点同时乘,防止过拟合
(7)可以自己定义评价函数
(8)代价函数含正则化项,防止过拟合

自己的答案:XGboost是梯度提升的改进,区别在于在求解损失函数时使用了泰勒二级展开,并在损失函数中加入了正则项,考虑了模型的复杂度,根据损失函数推导出了新的划分节点的方法
xgboost快是因为加入了正则项可以控制模型的复杂度
并行的方法:可以通过将数据分成若干个小块,并使用多个线程或多台机器并行训练

2、什么是Bias(偏差)和Error(误差)?为什么说Bagging可以减少弱分类器的方差,而Boosting 可以减少弱分类器的偏差?

  • 偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力,偏差越大,预测值越偏离真实数据的标签。
  • 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响,方差越大,预测值的分布越分散。
  • Bagging就是再取样 (Bootstrap) 然后在每个样本上训练出来的模型取平均,所以是降低模型的variance。
  • Boosting 则是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行加权,所以随着迭代不断进行,误差会越来越小,所以模型的 bias 会不断降低。

3、Xgboost 与 GBDT的区别

XGboost是梯度提升的改进,区别在于在求解损失函数时使用了泰勒二级展开,并在损失函数中加入了正则项,控制了模型的复杂度,根据损失函数推导出了新的划分节点的方法,xgboost收敛更快
GBDT使用梯度下降法,计算损失函数的负梯度即残差,是一阶,gbdt选择平方损失最小的最为分裂节点

4、集成学习主要有哪几种框架?工作过程是?

集成学习的集成框架主要有:Bagging,Boosting和Stacking,其中Bagging和Boosting为同质集成,而Stacking为异质集成。
(1)Bagging(Bootstrap Aggregating)
Bagging的核心思想为并行地训练一系列各自独立的同类模型,然后再将各个模型的输出结果按照某种策略进行聚合。例如,分类中可以采用投票策略回归中可以采用平均策略

Bagging主要分为两个阶段:

  • Boostrap阶段,即采用有放回的采样方式,将训练集分为n个子样本集;并用基学习器对每组样本分布进行训练,得到n个基模型;
  • Aggregating阶段,将上一个阶段训练得到的n个基模型组合起来,共同做决策。在分类任务中,可采用投票法,比如相对多数投票法,将结果预测为得票最多的类别。而在回归任务中可采用平均法,即将每个基模型预测得到的结果进行简单平均或加权平均来获得最终的预测结果。

(2)Stacking
Stacking的核心思想是并行地训练一系列各自独立的不同类模型,然后通过训练一个元模型(meta-model)来将各个模型输出结果进行结合。

Stacking也可以分为两个阶段:

  • 分别采用全部的训练样本来训练n个组件模型,要求这些个体学习器必须异构的,比如可以分别是线性学习器,SVM,决策树模型和深度学习模型。
  • 训练一个元模型(meta-model)来将各个组件模型的输出结果进行结合,具体过程就是将各个学习器在训练集上得到的预测结果作为训练特征和训练集的真实结果组成新的训练集;然后用这个新组成的训练集来训练一个元模型。这个元模型可以是线性模型或者树模型。

(3)Boosting
Boosting的核心思想为串行地训练一系列前后依赖的同类模型,即后一个模型用来对前一个模型的输出结果进行纠正。

Boosting算法是可以将弱学习器提升为强学习器的学习算法。学习过程是:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行。直至基学习器数目达到实现指定的值n,最终将这n个基学习器进行结合。

5、解释下随机森林节点的分裂策略

RF节点的分裂策略:对基决策树的每个节点,从节点的属性集合(假如含有d个)中随机选取一个包含k个属性的子集,然后在子集中选择最优的属性用于划分。其中k控制随机性引入情况,当k=d,则和决策树相同;k=1,即随机选取,一般选择。

6、Gbdt的boosting体现在哪里?

使用损失函数的负梯度作为残差,当前模型通过经验风险极小化确定下棵决策树参数

7、GBDT和随机森林的区别?

相同点:
(1)都是由多棵树组成的,都是集成学习算法
(2)最终的结果都是由多颗树一起决定

不同点:
(1)组成随机森林的树可以是分类树,也可以是回归树,但是GBDT只能由回归树组成。
(2)组成随机森林的树可以并行生成,但是组成GBDT的树只能串行生成。
(3)对于最终输出结果,随机森林采用多数投票;而GBDT是将所有的结果累加起来,或者加权起来
(4)随机森林对异常值不敏感,而GBDT对异常值非常敏感
(5)随机森林通过减小方差来提高性能,GBDT通过减小偏差来提高性能

8、还有什么抑制单棵决策树的复杂度的方法?换言之,决策树的避免过拟合的方法?

  • 1.限制树的最大深度
  • 2.限制叶子节点的最少样本数量
  • 3.限制节点分裂时的最少样本数量
  • 4.吸收bagging的思想对训练样本采样(subsample)在学习单颗决策树时只使用一部分训练样本(样本采样)
  • 5.借鉴随机森林的思路在学习单颗决策树时只采样一部分特征(特征采样,同样是bagging的思想)
  • 6.在目标函数中添加正则项惩罚复杂的树结构等。

9、为什么GBDT模型都会使用决策树(CART)来作为基模型呢?

这与决策树算法自身的优点有很大的关系。决策树可以认为是if-then规则的集合,易于理解,可解释性强,预测速度快 。同时,决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖 等。决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化 的,因此你不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)不过,单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法(比如剪枝、最大树深度、最小叶子样本数量、正则项等),抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。


1、Kmeans聚类算法的实现流程。

 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。

算法思想:
以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果

算法描述:
(1)随机适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c各中心的距离,将该样本归到距离最短的中心所在的类;
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。

终止条件:
迭代次数/簇中心变化率/最小平方误差MSE。

2、初始的K个质心怎么选?

最常用的方法是随机选,初始质心的选取对最终聚类结果有影响,因此算法一定要多执行几次,哪个结果更具备解释性,就用哪个结果。

也有一些优化的方法,第一种是选择彼此距离最远的点(KMeans++),具体来说就是先选第一个点,然后选离第一个点最远的当第二个点,然后选第三个点,第三个点到第一、第二两点的距离之和最小,以此类推。第二种是先根据其他聚类算法(如层次聚类)得到聚类结果,从结果中每个分类选一个点。

3、K均值算法的优缺点是什么?

缺点:
受初值和离群点的影响每次的结果不稳定;
结果通常不是全局最优而是局部最优解;
无法很好地解决数据簇分布差别较大的情况(也就是样本不均衡,类别A的数量是B的100倍)
不太适用于离散分类
需要手动确定最佳K值
优点:
原理简单容易使用
一定会收敛
聚类速度快

你可能感兴趣的:(机器学习,人工智能)