1.AdaBoost算法:
什么叫AdaBoost算法呢,我们可以这样理解:当我们做重要的决定的时候,我们一个人的意见有可能是错误的,但时如果我们能够吸取多个人的意见再做决定,那我们犯错误的几率就会大大的下降,没错,AdaBoost就是就是这样的算法,当我们只采用一个分类器来分类的时候,我们犯错的几率可能会是30%,但是如果我们采用多个分类器来分类,那我们的错误几率就有可能降低到10%,甚至5%以内。这就是AdaBoost强大的能力。
2.AdaBoost算法的实现:
首先我们将会建立一个单层的决策树分类器,它是一个单节点的决策树。AdaBoost将建立在这个单层分类器上。
AdaBoost的运行过程如下:训练数据中的每个样本,并赋予一个权重,这些权重构成向量D。一开始,这些权重都初始化为相等的值。首先在训练数据上训练出一个弱分类器,并计算该分类器的准确率,然后在同一数据集上再次训练弱分类器。在分类器的第二次训练当中,将会重新调整每个样本的权值,其中第一次分对的样本权值将会下降,第一次分错的样本的权值将会增加。为了从所有弱分类器中得到最终的分类结果,AdaBoost为每个分类器都分配了一个权值alpha,这些alpha是基于每个弱分类器的错误率进行计算的:
error=未分对的样本数/所有样本数目
alpha的计算公式如下:
alpha=1/2 * ln(1-error/error)
容易发现当错误率error越大时,该分类器对应得权值alpha就越小,error越小,该分类器对应得权值就越大。
AdaBoost的工作原理如图:
首先我们需要创建一个单层决策数分类器:
from numpy import *
#单侧决策树分类器
def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):
"""
次函数的功能就是:将dataMatrix的第dimen个维度的数据与threshVal进行比较,对dataMatrix进行分类,
将大于threshVal的分成一类,
将小于threshVal的 分成另外一类。
:param dataMatrix: 数据集
:param dimen: 分类依据的维度
:param thres