def adaBoostTrainDS2(dataArray, classLabels, numIter = 40): weakClassArr = [] #弱分类器数组 m = np.shape(dataArray)[0] D = np.mat(np.ones((m, 1)) / m) aggClassEst = np.mat(np.zeros((m, 1))) for i in range(numIter): bestStump, error, classEst = adaboost.buildStump(dataArray, classLabels, D) print("D:", D.T) alpha = np.float(0.5 * np.log((1.0 - error) / np.max(error, 1e-16))) bestStump['alpha'] = alpha weakClassArr.append(bestStump) print("classEst: ", classEst.T) expon = np.multiply(-1 * alpha * np.mat(classLabels).T, classEst) D = np.multiply(D, np.exp(expon)) D = D / D.sum() aggClassEst += alpha * classEst print("aggClassEst: ", aggClassEst.T) aggErrors = np.multiply(np.sign(aggClassEst) != np.mat(classLabels).T,\ np.ones((m, 1))) errorRate = aggErrors.sum() / m print("total error: ", errorRate, "\n") if errorRate == 0.0: break #print "weakClassArr", weakClassArr return weakClassArr, aggClassEst
def main(): import adaboost from numpy import mat, ones datMat, classLabels = adaboost.loadSimpleData() D = mat(ones((5, 1)) / 5) bestStump, minError, bestClasEst = adaboost.buildStump( datMat, classLabels, D) classifierArr, aggClassEst = adaboost.adaBoostTrainDS(datMat, classLabels, 9) adaboost.adaClassify([[5, 5], [0, 0]], classifierArr)
def test(): datMat, classLabels = adaboost.loadSimpleData() print("dataMat: [%s] classLabels: [%s]" % (datMat, classLabels)) #adaboost.plt(datMat, classLabels) D = mat(ones((5,1))/5) bestStump, minError, bestClassEst = adaboost.buildStump(datMat, classLabels, D) print("bestStump: ", bestStump, " minError:", minError, " bestClasEst:", bestClassEst) classifierArray, classifierEst = adaboost.adaBoostTrainDS(datMat, classLabels, 9) print("classifierArray:", classifierArray) print(adaboost.adaClassify([0,0], classifierArray)) print(adaboost.adaClassify([[5,5],[0,0]], classifierArray))
def adaBoostTrainDS(dataArr, classLabels, numIt=40): from numpy import shape from numpy import mat from numpy import ones from numpy import shape from numpy import log from numpy import multiply from numpy import exp from numpy import zeros from numpy import sign from adaboost import buildStump weakClassArr = [] m = shape(dataArr)[0] D = mat(ones((m, 1)) / m) aggClassEst = mat(zeros((m, 1))) # 保持一个运行时估计值 for i in range(numIt): print "index:", i bestStump, error, classEst = buildStump(dataArr, classLabels, D) print "D:", D.T # max(error,1e-16) 确保在没有错误时不会发生除零溢出 alpha = float(0.5 * log((1.0 - error) / max(error, 1e-16))) bestStump['alpha'] = alpha weakClassArr.append(bestStump) print "classEst: ", classEst.T expon = multiply(-1 * alpha * mat(classLabels).T, classEst) D = multiply(D, exp(expon)) D = D / D.sum() aggClassEst += alpha * classEst print "aggClassEst: ", aggClassEst.T aggErrors = multiply( sign(aggClassEst) != mat(classLabels).T, ones((m, 1))) errorRate = aggErrors.sum() / m print "total error: ", errorRate, "\n" if errorRate == 0.0: break return weakClassArr, aggClassEst # 修改之处
# -*- coding:utf-8 -*- import adaboost from numpy import * import os # homedir= os.getcwd()+'/machinelearninginaction/ch07/' #绝对路径 homedir = '' #相对路径 #7.3 基于单层决策树构建弱分类器 datMat, classLabels = adaboost.loadSimpData() D = mat(ones((5, 1)) / 5) print "datMat:", datMat print "classLabels:", classLabels print "D:", D print ":", adaboost.buildStump(datMat, classLabels, D) #7.4 完整AdaBoost算法的实现 classifierArr = adaboost.adaBoostTrainDS(datMat, classLabels, 9) print "classifierArr:", classifierArr #7.5 测试算法:基于AdaBoost的分类 datMat, classLabels = adaboost.loadSimpData() classifierArr = adaboost.adaBoostTrainDS(datMat, classLabels, 30) print "分类1:", adaboost.adaClassify([0, 0], classifierArr) print "分类2:", adaboost.adaClassify([[5, 5], [0, 0]], classifierArr) #7.6 示例:在一个难数据集上应用AdaBoost datArr, labelArr = adaboost.loadDataSet(homedir + 'horseColicTraining2.txt') print "datArr:", datArr print "labelArr:", labelArr
import adaboost from numpy import * datMat,classLabels=adaboost.loadSimpData() print "%s \n %s" % (classLabels, classLabels) D = mat(ones((5,1))/5) print "%s" % D bestStump,minError,bestClasEst = adaboost.buildStump(datMat,classLabels,D) print "%s" % bestStump print "%s" % minError print "%s" % bestClasEst
import adaboost from numpy import * datMat, classLabels = adaboost.loadSimpData() D = mat(ones((5, 1))/5) print adaboost.buildStump(datMat, classLabels, D) classifierArray = adaboost.adaBoostTrainDS(datMat, classLabels, 9) print classifierArray datArr, labelArr = adaboost.loadSimpData() classifierArr = adaboost.adaBoostTrainDS(datArr, labelArr, 30) print adaboost.adaClassify([0, 0], classifierArr) print adaboost.adaClassify([[5, 5], [0, 0]], classifierArr)
__author__ = 'sunbeansoft' import adaboost as ad from numpy import * datMat, classLabels = ad.loadSimpData() D = mat(ones((5, 1))) print ad.buildStump(datMat, classLabels, D)
for i in range(len(classifierArr)): classEst = stumpClassify( dataMatrix, classifierArr[i]['dim'], classifierArr[i]['thresh'], classifierArr[i]['ineq']) #call stump classify aggClassEst += classifierArr[i]['alpha'] * classEst print(aggClassEst) return sign(aggClassEst) if __name__ == "__main__": import numpy as np import adaboost dataMat, classLabels = loadSimpData() print(dataMat, "\n", classLabels) D = np.mat((np.ones((5, 1))) / 5) #print(D) print(adaboost.buildStump(dataMat, classLabels, D)) classifierArray = adaboost.adaBoostTrainDS(dataMat, classLabels, 9) print("\nclassifierArray:\n", classifierArray) print("\nadaboost.adaClassify([0, 0]:") print(adaboost.adaClassify([0, 0], classifierArray)) print("\nadaboost.adaClassify([[5,5],[0,0]]:") print(adaboost.adaClassify([[5, 5], [0, 0]], classifierArray)) datArr, labelArr = adaboost.loadDataSet('horseColicTraining2.txt') classifierArray = adaboost.adaBoostTrainDS(datArr, labelArr, 10) print(classifierArray)
def test_build_stump(self): #print "test_build_stump" dataMat, classLabels = adaboost.loadSimpleData() D = mat(ones((5, 1)) / 5) result = adaboost.buildStump(dataMat, classLabels, D)
# -*- coding: utf-8 -*- # os.chdir('D:\www\IdeaProject\MLiA_SourceCode\machinelearninginaction\Ch07\') # print os.getcwd() from numpy.ma import zeros, array if __name__ == '__main__': print 'hello' from numpy import * # import operator import adaboost dataMat, classLabels = adaboost.loadSimpData() print dataMat print classLabels D = mat(ones((5, 1)) / 5) print D bestStump, minError, bestClasEst = adaboost.buildStump( dataMat, classLabels, D) print bestStump