zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)

Python机器算法学习 实现 决策树 AdaBoost
2023-09-27 14:27:08 时间

(转载请注明出处:http://blog.csdn.net/buptgshengod)

     上一节学习支持向量机,感觉公式都太难理解了,弄得我有点头大。不过这一章的Adaboost线比较起来就容易得多。Adaboost是用元算法的思想进行分类的。什么事元算法的思想呢?就是根据数据集的不同的特征在决定结果时所占的比重来划分数据集。就是要对每个特征值都构建决策树,并且赋予他们不同的权值,最后集合起来比较。       比如说我们可以通过是否有胡子和身高的高度这两个特征来来决定一个人的性别,很明显是否有胡子可能在判定性别方面比身高更准确,所以在判定的时候我们就赋予这个特征更大的权重,比如说我们把权重设成0.8:0.2。这样就比0.5:0.5的权重来的更准确些。 2.构建决策树     接着我们来构建决策树。我们的决策树要实现主要两个功能,一个是找出对结果影响最大的特征值。另外一个功能是找到这个特征值得阈值。阈值就是,比方说阈值是d,当特征值大于d结果为1,当特征值小于d结果为0。 首先看下数据集,是一个两个特征值的矩阵。
ef loadSimpData():

 datMat = matrix([[ 1. , 2.1],

 [ 2. , 1.1],

 [ 1.3, 1. ],

 [ 1. , 1. ],

 [ 2. , 1. ]])

 classLabels = [1.0, 1.0, -1.0, -1.0, 1.0]

 return datMat,classLabels


接着是树的分类函数。这个函数在下面的循环里要用到,作用很简单,就是比对每一列的特征值和目标函数,返回比对的结果。四个参数分别是(输入矩阵,第几列,阈值,lt或gt)
def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):#just classify the data

 retArray = ones((shape(dataMatrix)[0],1))

 if threshIneq == lt:

 retArray[dataMatrix[:,dimen] = threshVal] = -1.0

 else:

 retArray[dataMatrix[:,dimen] threshVal] = -1.0

 return retArray

最后是构建二叉树函数,通过循环比较得到最佳特征值和它的阈值。D是初始矩阵的权重。
def buildStump(dataArr,classLabels,D):

 dataMatrix = mat(dataArr); labelMat = mat(classLabels).T

 m,n = shape(dataMatrix)

 numSteps = 10.0; bestStump = {}; bestClasEst = mat(zeros((m,1)))

 minError = inf #init error sum, to +infinity

 for i in range(n):#loop over all dimensions

 rangeMin = dataMatrix[:,i].min(); rangeMax = dataMatrix[:,i].max();

 stepSize = (rangeMax-rangeMin)/numSteps

 for j in range(-1,int(numSteps)+1):#loop over all range in current dimension

 for inequal in [lt, gt]: #go over less than and greater than

 threshVal = (rangeMin + float(j) * stepSize)

 predictedVals = stumpClassify(dataMatrix,i,threshVal,inequal)#call stump classify with i, j, lessThan

 errArr = mat(ones((m,1)))


weightedError = D.T*errArr #calc total error multiplied by D #print "split: dim %d, thresh %.2f, thresh ineqal: %s, the weighted error is %.3f" % (i, threshVal, inequal, weightedError) if weightedError minError: minError = weightedError bestClasEst = predictedVals.copy() bestStump[dim] = i bestStump[thresh] = threshVal bestStump[ineq] = inequal return bestStump,minError,bestClasEst

3.结果                 当我们假设初始权重相同(5行数据也就是都是0.2),得到结果


{dim: 0, ineq: lt, thresh: 1.3}——第一个特征值权重最大,阈值是1.3


 [[ 0.2]]——错误率0.2,也就是五个错一个


[[-1.]————判断结果,第一个数据错误

 [ 1.]

 [-1.]

 [-1.]

 [ 1.]]

4.代码下载
下载地址(Decision Stump)
参考文献:

    [1] machine learning in action,Peter Harrington
   


Python机器学习算法入门教程(四) 我们知道有监督学习分为“回归问题”和“分类问题”,前面我们已经认识了什么是“回归问题”,从本节开始我们将讲解“分类问题”的相关算法。在介绍具体的算法前,我们先聊聊到底什么是分类问题。
Python机器学习算法入门教程(三) 本节讲解如何构建线性回归算法中的“线性模型”,所谓“线性”其实就是一条“直线”。因此,本节开篇首先普及一下初中的数学知识“一次函数”。
Python机器学习算法入门教程(二) 常言道“工欲善其事,必先利其器”,在学习机器学习算法之前,我们需要做一些准备工作,首先要检查自己的知识体系是否完备,其次是要搭建机器学习的开发环境。
Python机器学习算法入门教程(一)(下) 机器学习(Machine Learning,简称 ML)是人工智能领域的一个分支,也是人工智能的核心,其涉及知识非常广泛,比如概率论、统计学、近似理论、高等数学等多门学科。
Python机器学习算法入门教程(一)(上) 机器学习(Machine Learning,简称 ML)是人工智能领域的一个分支,也是人工智能的核心,其涉及知识非常广泛,比如概率论、统计学、近似理论、高等数学等多门学科。
Python机器学习算法入门指南(全) 机器学习 作为人工智能领域的核心组成,是计算机程序学习数据经验以优化自身算法,并产生相应的“智能化的”建议与决策的过程。
机器学习实战 | Python机器学习算法应用实践 本篇文章详解机器学习应用流程,应用在结构化数据和非结构化数据(图像)上,借助案例重温机器学习基础知识,并学习应用机器学习解决问题的基本流程。
傲海 著有《机器学习实践应用》,阿里云机器学习PAI产品经理,个人微信公众号 ldquo;凡人机器学习 rdquo;。