码迷,mamicode.com
首页 > 编程语言 > 详细

AdaBoost算法实现

时间:2016-08-18 12:28:26      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# AdaBoost.py
# Created on: 2014-06-12 09:49:56.00000
# Description:
# ---------------------------------------------------------------------------

import sys
import math
import numpy as np

breakValues = (2.5, 5.5, 8.5)
X = np.array([0,1,2,3,4,5,6,7,8,9])
Y = np.array([1,1,1,-1,-1,-1,1,1,1,-1])
W1 = np.array([0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1])
    
def Classifier25(x):
    if x <= 2.5:
        return 1
    else:
        return -1
    
def Classifier55(x):
    if x >= 5.5:
        return 1
    else:
        return -1
    
def Classifier85(x):
    if x <= 8.5:
        return 1
    else:
        return -1
    
def ClassifyArray(XArray, Classifier):
    YY = []
    for x in XArray:
        YY.append(Classifier(x))
    print(YY)
    return YY
def ErrorSum(YY):
    i = 0
    errorValue = 0;
    for y in YY:
        if y != Y[i]:
            errorValue += W1[i]
        i = i+1
    return errorValue

def ErrorAllSum(ExpressArray):
    i = 0
    errorValue = 0;
    for x in X:
        value = 0
        for express in ExpressArray:
            value += express[0] * express[1](x)
        if value > 0:
            value = 1
        else:
            value = -1
        if value != Y[i]:
            errorValue += 0.1
        i = i+1
    return errorValue


def SelectClassifierFunction(XArray):
    ClassifierArray = [Classifier25, Classifier55, Classifier85]
    errArray = []
    value = float(NaN)
    errMin = float(Inf)
    for classifier in ClassifierArray:
        #计算分类的结果值
        YY = ClassifyArray(XArray, classifier)
        #计算分类的错误率
        errorValue = ErrorSum(YY)
        errArray.append(errorValue)
        if errorValue < errMin:
            errMin = errorValue
            value = classifier
    print(errArray)
    print(value.__name__)
    return value

print(W1)

‘‘‘
print(‘--------------------------------‘)
classifier = SelectClassifierFunction(X)
#计算分类的结果值
G = ClassifyArray(X, classifier)
#计算分类的错误率
e = ErrorSum(G)
a = 0.5 * math.log((1-e)/e)
a = round(a, 4)
print(a)
W2 = W1*np.exp(-a*Y*np.array(G))
Zm = np.sum(W2)
#Zm = round(Zm, 4)
print(Zm)
W1 = W2 / Zm
print(W1)

print(‘--------------------------------‘)

W1 = np.array([0.0715,0.0715,0.0715,0.0715,0.0715,0.0715,0.1666,0.1666,0.1666,0.07151])
classifier = SelectClassifierFunction(X)
#计算分类的结果值
G = ClassifyArray(X, classifier)
#计算分类的错误率
e = ErrorSum(G)
a = 0.5 * math.log((1-e)/e)
a = round(a, 4)
print(a)
W2 = W1*np.exp(-a*Y*np.array(G))
Zm = np.sum(W2)
#Zm = round(Zm, 4)
print(Zm)
W1 = W2 / Zm
print(W1)

print(‘--------------------------------‘)

W1 = np.array([0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.01667, 0.1060, 0.1060, 0.1060, 0.0455])
classifier = SelectClassifierFunction(X)
#计算分类的结果值
G = ClassifyArray(X, classifier)
#计算分类的错误率
e = ErrorSum(G)
a = 0.5 * math.log((1-e)/e)
a = round(a, 4)
print(a)
W2 = W1*np.exp(-a*Y*np.array(G))
Zm = np.sum(W2)
#Zm = round(Zm, 4)
print(Zm)
W1 = W2 / Zm
print(W1)
‘‘‘

errorAll = 100
ExpressArray = []
while errorAll > 0.1:
    print(--------------------------------)
    classifier = SelectClassifierFunction(X)
    #计算分类的结果值
    G = ClassifyArray(X, classifier)
    #计算分类的错误率
    e = ErrorSum(G)
    a = 0.5 * math.log((1-e)/e)
    a = round(a, 4)
    print(a: + str(a))
    W2 = W1*np.exp(-a*Y*np.array(G))
    Zm = np.sum(W2)
    #Zm = round(Zm, 4)
    print(Zm)
    print(Zm: + str(Zm))
    W1 = W2 / Zm
    print(W1: + str(W1))
    ExpressArray.append([a,classifier])    
    errorAll = ErrorAllSum(ExpressArray)
    print(errorAll: + str(errorAll))


expressString = G(x) = sign( 
i = 0
for express in ExpressArray:
    if i > 0:
        expressString +=  + 
    expressString += str(express[0]) +  *  + express[1].__name__+(x)
    i += 1

expressString +=  )
print(--------------------------------)
print(分类函数为:\n + expressString)
print(--------------------------------)

AdaBoost算法实现

标签:

原文地址:http://www.cnblogs.com/gispathfinder/p/5783406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!