学习adaboost(三,第二次迭代,c#实现)

我们改进了第一次迭代:第二次迭代如下:因为三个弱分类器都是犯了3次错误,我们故意选了y>6.5,标签=1,else,标签=-1;第一个弱分类器已经选了,再选一次没意义,不会有任何进展,和第一次迭代一模一样。先看代码:

   float[] 第er个弱分类器jieguo = new float[] { -1, -1, -1, -1, 1,-1, 1, 1, 1, -1 };
            float[] 最初的标签样本       = new float[] {  1,  1, -1, -1, 1, -1, 1, 1, -1, -1 };
            //以上两个数组相乘,ok为1,ng为-1,
            //1,2,9分错值为-1,数组序号0,1,8
            //第一个弱分类器的错误率0.16*3=0.48
            //第二个弱分类器的错误率0.07*3=0.21,0.21<0.48,所以选第二个弱分类器作为第二次迭代,并且更新dataP。
            for (int j = 0; j < example.Count; j++)
            {
                if (第er个弱分类器jieguo[j] * 最初的标签样本[j] == -1.0f)
                {
                    //分错的变大
                    dataP[j] = dataP[j] / (2 * (3 * 0.07f));
                }
                if (第er个弱分类器jieguo[j] * 最初的标签样本[j] == 1.0f)
                { //分对的变小
                    dataP[j] = dataP[j] / (2 * (1 - 3 * 0.07f));
                }               
            }
            //计算a2=1/2ln((1-e)/e)
            double a2 = 0.5 * Math.Log(0.79 / 0.21);
          //  float[] jieguo2 = new float[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            for (int i = 0; i < 10; i++)
            {
                if (a2 * 第er个弱分类器jieguo[i]+ a1 * 第一个弱分类器jieguo[i] > 0)
                    jieguo[i] = 1;
                if (a2 * 第er个弱分类器jieguo[i]+ a1 * 第一个弱分类器jieguo[i] < 0)
                    jieguo[i] = -1;
                if (a2 * 第er个弱分类器jieguo[i]+ a1 * 第一个弱分类器jieguo[i] == 0)
                    jieguo[i] = 0;
            }

看第一次迭代后的权重变化:

学习adaboost(三,第二次迭代,c#实现)_第1张图片

第二次迭代完成后,对比如下:

学习adaboost(三,第二次迭代,c#实现)_第2张图片

明显,1,2,9项分错了。我们继续计算a2:

 继续计算第二个强分类器(两个弱分类器组合,结果仍不能达标,继续级联第三个,如果还不行,继续第四个,犯错误为4的可选):

学习adaboost(三,第二次迭代,c#实现)_第3张图片

 ok,这一节也算完成了。

 

 

你可能感兴趣的:(学习,算法,计算机视觉)