(1)GBDT只能用CART回归树,而XGBOOST可以用CART树(回归/分类),还可以用用想LR之类的线性模型,相当于加入L1、L2正则项的LR或线性回归
(2)列抽样,可以并行,不是树粒度上的,是特征粒度上的,block块,并行计算所有信息增益等信息
(3)可处理多种特征,且对缺失值也不用进行处理
(4)GBDT在残差梯度下降方向拟合,一阶导;XGBOOST泰勒展开至二阶导
(5)近似直方图算法,高效生产候选分割点
(6)shrink,缩减,叶子节点同时乘,防止过拟合
(7)可以自己定义评价函数
(8)代价函数含正则化项,防止过拟合
自己的答案:XGboost是梯度提升的改进,区别在于在求解损失函数时使用了泰勒二级展开,并在损失函数中加入了正则项,考虑了模型的复杂度,根据损失函数推导出了新的划分节点的方法
xgboost快是因为加入了正则项可以控制模型的复杂度
并行的方法:可以通过将数据分成若干个小块,并使用多个线程或多台机器并行训练
XGboost是梯度提升的改进,区别在于在求解损失函数时使用了泰勒二级展开,并在损失函数中加入了正则项,控制了模型的复杂度,根据损失函数推导出了新的划分节点的方法,xgboost收敛更快
GBDT使用梯度下降法,计算损失函数的负梯度即残差,是一阶,gbdt选择平方损失最小的最为分裂节点
集成学习的集成框架主要有:Bagging,Boosting和Stacking,其中Bagging和Boosting为同质集成,而Stacking为异质集成。
(1)Bagging(Bootstrap Aggregating)
Bagging的核心思想为并行地训练一系列各自独立的同类模型,然后再将各个模型的输出结果按照某种策略进行聚合。例如,分类中可以采用投票策略,回归中可以采用平均策略。
Bagging主要分为两个阶段:
(2)Stacking
Stacking的核心思想是并行地训练一系列各自独立的不同类模型,然后通过训练一个元模型(meta-model)来将各个模型输出结果进行结合。
Stacking也可以分为两个阶段:
(3)Boosting
Boosting的核心思想为串行地训练一系列前后依赖的同类模型,即后一个模型用来对前一个模型的输出结果进行纠正。
Boosting算法是可以将弱学习器提升为强学习器的学习算法。学习过程是:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行。直至基学习器数目达到实现指定的值n,最终将这n个基学习器进行结合。
RF节点的分裂策略:对基决策树的每个节点,从节点的属性集合(假如含有d个)中随机选取一个包含k个属性的子集,然后在子集中选择最优的属性用于划分。其中k控制随机性引入情况,当k=d,则和决策树相同;k=1,即随机选取,一般选择。
使用损失函数的负梯度作为残差,当前模型通过经验风险极小化确定下棵决策树参数
相同点:
(1)都是由多棵树组成的,都是集成学习算法
(2)最终的结果都是由多颗树一起决定
不同点:
(1)组成随机森林的树可以是分类树,也可以是回归树,但是GBDT只能由回归树组成。
(2)组成随机森林的树可以并行生成,但是组成GBDT的树只能串行生成。
(3)对于最终输出结果,随机森林采用多数投票;而GBDT是将所有的结果累加起来,或者加权起来
(4)随机森林对异常值不敏感,而GBDT对异常值非常敏感
(5)随机森林通过减小方差来提高性能,GBDT通过减小偏差来提高性能
这与决策树算法自身的优点有很大的关系。决策树可以认为是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值
优点:
原理简单容易使用
一定会收敛
聚类速度快