Ensemble的简易原理
Ensemble就是一种一次性结合多种机器学习模型,以提高机器学习结果的方法-
Ensemble的过程
为了处理Ensemble中遇到的不同问题,Ensemble有很多中不同的方法
-
<方法1>Ensemble的Bagging方法(Bagging := Bootstrap aggregation)用于多个复杂模型/容易overfitting模型/low bias high variance模型的融合以及降低variance
(1)Bagging的动机: 我们知道,对于一个机器学习模型,如果提高其模型的复杂性(比如:线性模型把input feature增加),那么这个模型的bias是会不断地降低的,可是此时variance同时又会开始不断增加,所以综合起来,复杂的模型是有可能overfitting的(overfitting的一个统计学体现就是:小的bias 和 大的 variance)。 但是,学界给出了一个使用混合模型减小复杂模variance的方法,也就是bagging。
Bagging的步骤:
假设训练数据集大小为N。
1.为了使用bagging训练模型,每次训练一个模型时,从数据集中有放回的抽取M个样本(通常设M = N)。
- 然后我们就根据步骤1,训练T个机器学习模型(这里的机器学习模型可以是不一样的,比如可以是linear regression, svm, decision tree等)。
3.训练好T个机器学习模型以后。当每次要处理test集的时候, 对于每个test集,都让T个机器学习模型分别做一下结果,然后再把所有的结果进行 avg(当任务是预测时)/ voting(当任务是分类时)。
-
4.最后,根据avg/voting的结果,当作test集的结果就行。
Decision Tree的intuition
- Decision Tree是一个非线性分类器
-
Decision Tree会通过tree node把整个解空间分割成一小块一小块,然后每个小块就代表着不同的结果。
Random Forest (注意:因为Bagging是用来通过降多个high variance的复杂模型的方法。所以,如果你手头有几个underfitting的模型,那么即使做了Bagging,也不会提高fit的程度,只会导致最后的结果还是high bias & underfitting。所以,Random Forest在当前你的Decision Tree还不能很好地fit数据集的时候,那是没有提升作用的!)
主要思想:Random Forest就是把很多Decision Tree模型做Bagging得到的。
Random Forest的难点(1):就是对一组数据集做Bagging的Decision Tree时,那个数据集的随机选取,和特征选取是关键,比较难。如果直接给每个Decision Tree分配不同的数据集,在刚好使用完数据集中的所有数据以后,事实上,我们这样得到的多个Decision Tree的训练结果会趋同,这样的话,即使在对这些Decision Tree做Bagging,那么结果也不会得到明显地提高。
为了解决Decision Tree训练趋同这个Random Forest的难点:我们可以人为的在每个Decision Tree的训练过程中,随机允许数据集的一部分特征参与Decision Tree的训练,而不是让每个模型训练时都使用到数据集的所有特征。
Random Forest的难点(2):因为,random forest使用了Bagging技术,所以整个数据集被很多个模型同时用,所以,如何合理地设计数据集的使用过程,以及利用数据集在训练完模型后还可以进行交叉验证。
解决Random Forest的Cross Validation的方法:我们使用一种Out-Of_Bag的cross validation技术。
1.为每个Decision Tree均匀地分配训练数据。
2.然后,根据不同组合(如这里的f2和f4),使用没用分配给f2和f4的训练数据作为test数据,进行cross validation。
-
3.最后,把所有的Out-Of-Bag的结果综合起来,记作OOB error。
<方法二>.Ensemble的Boosting方法(Boosting很好记,就是一种和Bagging相反的方法,当我们使用Boosting的时候,是应该想要将对数据集fitting不是很好的模型变得更加的fit,也就是说Boosting是用作提升模型的fit程度,降低模型的Bias值的Ensemble方法)
Boosting的优势:Boosting承诺,只要你当前的模型的测试正确率比乱猜好一点(如:二分类,测试正确率比50%高一点),Boosting就有能力把正确率提升至百分之百。
-
Boosting的主要步骤: (注意:在训练Boosting中的多个模型时,需要按顺序训练,先训练模型1,然后是模型2,然后是模型3...)
知道Boosting需要训练多个不同的模型(比如:多个不同的classifier),那么,如何分配训练集,才能做到,在同一个大的训练集下面训练出多个不同的模型?:
- 1.需要使用同一个大的训练集,训练出多个不同的模型的基本思路就是,把训练数据集做一个分割,然后把子训练集喂给多个模型去训练,这样就是叫做: Re-sampling。
- 2.Resampling的缺点: Re-sampling作为让一个数据集训练出多个不同模型的一种简单方法,是很直接有效的。但是,Re-sampling有分割数据集的粒度太粗的缺点。也就是说,在re-sampling数据集的时候,对于数据集中的一个数据,只能完整地喂给某个模型,而不能说,分0.5个数据集给模型1。。。
- 3.Re-Weighting解决细粒度分割数据集的问题:
此时,我们给数据集中的每一对数据都分配一个weight值ui,这样一来,我们就可以从定义权重的角度,细粒度,连续地分割数据集给多个模型了。(值得注意的是,在进行Re-weighting的时候,其主要目的就是对模型的objective function(or called loss function)进行一番修改,也就是在计算每单笔loss的时候,系数上面要带上本条数据的weight值)
Boosting的一种算法:AdaBoost
-
计算d1的数学步骤:
-
更详细的