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> 介绍:这是 ...
随机推荐
- 深入理解 C# 协变和逆变 (转载)
深入理解 C# 协变和逆变 msdn 解释如下: “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型. “逆变”则是指能够使用派生程度更小的类型. 解释的很正确,大致就是这样,不过不 ...
- Java提升四:Stream流
1.Stream流的定义 Stream是Java中的一个接口.它的作用类似于迭代器,但其功能比迭代器强大,主要用于对数组和集合的操作. Stream中的流式思想:每一步只操作,不存储. 2.Strea ...
- cenos7配置confluence+mysql5.6
一.准备阶段 我的环境为 腾讯云镜像centos7.4 ,centos 内置 mariadb 需要先删除 #检查是否安装了 mariadb rpm -qa |grep mariadb #删除mari ...
- 023、Java中String的用法
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- python中numpy矩阵运算操作大全(非常全)!
python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1.矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as n ...
- 吴裕雄--天生自然java开发常用类库学习笔记:IdentityHashMap类
import java.util.IdentityHashMap ; import java.util.HashMap ; import java.util.Set ; import java.uti ...
- 将数据写入已有的excel文件
/** * 将反馈结果写入excel中 * */ public static void writeExcelResult(String url,List<Integer> result) ...
- linux下nginx的安装和配置
准备目录 [root@sqh ~]# mkdir /usr/local/nginx [root@sqh ~]# cd /usr/local/nginx 添加一些支持和依赖 1.安装gcc 安装redi ...
- 关于spring-mvc.xml的静态资源的配置
转 配置如下: <!-- 配置静态资源 --><mvc:resources location="/static/" mapping="/static/* ...
- [JZOJ]3413.KC的瓷器
Description KC来到了一个盛产瓷器的国度.他来到了一位商人的店铺.在这个店铺中,KC看到了一个有n(1<=n<=100)排的柜子,每排都有一些瓷器,每排不超过100个.那些精美 ...