其中是一件事情发生的概率,发生的概率越大信息量越小,对于2个独立事件,发生概率是
,二者的信息量是
,因为
具有可加性的性质,因此一般用
来衡量某件事的信息量,负号是因为信息量与概率成反比。
信息量度量的是一个具体事件发生了所带来的信息,而熵则是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望。即
缺点:1. 对取值数目将多的属性有偏好
2. 信息熵是相对训练数据集而言的,没有绝对意义
- 基尼系数是信息熵在x=1处的泰勒一阶展开
- 基尼系数不用做对数运算,更高效
主要根据个体学习器之间的关系进行划分,有Bagging、Boosting两种,如果学习器之间存在强依赖、串行生成,如Boosting,如果是不存在依赖,可并行生成,如Bagging、随机森林。要想获取好的集成,个体学习器应好而不同。
这2种的差异在特征方面是,随机森林是随机抽取部分特征训练学习器,而Adaboost是使用所有的特征,但是每个学习器的样本权重不同。
Boosting关注偏差,Bagging则是方差, Error = Bias + Variance,Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。
bagging=bootstrap + aggregation
RF=bagging + descion tree
Bagging是样本随机
随机:样本随机(有放回取样)+特征随机(一般取K=log2(d),d是全部的特征数量)
最终预测结果可以用加权平均法、投票法等确定
RF优点:
1. 能够处理很高维度,且不用做特征选择
2. 训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的)
3. 对于不平衡的数据集来说,它可以平衡误差
4. 能衡量特征重要度和样本相似性
5. 不用担心过拟合
RF缺点:
1. 在解决回归问题时,不能给出一个连续的输出,表现没有分类问题好
2. 随机森林已经被证明在某些噪音较大的分类或者回归问题上会过拟合
3. 无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试,像一个黑盒子
集成学习之Adaboost算法原理小结 - 刘建平Pinard - 博客园
Adaboost是Boosting的代表,是先从初始的训练集中训练一个基学习器,然后再调整样本的分布,让预测错误的训练样本在后续受到更多关注,然后训练下一个基学习器,如此反复,直到学习器达到指定的值,并把T非基学习器进行加权结合。损失函数是指数函数。
主要涉及到两个部分,加法模型和前向分步算法。加法模型就是说强分类器由一系列弱分类器线性相加而成,前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。
Adaboost优点:
1.很好的利用了弱分类器进行级联,准确率高
2.可以将不同的分类算法作为弱分类器,且弱分类器构造简单
3.不用担心过拟合
Adaboost缺点:
1.对异常点敏感(因为模型比较关注分类错误的样本)
2.训练时间过长
3.只能处理采用指数损失函数的二分类任务
BDT:Boosting Decision Tree,提升树
BDT分类和回归时的基学习器都是CART回归树,因为是拟合残差的。GBDT和Adaboost一样可以用前向分布算法来描述,不同之处在于Adaboost算法每次拟合基学习器时,输入的样本数据是不一样的(每一轮迭代时的样本权重不一致),因为Adaboost旨在重点关注上一轮分类错误的样本,GBDT算法在每一步迭代时是输出的值不一样,本轮要拟合的输出值是之前的加法模型的预测值和真实值的差值(模型的残差,也称为损失)。用于一个简单的例子来说明BDT,假如某人的年龄为30岁,第一次用20岁去拟合,发现损失还有10岁,第二次用6岁去拟合10岁,发现损失还有4岁,第三次用3岁去拟合4岁,依次下去直到损失在我们可接受范围内。
GBDT:梯度提升决策树(Gradient Boosting Decision Tree),用损失函数的负梯度近似残差,可以选择多种损失函数,而不是只有指数函数。
在GBDT中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法,与传统的Boosting中关注正确错误的样本加权有着很大的区别。GBDT的树是回归树而不是分类树,因为要累加所有树的结果。
优缺点:
缺点:当然由于它是Boosting,因此基学习器之前存在串行关系,难以并行训练数据。
GBDT 有非常快降低 Loss 的能力,这也会造成一个问题:Loss 迅速下降,模型 low-bias, high-variance,容易造成过拟合。除了调参之外,比如调整树的深度,还可以子采样(Subsampling):即训练每个树的时候,只使用一部分的样本,或者进行特征列采样,这也是XGB的创新点。
XGB :
xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
XGBoost 可以看做是 GBDT 的一种升级版实现,其中需要明确的一个概念是,XGBoost 是 Boosting 框架的一种实现结构, lightgbm 也是一种框架实现结构,而 GBDT 则是一种算法实现,其基分类器为 CART 树,可以处理分类、回归任务,处理分类任务则是将分类任务利用 softmax 转换为回归任务进行求解。
在XGB的基础上,主要有2个改进点:
(1)Gradient-based One Side Sampling (GOSS)
在每一次迭代前,利用了GBDT中的样本梯度和误差的关系,对训练样本进行采样: 对误差大(梯度绝对值大)的数据保留;对误差小的数据采样一个子集,但给这个子集的数据一个权重,让这个子集可以近似到误差小的数据的全集。这么采样出来的数据,既不损失误差大的样本,又在减少训练数据的同时不改变数据的分布,从而实现了在几乎不影响精度的情况下加速了训练。
(2)Exclusive Feature Bundling (EFB)
在特征维度很大的数据上,特征空间一般是稀疏的。利用这个特征,我们可以无损地降低GBDT算法中需要遍历的特征数量,更确切地说,是降低构造特征直方图(训练GBDT的主要时间消耗)需要遍历的特征数量。在稀疏的特征空间中,很多特征是exclusive的(即在同一个样本里,这一组特征里最多只有一个特征不为0)。每一组exclusive feature都可以无损地合并成一个“大特征”。构造直方图的时候,遍历一个“大特征”可以得到一组exclusive feature的直方图。这样只需要遍历这些“大特征”就可以获取到所有特征的直方图,降低了需要遍历的特征量。这里还需要解决的是Exclusive feature的分组问题,这是一个NP问题,可以转成Graph Coloring问题,并用贪心的近似方法来求解。
在不影响精度的情况下,两个算法分别减少了GBDT训练中所需的数据量和特征量,从而加速了GBDT的训练。