统计学习方法第八章AdaBoost算法的例8.1代码实践
2018-01-29 18:45
309 查看
统计学习方法第八章AdaBoost算法的例8.1代码实践
#-*- coding: utf-8 -*- from numpy import * def loadDataSet(): dataSet=[[0,1,2,3,4,5,6,7,8,9]] label=[1,1,1,-1,-1,-1,1,1,1,-1] return mat(dataSet).T,mat(label) def adaBoostTrain(dataSet,label,numIt=10): classifDict=[] m=shape(dataSet)[0] totalRetResult=mat(zeros((m,1))) weight=mat(ones((m,1))/m) for i in xrange(numIt): bestFeat,error,EstClass=decisionTree(dataSet,label,weight) alpha=float(0.5*log((1-error)/error)) bestFeat['alpha']=alpha classifDict.append(bestFeat) wtx=multiply(-1*alpha*mat(label).T,EstClass) weight=multiply(weight,exp(wtx)) weight=weight/sum(weight) totalRetResult += alpha*EstClass totalError = (sum(label.T != sign(totalRetResult))) / float(m) if totalError==0:break return classifDict,totalRetResult def splitDataSet(dataMat,feat,value,comp,m): retArray=ones((m,1)) if comp=='LT': retArray[dataMat[:,feat] <value] = -1.0 else: retArray[dataMat[:,feat] >value] = -1.0 return retArray def decisionTree(dataSet,labelList,weight): dataMat=mat(dataSet);labelMat=mat(labelList).T bestFeat={} minError=inf m,n=shape(dataMat) bestClass=mat(zeros((m,1))) for i in range(n): sortedIndex=argsort(dataMat,axis=i) for j in range(m-1): value=(dataMat[sortedIndex[j],i]+dataMat[sortedIndex[j+1],i])/2.0 for comp in ['LT', 'ST']: # 符号可以是大于或者小于 LT:larger than ST:small than retArray=splitDataSet(dataMat,i,value,comp,m) errSet=mat(ones((m,1))) errSet[retArray == labelMat] =0 #print D,errSet weightError=weight.T*errSet #print weightError if weightError<minError: minError=weightError bestFeat['feat']=i bestFeat['value']=value bestFeat['comp']=comp bestClass=retArray.copy() return bestFeat,minError,bestClass dataSet,label=loadDataSet() classifDict,totalRetResult=adaBoostTrain(dataSet,label) print "classifDict",classifDict print sign(totalRetResult)
执行结果如下:
classifDict [{'comp': 'ST', 'feat': 0, 'value': matrix([[ 2.5]]), 'alpha': 0.4236489301936017}, {'comp': 'ST', 'feat': 0, 'value': matrix([[ 8.5]]), 'alpha': 0.6496414920651304}, {'comp': 'LT', 'feat': 0, 'value': matrix([[ 5.5]]), 'alpha': 0.752038698388137}] [[ 1.] [ 1.] [ 1.] [-1.] [-1.] [-1.] [ 1.] [ 1.] [ 1.] [-1.]]
made by zcl at CUMT
I know I can because I have a heart that beats
相关文章推荐
- 统计学习方法第6 章的例6.1求最大熵用随机数代码实践
- 统计学习方法第三章例3.1代码实践
- 统计学习方法第五章CART算法代码实践例题5.4
- 统计学习方法第五章决策树的选择最优特征划分例5-1-5.2代码实践
- 统计学习方法第五章决策树C4.5算法代码实践
- 统计学习方法第11章条件随机场(CRF)的Viterbi算法例题11.3代码实践
- 统计学习方法第10章隐马尔可夫模型Viterbi算法例10.3代码实践
- 统计学习方法第10章隐马尔可夫模型后向算法例题10.2代码实践
- 统计学习方法第四章朴素贝叶斯的贝叶斯估计,例题4.2代码实践
- 统计学习方法第11章条件随机场例11.1的代码实践
- 统计学习方法第七章的序列最小最优化算法SMO代码实践
- 统计学习方法第二章例题2.2代码实践,感知机的对偶形式的代码实现
- 统计学习方法第五章决策树的ID3算法代码实践 例5.3
- jacoco远程统计代码覆盖率(实践)
- UNIX-LINUX编程实践教程->第八章->实例代码注解->写一个简单的shell
- 统计学习方法笔记,第二章感知机的python代码实现
- 第八章 实践 运行代码
- 统计学习方法---感知机算法实现代码
- 统计学习方法之感知机对偶形式Java实现代码
- 感知机学习算法——统计学习方法笔记,代码实现