Ensemble算法

What's up everybody, welcome back to my channel! hi,how are ya !

上周跟大家分享了随机森林算法的应用,这周我准备把Ensemble算法原理跟大家分享一下(有些地方会解释的不太清楚,见谅

),主要参考的是台大李宏毅教授的机器学习课程。李宏毅教授讲机器学习和深度学习课程个人认为还是非常不错的,如果各位感兴趣的话可以直接去搜索一下。

Ensemble:

字面上的意思就是团队合作,给定一组分类器(classifier),这组分类器中每一个分类器都有不同的性质属性之类的,那么借助这一组分类器可以使我们的模型发挥更强的力量。

Bagging:

不同的模型集合起来输出结果,也即是自己创造出不同的dataset进行训练

N——训练集

从N中取出N'个数据进行训练,如下图所示:

通过这几个set的学习,我们做出来的结果如果是分类问题的话那就用vote的方式来得出结果,如果是回归,就用average的方式进行得出结果。这样做的好处在于,他通常会比我们训练一个数据集一次训练的结果要好得多。

注意:当你所建立的模型很复杂的时候,担心会出现过拟合的结果时,一般要用bagging,比如说决策树算法就是一个非常容易过拟合的模型,如果在建立模型得出准确率为100%时,先不要那么开心,往往有可能都是过拟合才会出现的结果,但是随机森林就会使过拟合的概率大大降低。

袋外误差(OOB)

在用随机森林选择特征个数m时,是如何确定m的值呢,这个问题可以用袋外误差来解决

假设f1选择x1,x2做training

假设f2选择x3,x4做training

假设f3选择x1,x3做training

假设f4选择x2,x4做training

但是,在对f2,f4做training时并没有用到x1,所以,我们为了计算训练误差率,将f2+f4去测试x1,就得出袋外误差了。

Boosting

用boosting的好处在于如果我们有一个很弱的模型的话,但仍然想要去拟合目标时,可以用boosting来做

比如说有一个错误率达到50%以上的分类,boosting可以将错误率下降到0%

算法:

1.找一个分类器f1

2.找到使f1分类错误率大于50%的训练集A

3.通过训练集A进行训练,得到分类器f2,此时f2应该与f1是互补的关系

用相同方法继续依次找到f3,f4,f5

那么,该如何生成我们的分类器f1,f2,f3,我们将在下面进行讨论

Adaboost

为得到不同的分类器,可以在不同的训练集中训练的方法得到。

得到不同训练集的方法:

1.re-sample

2.re-weight

这里我们主要来讲一下re-weight的方法,re-weight顾名思义,就是重新赋予权重的意思。通过赋予不同的权重来得到不同的分类器。

首先我们看一下f1在training data上面的错误率\large \varepsilon1:

\large \varepsilon 1=\sum_{1}^{n}u_{1}^{n}\delta \left \left ( f_{1} (x_{n})\right\neq \hat{y^{n}} )/Z_{1}

\large {Z_{1}}=\sum_{1}^{n}u_{1}^{n}

去计算每一笔的training data看是否与y相同,如果相同为0,不相同为1,再乘以每个每个训练集的u1的值,再做加和,最后除以Z1,但现在我们希望拿u2,使得

\large \varepsilon 2=\sum_{1}^{n}u_{2}^{n}\delta \left \left ( f_{1} (x_{n})\right\neq \hat{y^{n}} )/Z_{2}=0.5

也即是说使u2来做新的训练集训练时他的错误率达到0.5。

实例

\large \left ( x^{1} ,y^{1},u^{1}\right ) \, \, \, \, \, u^{1}=1\: \: \times

\large \left ( x^{2} ,y^{2},u^{2}\right ) \, \, \, \, \, u^{2}=1\: \: \vee

\large \left ( x^{3} ,y^{3},u^{3}\right ) \, \, \, \, \, u^{3}=1\: \: \vee

\large \left ( x^{4} ,y^{4},u^{4}\right ) \, \, \, \, \, u^{4}=1\: \: \vee

我们定义u的权重都为1,分类以后呢,发现第一个是分类错的,其他三个分类都是正确的,可知\large \varepsilon 1=0.25

那我们现在的方法是使得正确的权重降低而错误的权重升高,假设我们分类正确的除以\large \sqrt{3},分类错误的除以\large \sqrt{3}

就会变成\large u1=1*\sqrt{3}\: \: u2=1/\sqrt{3}\: \:u3=1/\sqrt{3}\: \:u4=1/\sqrt{3}\: \:,这样得出的\large \varepsilon 1=0.5

也就是f1的错误率达到了0.5,所以我们希望用一个新的f2去训练这组训练集,让他的错误率小于0.5。

具体推导

大家,实在抱歉,我实在是不想用公式编辑器了,好吧主要是我懒,所以就用手写来给大家分享一下

 下周大概率会停一周啦,当然也有可能不停,取决于我现在做的项目的进度,如果下周不停的话就跟大家分享一下聚类的相关知识与应用或者是神经网络一些简单应用(如果我能把现在的项目做好的话)。

thanks for reading!

猜你喜欢

转载自blog.csdn.net/AAAAAAAKing/article/details/88782739