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('--------------------------------')
AdaBoost算法实现的更多相关文章
- 集成学习之Adaboost算法原理小结
在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boostin ...
- Adaboost 算法
一 Boosting 算法的起源 boost 算法系列的起源来自于PAC Learnability(PAC 可学习性).这套理论主要研究的是什么时候一个问题是可被学习的,当然也会探讨针对可学习的问题的 ...
- Adaboost 算法的原理与推导
0 引言 一直想写Adaboost来着,但迟迟未能动笔.其算法思想虽然简单“听取多人意见,最后综合决策”,但一般书上对其算法的流程描述实在是过于晦涩.昨日11月1日下午,邹博在我组织的机器学习班第8次 ...
- 一个关于AdaBoost算法的简单证明
下载本文PDF格式(Academia.edu) 本文给出了机器学习中AdaBoost算法的一个简单初等证明,需要使用的数学工具为微积分-1. Adaboost is a powerful algori ...
- Adaboost算法初识
1.算法思想很简单: AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(三个臭皮匠,顶个诸葛亮) 它的 ...
- 【AdaBoost算法】积分图代码实现
一.积分图介绍 定义:图像左上方的像素点值的和: 在Adaboost算法中可用于加速计算Haar或MB-LBP特征值,如下图: 二.代码实现 #include <opencv/highgui.h ...
- Adaboost算法结合Haar-like特征
Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...
- adaboost算法
三 Adaboost 算法 AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(很多博客里说的三个臭皮匠 ...
- AdaBoost 算法原理及推导
AdaBoost(Adaptive Boosting):自适应提升方法. 1.AdaBoost算法介绍 AdaBoost是Boosting方法中最优代表性的提升算法.该方法通过在每轮降低分对样例的权重 ...
- 数据挖掘学习笔记--AdaBoost算法(一)
声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢- 背景: AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊-,以下是自己看了A Short Introd ...
随机推荐
- Eclipse快捷键(转)
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...
- NIO的一坑一惑小记
前言 不知不觉,已那么长时间没有更新东西了,说来真是汗颜啊.(主要是最近在技术上豁然开朗的感觉越来越少了-_-|||) 最近一直在学习Linux相关的东西.又一次接触到了I/O复用模型(select/ ...
- Windows Azure HandBook (5) Azure混合云解决方案
<Windows Azure Platform 系列文章目录> 在很多情况下,我们都会遇到本地私有云和公有云做互通互联的混合云场景.对于这种混合云的场景,微软的Windows Azure会 ...
- [UWP]涨姿势UWP源码——极简的RSS阅读器
涨姿势UWP,一个开源的RSS阅读器,一个纯粹的项目,一个有道德的APP,一个脱离了低级趣味的作者,一些有益于人民的代码.骚年,还等什么,来涨点姿势吧! 该项目代码可能会引起部分人群的不适,敏感人群请 ...
- 关于WCF服务在高并发情况下报目标积极拒绝的异常处理
最近弄了个wcf的监控服务,偶尔监控到目标服务会报一个目标积极拒绝的错误.一开始以为服务停止了,上服务器检查目标服务好好的活着.于是开始查原因. 一般来说目标积极拒绝(TCP 10061)的异常主要是 ...
- C语言学习005:不能修改的字符串
一段有问题的代码,你能看出来么? int main(){ char* msg="ABC"; msg[]=msg[]; puts(msg); ; } 编译这段代码并不会有什么问题,一 ...
- Vimium 下载 像个 Geek 一样去浏览
插件地址(被墙):https://chrome.google.com/webstore/detail/dbepggeogbaibhgnhhndojpepiihcmeb 本地下载:http://file ...
- c#通过oledb获取excel文件表结构信息
这个问题来自论坛提问,同理可以获得access等数据库的表结构信息. using System; namespace ConsoleApplication11 { class Program { pu ...
- C#编程总结(六)异步编程
C#编程总结(六)异步编程 1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某 ...
- iBoxDB的学习与使用
1. 引言 一次偶然的机会接触到了iBoxDB这样一个小型的嵌入式对象数据库.感觉非常惊讶有这样轻巧的数据库.iBoxDB 本身是一个NOSQL 同时也有关系数据库的特点. 说说iBoxDB的优点: ...