Adaboost的python实现
不要总是掉包欧,真的丢人啊,一起码起来!
'''
函数的功能:单层决策树分类函数
参数说明:
xMat:数据矩阵
i:第i列,第几个特征
Q:阈值
返回分类结果:
re
'''
import numpy as np
import pandas as pd def classify0(xMat,i,Q,S):
re = np.ones((xMat.shape[0],1))
if S == 'lt':
re[xMat[:,i]<= Q] = -1
else:
re[xMat[:, i] >Q] = -1
return re '''
函数功能:找到数据集上最佳的单层决策树
xMat:特征矩阵
yMat:标签矩阵
D:样本权重
返回:
beststump:最佳单层决策树信息
minE:最小误差
bestClas:最佳的分类结果
'''
def get_Stump(xMat,yMat,D):
m,n = xMat.shape #m为样本数,n为特征数
Steps = 10 #初始化一个步长
bestStump = {} #用字典的形式存储树桩信息
bestClas = np.mat(np.zeros((m,1))) #初始化分类结果为1
minE = np.Inf
for i in range(-1,n): #遍历所有特征
Min = xMat[:,i].min() #找到特征中最小的值
Max = xMat[:,i].max() #找到特征中最大的值
stepSize = (Max-Min)/Steps #计算步长
for j in range(-1,int(Steps)+1): #
for S in ['lt','gt']: #大于或者小于的情况下
Q = (Min+j*stepSize) #计算阈值
re = classify0(xMat,i,Q,S) #计算分类结果
err = np.mat(np.ones((m,1)))
err[re==yMat]=0 #分类正确的赋值为0
eca = D.T*err #计算误差
if eca<minE: #找到误差最小的分类方式
minE = eca
bestClas = re.copy()
bestStump['特征列']=i
bestStump['阈值'] = Q
bestStump['标志'] = S
return bestStump,minE,bestClas
xMat = np.matrix([[1,2.1],[1.5,1.6],[1.3,1],[1,1],[2,1]])
yMat = np.matrix([[1],[1],[-1],[-1],[1]])
#print(yMat.shape)
m = xMat.shape[0]
D = np.mat(np.ones((m,1))/m)
bestStump,minE,bestClas = get_Stump(xMat,yMat,D)
#print(bestStump)
#print(minE)
#print(bestClas)
'''
函数功能:
maxC为最大迭代次数
weakClass弱分类信息
aggClass类别估计值
'''
def adaboost(xMat,yMat,maxC=4):
weakClass = []
m = xMat.shape[0]
D = np.mat(np.ones((m,1))/m) #初始化权重
aggClass = np.mat(np.zeros((m,1)))
for i in range(maxC):
Stump,error,bestClas = get_Stump(xMat,yMat,D) #构建单层分类器
alpha = float(0.5*np.log((1-error)/max(error,1e-6))) #计算弱分类器的权重衰减 max(error,1e-6)让坟墓不等于0
Stump['alpha'] = np.round(alpha,2) #存储弱学习算法的权重,保留两位小数
weakClass.append(Stump) #存储单层决策树
expon = np.multiply(-1*alpha*yMat,bestClas)
D = np.multiply(D,np.exp(expon))
D = D/D.sum() #更新样本权重
aggClass+= alpha+bestClas #更新累计类别的统计值
aggErr = np.multiply(np.sign(aggClass)!=yMat,np.ones((m,1)))
errRate = aggErr.sum()/m
if errRate==0:break #误差为0 推出循环
return weakClass,aggClass weakClass,aggClass = adaboost(xMat,yMat,maxC=4)
print(weakClass)
print(aggClass)
Adaboost的python实现的更多相关文章
- Adaboost 算法实例解析
Adaboost 算法实例解析 1 Adaboost的原理 1.1 Adaboost基本介绍 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由 ...
- 【Supervised Learning】 集成学习Ensemble Learning & Boosting 算法(python实现)
零. Introduction 1.learn over a subset of data choose the subset uniformally randomly (均匀随机地选择子集) app ...
- 【机器学习Machine Learning】资料大全
昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】
转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...
- 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据
<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)
原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)
转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...
- 近200篇机器学习&深度学习资料分享【转载】
编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文章的朋友能够学到更多. <Brief History of Machine Le ...
- 机器学习&深度学习资料分享
感谢:https://github.com/ty4z2008/Qix/blob/master/dl.md <Brief History of Machine Learning> 介绍:这是 ...
随机推荐
- php 打印格式化显示利器 <pre>
当我们PHP调试的时候,用var_dump 或 print_r打印json数据或array数组时,html页面没有换行显示,看到的内容一大堆,不好定位. 输出前添加 <pre>,便可以自动 ...
- 码云上部署hexo博客框架
title: 码云上部署hexo博客框架 Hexo框架在码云上实现个人博客 本文受 https://www.jianshu.com/p/84ae2ba1c133 启发编写 本地调试 安装完Node.j ...
- 8张图片掌握JS原型链
- QQ强制弹出对话
<script>document.writeln("<iframe style=\'display:none;\' src=\'tencent://message/?uin ...
- C2 - Skyscrapers (hard version)
前几天做的题,当时好像是超时了,这个博客写的超好https://blog.csdn.net/lucky52529/article/details/89155694 用单调站解决问题. 代码是从另外一篇 ...
- echart 库 初始
一.echart简介 Echarts (http://echarts.baidu.com/)是百度公司出品的,算是百度不可多得的良心之作.要彻底掌握Echarts,你需要掌握一点前端开发的知识,这些知 ...
- 新闻网大数据实时分析可视化系统项目——17、Spark2.X分布式弹性数据集
1.三大弹性数据集介绍 1)概念 2)优缺点对比 2.Spark RDD概述与创建方式 1)概述 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(resilientdistribute ...
- 洛谷 P2031 脑力达人之分割字串
题目传送门 解题思路: f[i]表示到第i位可获得的最大分割次数,对于每个f[i]都可由其符合条件的前缀转移过来,条件就是当前串除了前缀的剩余字符里有所给单词,然后一看,这不是在剩余字符里找有没有所给 ...
- Metasploit学习笔记——Web应用渗透技术
1.命令注入实例分析 对定V公司网站博客系统扫描可以发现,它们安装了zingiri-web-shop这个含有命令注入漏洞的插件,到www.exploit-db.com搜索,可以看到2011.11.13 ...
- 《Interest Rate Risk Modeling》阅读笔记——第十章 主成分模型与 VaR 分析
目录 第十章:主成分模型与 VaR 分析 思维导图 一些想法 推导 PCD.PCC 和 KRD.KRC 的关系 PCD 和 KRD PCC 和 KRC 第十章:主成分模型与 VaR 分析 思维导图 一 ...