AdaBoost算法实现

# -*- 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(‘--------------------------------‘)
时间: 2024-10-14 18:32:06

AdaBoost算法实现的相关文章

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

写一个个人认为比较详细的adaboost算法

最近在看机器学习中adaboost(adaptive boostint)算法部分的内容,在csdn上面查找一番发现,好像没有讲的特别的详尽的,当然可能是我人品不佳,所以没有找到,为了防止同样的事情发生在其他人的身上,所以就写了这篇博文,尽量多的解释算法的推演过程更方便的大家去理解这个算法. 介绍adaboost算法之前,首先介绍一下学习算法的强弱,这个是PAC定义的:弱学习算法---识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法),强学习算法---识别准确率很高并能在多项式时间内完成的

集成学习之Adaboost算法原理小结

在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boosting系列算法.在boosting系列算法中, Adaboost是最著名的算法之一.Adaboost既可以用作分类,也可以用作回归.本文就对Adaboost算法做一个总结. 1. 回顾boosting算法的基本原理 在集成学习原理小结中,我们已经讲到了boosting算法系列的基本思想,如下图: 从图中

【机器学习笔记之四】Adaboost 算法

本文结构: 什么是集成学习? 为什么集成的效果就会好于单个学习器? 如何生成个体学习器? 什么是 Boosting? Adaboost 算法? 什么是集成学习 集成学习就是将多个弱的学习器结合起来组成一个强的学习器. 这就涉及到,先产生一组‘个体学习器’,再用一个策略将它们结合起来. 个体学习器可以选择:决策树,神经网络.集成时可以所有个体学习器属于同一类算法:全是决策树,或全是神经网络:也可以来自不同的算法.结合策略:例如分类问题,可以用投票法,少数服从多数. 之所以用这种集成的思想,是因为单

【机器学习详解】AdaBoost算法原理

转载请注明出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51714346 1.概念 AdaBoost是一种级联算法模型,即把几个弱分类器级联到一起去处理同一个分类问题.也就是"三个臭皮匠顶一个诸葛亮"的道理.例如一个专家作出的判定往往没有几个专家一起作出的判定更准确.一种情况:如果每个专家都仅有一票的权利,采用投票机制的方法属于uniform形式:另一种情况是分配给每个专家的票数不一致则属于linear形式.A

Adaboost算法结合Haar-like特征

本文主要是介绍自适应提升学习算法(Adaptive Boosting,Adaboost)原理,因为其中涉及到分类器,而分类器往往是基于一些样本特征得到的,所以在此介绍最常用的Adaboost算法结合Haar-like特征.该算法首先在人脸检测中得到广泛运用,而后也被用于其它有关目标检测中. 1.Adaboost算法 1.1 Adaboost算法的前生 在了解Adaboost之前,先了解一下Boosting算法. 回答一个是与否的问题,随机猜测可以获得50%的正确率.若一种方法能获得比随机猜测稍微

图像算法研究---Adaboost算法详解

本篇文章先介绍了提升放法和AdaBoost算法.已经了解的可以直接跳过.后面给出了AdaBoost算法的两个例子,附有详细计算过程. 1.提升方法(来源于统计学习方法) 提升方法是一种常用的统计学习方法,应用十分广泛且有效.在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能.提升算法基于这样一种思路:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好.实际上,就是"三个臭皮匠顶个诸葛亮"的道

一个关于AdaBoost算法的简单证明

下载本文PDF格式(Academia.edu) 本文给出了机器学习中AdaBoost算法的一个简单初等证明,需要使用的数学工具为微积分-1. Adaboost is a powerful algorithm for predicting models. However, a major disadvantage is that Adaboost may lead to over-fit in the presence of noise. Freund, Y. & Schapire, R. E.

图像算法研究---Adaboost算法具体解释

本篇文章先介绍了提升放法和AdaBoost算法.已经了解的可以直接跳过.后面给出了AdaBoost算法的两个样例.附有详细计算过程. 1.提升方法(来源于统计学习方法) 提升方法是一种经常使用的统计学习方法,应用十分广泛且有效.在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能. 提升算法基于这样一种思路:对于一个复杂任务来说,将多个专家的推断进行适当的综合所得出的推断.要比当中不论什么一个专家单独的推断好. 实际上.就是"三个臭皮匠顶个诸葛亮&q

Adaboost 算法的原理与推导

0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次课上讲决策树与Adaboost,其中,Adaboost讲得酣畅淋漓,讲完后,我知道,可以写本篇博客了. 无心啰嗦,本文结合邹博之决策树与Adaboost 的PPT 跟<统计学习方法>等参考资料写就,可以定义为一篇课程笔记.读书笔记或学习心得,有何问题或意见,欢迎于本文评论下随时不吝指出,thank