精华内容
下载资源
问答
  • 针对AdaBoost算法通过最小化训练错误率来选择弱分类器造成的精度不佳问题以及单阈值作为弱分类器训练过程较慢难以收敛问题,提出了一种基于拟合型弱分类器的AdaBoost算法。首先针对每个特征,在特征值与标记值之间...
  • AdaBoost算法通过自适应确定弱分类器的融合权重,将弱分类器融合为强分类器。 本文提出了一种通过调整弱分类器的内部结构的增强型AdaBoost算法(ISABoost)。 在传统的AdaBoost算法中,弱分类器一旦训练就不会改变。...
  • 一个分类器的分类准确率在60%-80%,即:比随机预测略好,但准确率却不太高,我们可以称之为“弱分类器”,比如CART(classification and regression tree分类与回归树)。 反之,如果分类精度90%以上,则是强分类...

            一个分类器的分类准确率在60%-80%,即:比随机预测略好,但准确率却不太高,我们可以称之为“弱分类器”,比如CART(classification and regression tree分类与回归树)。

           反之,如果分类精度90%以上,则是强分类器。

     

     

    西瓜书上说:

          弱学习器常指泛化性能略优于随即猜测的学习器(例如在二分类问题上精度略高于50%的分类器)
     

     

    展开全文
  • 针对这一问题,提出一种基于弱分类器集成的虚假交通信息检测方法。首先,扩充交通警报信息的有效特征,并设计分割规则,将信息的特征集划分为多个特征子集;然后,根据子集特征的不同特性,使用对应的弱分类器分别...
  • 针对现有车辆检测算法在实际复杂道路情况下对车辆有效检测率不高的问题,提出了融合多模式弱分类器,并以AdaBoost-Bagging集成为强分类器的车辆检测算法。结合判别式模型善于利用分辨率的特征形成更好的方法边界和...
  • 虹膜和面部生物特征识别的基于Bin的弱分类器融合
  • 弱分类器对Haar特征进行分类

    千次阅读 2017-04-20 19:47:15
    3. 再次介绍弱分类器以及为什么可以使用Haar特征进行分类 对于本算法中的矩形特征来说,弱分类器的特征值f(x)就是矩形特征的特征值。由于在训练的时候,选择的训练样本集的尺寸等于检测子窗口的尺寸,检测子窗口...

    3. 再次介绍弱分类器以及为什么可以使用Haar特征进行分类

    对于本算法中的矩形特征来说,弱分类器的特征值f(x)就是矩形特征的特征值。由于在训练的时候,选择的训练样本集的尺寸等于检测子窗口的尺寸,检测子窗口的尺寸决定了矩形特征的数量,所以训练样本集中的每个样本的特征相同且数量相同,而且一个特征对一个样本有一个固定的特征值。

     

    对于理想的像素值随机分布的图像来说,同一个矩形特征对不同图像的特征值的平均值应该趋于一个定值k。
    这个情况,也应该发生在非人脸样本上,但是由于非人脸样本不一定是像素随机的图像,因此上述判断会有一个较大的偏差。

     

    对每一个特征,计算其对所有的一类样本(人脸或者非人脸)的特征值的平均值,最后得到所有特征对所有一类样本的平均值分布。

     

    下图显示了20×20 子窗口里面的全部78,460 个矩形特征对全部2,706个人脸样本和4,381 个非人脸样本6的特征值平均数的分布图。由分布看出,特征的绝大部分的特征值平均值都是分布在0 前后的范围内。出乎意料的是,人脸样本与非人脸样本的分布曲线差别并不大,不过注意到特征值大于或者小于某个值后,分布曲线出现了一致性差别,这说明了绝大部分特征对于识别人脸和非人脸的能力是很微小的,但是存在一些特征及相应的阈值,可以有效地区分人脸样本与非人脸样本。

     

     

    为了更好地说明问题,我们从78,460 个矩形特征中随机抽取了两个特征A和B,这两个特征遍历了2,706 个人脸样本和4,381 个非人脸样本,计算了每张图像对应的特征值,最后将特征值进行了从小到大的排序,并按照这个新的顺序表绘制了分布图如下所示:

     

    可以看出,矩形特征A在人脸样本和非人脸样本中的特征值的分布很相似,所以区分人脸和非人脸的能力很差。

     

    下面看矩形特征B在人脸样本和非人脸样本中特征值的分布:

     

    可以看出,矩形特征B的特征值分布,尤其是0点的位置,在人脸样本和非人脸样本中差别比较大,所以可以更好的实现对人脸分类。

    由上述的分析,阈值q 的含义就清晰可见了。而方向指示符p 用以改变不等号的方向。

    一个弱学习器(一个特征)的要求仅仅是:它能够以稍低于50%的错误率来区分人脸和非人脸图像,因此上面提到只能在某个概率范围内准确地进行区分就
    已经完全足够。按照这个要求,可以把所有错误率低于50%的矩形特征都找到(适当地选择阈值,对于固定的训练集,几乎所有的矩形特征都可以满足上述要求)。每轮训练,将选取当轮中的最佳弱分类器(在算法中,迭代T 次即是选择T 个最佳弱分类器),最后将每轮得到的最佳弱分类器按照一定方法提升(Boosting)为强分类器

    展开全文
  • 在实现弱分类器的时候,你用(miuPos + miuNeg)/2作为弱分类器的阈值,这个阈值是一个合理的选择吗?我修改了你的这部分代码,在特征里找了一些离散值来寻找最优的阈值,但是训练...
  • 如何构造第一个弱分类器(树桩) 先给每个样本一个初始的权重=1/样本总数 确定选用哪个特征:Gini系数 分别计算左右两边的纯度:1-(预测正确的比例)2-(预测错误的比例)2 然后加权平均 例如Chest Pa

    随机森林与Adaboost之间的区别

    1. 随机森林里的树为满二叉树
      而Adaboost里的树为树桩(只有根节点和2个叶子节点)
      在这里插入图片描述
      在这里插入图片描述
    2. 在进行预测时 随机森林中的每棵树拥有同样的话语权
      而adaboost中每棵树的话语权都是不一样的
      在这里插入图片描述
    3. 随机森林哪棵树先进行预测无所谓 但adaboost有影响
      在这里插入图片描述

    如何构造第一个弱分类器(树桩)

    1. 先给每个样本一个初始的权重=1/样本总数
      在这里插入图片描述

    2. 确定选用哪个特征:Gini系数
      分别计算左右两边的纯度:1-(预测正确的比例)2-(预测错误的比例)2 然后加权平均
      例如Chest Pain这个特征:
      左边:1-(3/5)2-(2/5)2=0.48
      右边:1-(2/3)2-(1/3)2=0.44
      加权平均:0.48*(5/8)+0.44*(3/8)=0.3+0.17=0.47
      详情参看: 如何构建一棵决策树
      在这里插入图片描述
      在这里插入图片描述

    3. 得到Gini系数 选最小的作为第一棵树桩
      在这里插入图片描述

    4. 上面确定了树桩使用哪个特征 接下来要确定这个树桩(弱分类器)的话语权有多大 根据下面的公式:
      那么Total Error指的是什么呢
      它是错误样本权重(一开始都是一样)相加
      因为 Weight>176只分错了一个 这个样本权重为1/8 所以Total Error就为1/8
      带到公式 得到他的话语权为0.97
      在这里插入图片描述

    5. 这样第一棵弱分类器就构造好了 然后我们需要更新各个样本的权重 使得分类正确的样本权重减小 错误的权重增大

      我们根据下面的公式来改变错误样本的权重(amount of say = 0.97)
      在这里插入图片描述

    根据下面公式改变正确样本的权重
    在这里插入图片描述

    确定第一棵树桩后 样本权重更新成这样
    在这里插入图片描述

    我们需要让这些权重合等于1(现在总和只为0.68) 所以我们进行归一化:
    在这里插入图片描述

    构造其他的弱分类器

    1. 第一个弱分类器已经构建好了
      在随机森林中 我们每确认一棵树都是随机抽取样本来构造一个新的数据集 adaboost也一样 根据样本的权重和0-1之间的随机数 我们从源数据集中抽取样本 使它大小与原来的一致(可能会重复抽取):
      在这里插入图片描述
      最终得到新的数据集:
      在这里插入图片描述
      用他来做新的数据集 样本权重也要重置成初始状态:在这里插入图片描述
      接着按照构造第一个分类器的方法来构造剩下的分类器
      在这里插入图片描述

    如何使用它来分类

    在这里插入图片描述

    总结

    在这里插入图片描述

    展开全文
  • 弱分类器是指分类效果要比随机猜测效果略好的分类器,我们可以通过构建多个弱分类器来进行最终抉择(俗话说,三个臭皮匠顶个诸葛亮大概就这意思)。首先我们给每个样例初始化一个权重,构成向量D,然后再更新D,更新...

    1.AdaBoost 思想

    补充:这里的若分类器之间有比较强的依赖关系;对于若依赖关系的分类器一般使用Bagging的方法

    弱分类器是指分类效果要比随机猜测效果略好的分类器,我们可以通过构建多个弱分类器来进行最终抉择(俗话说,三个臭皮匠顶个诸葛亮大概就这意思)。首先我们给每个样例初始化一个权重,构成向量D,然后再更新D,更新规则如下:

    当一个样例被分类器正确分类时,我们就减小它的权重

    image

    否则,增大它的权重

     

    image

     

    对于每个弱分类器,我们根据它对样例分类错误率来设置它的权重alpha,分类错误率越高,相应的alpha就会越小,如下所示

    image

     

    最终我们训练出多个弱分类器,通过加权分类结果,输出最终分类结果,如下图所示

    image

    2.实验过程

      1 # -*- coding: utf-8 -*-
      2 """
      3 Created on Wed Mar 29 16:57:37 2017
      4 
      5 @author: MyHome
      6 """
      7 import  numpy as np
      8 
      9 '''返回分类结果向量'''
     10 def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):
     11     retArray = np.ones((np.shape(dataMatrix)[0],1))
     12     if threshIneq == "lt":
     13         retArray[dataMatrix[:,dimen] <= threshVal] = -1.0
     14     else:
     15         retArray[dataMatrix[:,dimen] > threshVal] = -1.0
     16 
     17     return retArray
     18 
     19 '''构造一个最佳决策树,返回决策树字典'''
     20 def buildStump(dataArr,classLabels,D):
     21     dataMatrix = np.mat(dataArr)
     22     labelMat = np.mat(classLabels).T
     23     m,n = dataMatrix.shape
     24     numSteps = 10.0
     25     bestStump = {}
     26     bestClassEst = np.mat(np.zeros((m,1)))
     27     minError = np.inf
     28 
     29     for i in xrange(n):
     30         rangeMin = dataMatrix[:,i].min()
     31         rangeMax = dataMatrix[:,i].max()
     32         stepSize = (rangeMax - rangeMin)/numSteps
     33         for j in xrange(-1,int(numSteps)+1):
     34             for inequal in ["lt","gt"]:
     35                 threshVal = (rangeMin + float(j)*stepSize)
     36                 #print threshVal
     37                 predictedVals = stumpClassify(dataMatrix,i,threshVal,inequal)
     38                 errArr = np.mat(np.ones((m,1)))
     39                 errArr[predictedVals==labelMat] = 0
     40                 weightedError = D.T*errArr
     41 
     42                 if weightedError < minError:
     43                     minError = weightedError
     44                     bestClassEst = predictedVals.copy()
     45                     bestStump["dim"] = i
     46                     bestStump["thresh"] = threshVal
     47                     bestStump["ineq"] = inequal
     48 
     49     return bestStump,minError,bestClassEst
     50 
     51 '''训练多个单层决策树分类器,构成一个数组'''
     52 def adaBoostTrainDS(dataArr,classLabels,numIt =40):
     53     weakClassArr = []
     54     m = np.shape(dataArr)[0]
     55     D = np.mat(np.ones((m,1))/m)
     56     aggClassEst = np.mat(np.zeros((m,1)))
     57     for i in range(numIt):
     58         bestStump,error,classEst = buildStump(dataArr,classLabels,D)
     59         #print "D:",D.T
     60         alpha = float(0.5*np.log((1.0-error)/max(error,1e-16)))
     61         bestStump["alpha"] = alpha
     62         weakClassArr.append(bestStump)
     63         #print "ClassEst:",classEst.T.shape
     64         expon = np.multiply(-1*alpha*np.mat(classLabels).T,classEst)
     65         #print expon
     66         D = np.multiply(D,np.exp(expon))
     67         D = D / D.sum()
     68         aggClassEst += alpha*classEst
     69         #print "aggClassEst: ",aggClassEst.T
     70         aggErrors = np.multiply(np.sign(aggClassEst)!= np.mat(classLabels).T,np.ones((m,1)))
     71         errorRate = aggErrors.sum()/m
     72         print "total error:",errorRate,"\n"
     73         if errorRate ==0.0:
     74             break
     75     return weakClassArr
     76 
     77 
     78 '''分类器'''
     79 def adaClassify(datToClass,classifierArr):
     80     dataMatrix = np.mat(datToClass)
     81     m = np.shape(dataMatrix)[0]
     82     aggClassEst = np.mat(np.zeros((m,1)))
     83     for i in range(len(classifierArr)):
     84         classEst = stumpClassify(dataMatrix,classifierArr[i]["dim"],\
     85         classifierArr[i]["thresh"],classifierArr[i]["ineq"])
     86         aggClassEst += classifierArr[i]["alpha"]*classEst
     87         #print aggClassEst
     88     return np.sign(aggClassEst)
     89 
     90 '''载入数据'''
     91 def loadDataSet(fileName):
     92     numFeat = len(open(fileName).readline().split("\t"))
     93     dataMat = []
     94     labelMat = []
     95     fr = open(fileName)
     96     for line in fr.readlines():
     97         lineArr = []
     98         curLine = line.strip().split("\t")
     99         for i in range(numFeat-1):
    100             lineArr.append(float(curLine[i]))
    101         dataMat.append(lineArr)
    102         labelMat.append(float(curLine[-1]))
    103     #print dataMat,labelMat
    104     return dataMat,labelMat
    105 
    106 if __name__ == "__main__":
    107     datArr,labelArr =  loadDataSet("horseColicTraining2.txt")
    108 
    109     classifierArray = adaBoostTrainDS(datArr,labelArr,10)
    110     testData,testY = loadDataSet("horseColicTest2.txt")
    111     predictionArr = adaClassify(testData,classifierArray)
    112     errorArr = np.mat(np.ones((len(testData),1)))
    113     FinalerrorRate = errorArr[predictionArr!= np.mat(testY).T].sum()/float(errorArr.shape[0])
    114     print "FinalerrorRate:",FinalerrorRate
    115 
    116 

    3.实验结果

     

    total error: 0.284280936455

    total error: 0.284280936455

    total error: 0.247491638796

    total error: 0.247491638796

    total error: 0.254180602007

    total error: 0.240802675585

    total error: 0.240802675585

    total error: 0.220735785953

    total error: 0.247491638796

    total error: 0.230769230769

    FinalerrorRate: 0.238805970149

     

    4.实验总结

    通过多个构建多个弱分类器,然后根据各个弱分类器的能力大小(即权重)来对分类结果进行加权求和,得出最终结果。只要数据集比较完整,这种方法还是很强大的,后续还可以尝试更多其他的分类器进行集成。

    转载于:https://www.cnblogs.com/lpworkstudyspace1992/p/6668990.html

    展开全文
  • 基于单层决策树构建弱分类器 使用多个弱分类器来构建AdaBoost算法 测试算法:基于AdaBoost的分类 基于单层决策树构建弱分类器 单层决策树(decision stump)是一种简单的决策树,它仅仅基于单个特征来做决策。由于...
  • 上两篇我们学习了cart(决策分类树),决策分类树也是决策树的一种,也是很强大的分类器,但是cart的深度太深,我们可以指定cart的深度使得cart变成强一点的弱分类器。 在决策树到集成学习我们提到,单棵复杂的决策...
  • Integral channel features中提到使用depth-2 trees建造弱分类器,depth-2 trees弱分类器怎么创建?
  • Bagging算法中,弱分类器的生成可以有以下几种:基于样本分布的弱分类器生成,可以根据样本分布抽样产生,也可以不抽样,在弱分类中应用样本分布(这种方法需要修改弱分类器的实现过程);基于属性选择的弱分类器...
  • 这个源码很好,是利用多个弱分类器组成一个强分类器,比如视频当中的人车分离可以用adaboost
  • 我们将介绍将弱分类器组合成强分类器的算法,Adaboost算法,以及该算法有效的证明。 对于这种提升方法,我们有 每次迭代加大误分类点的权重,这样下次生成的弱分类器能够更可能将该误分类点分类正确 每次迭代生成...
  • adaboost弱分类器与强分类器的训练过程(偏理论) 具体步骤如下: 1.初始化样本权重D1=1/(n+m) 2.对每个特征f(20*20中有78460个特征),计算所有样本(正样本n个,负样本m个)的特征值。 3.将每个特征对应的m+n个...
  • 尝试将多个tensorflow弱分类器用AdaBoost的方法连接,以提高分类准确率与代码复用性 赞美 https://blog.csdn.net/guyuealian/article/details/70995333   #=================================...
  • 基于树型弱分类器的adaboost演示程序(matlab) 详细参考我的博客: http://blog.csdn.net/ranchlai/article/details/10586069
  • 一种新的改进AdaBoost弱分类器训练算法
  • 所谓的弱分类器其实是由特征f、阈值theta和一个决定不等号方向的p所决定的在此先不考虑p,简单谈谈我理解中的选择最优弱分类器的过程。 在上述的特征中,第一中的特征值就是两个矩形的像素值之差,那么对于...
  • 也就是对于任何一个分类任务,训练n个弱分类器,也就是分类准确度只比随机猜好一点,那么当n足够大的时候,通过投票机制,也能提升很大的准确度:毕竟每个网络都分错同一个数据的可能性会降低。 接下来就是代码实现...
  • 参照https://www.zhihu.com/question/26957827?sort=created,感谢作者以SVM这样的强分类器作为弱分类器使用,有可能会造成两个问题:1. 第一次产生的分类器错误率已经达到上限,使后面的分类器起不到效果,或者说...
  • adaboost训练弱分类器的...opencv中adaboost训练弱分类器的主体代码是函数cvCreateCARTClassifier,这个函数通过大致逻辑是:1、通过调用训练结点函数cvCreateMTStumpClassifier来创建根结点 2、在要求弱分类器特征
  • 接着上一个博客http://blog.csdn.net/lanxuecc/article/details/52688605在弱分类器训练的主体函数cvCreateCARTClassifier中我们看到主要是调用cvCreateMTStumpClassifier函数来训练得到弱分类器的结点,下面注释下...
  • cvCreateMTStumpClassifier计算最优弱分类器的代码总体思路
  • opencv中adaboost训练弱分类器的主体代码是函数cvCreateCARTClassifier,这个函数通过大致逻辑是: 1、通过调用训练结点函数cvCreateMTStumpClassifier来创建根结点  2、在要求弱分类器特征不只一个的情况下,通过...
  • 前言: 笔者是刚刚入门机器学习的小白,最近在看李航老师的《统计学习...题目要求弱分类器为决策树桩,并用AdaBoost算法学习一个强分类器。对于AdaBoost,想要了解算法的详细过程可以查阅《统计学习方法》,书中有明...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,151
精华内容 1,660
关键字:

弱分类