boosting算法

简介:

adaBoost(自适应增强)的缩写,他的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确的分类样本的权值会减少,并再次用来训练下一个分类器,同时,在每一轮迭代中,加如一个新的若分类器,直到达到某一个预定的足够小的错误率,或达到预先指定的最大迭代次数才能确定最终的强分类器

adaboost算法可以简述为三个步骤:

1.首先,是初始化训练数据的权值分布D1.假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值: w1 = 1/N

2.然后,训练弱分类器hi.具体训练的过程是:如果某个训练样本点,被若分类器hi准确的分类,那么在构造下一个训练集中,它对应的权值要减少相反,如果某个训练样本点被错误分类,那么他的权值就应该增大,权值更性过的样本集被用于训练下一个分类其,整个训练过程如此迭代地进行下去.

3.最后,将各个训练得到的弱分类器组合成一个强分类器,各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用

换而言之,误差率低的弱分类器在最终分类中占的权重较大,否之较小

adaboost算法流程:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import tree
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles
from sklearn.metrics import classification_report



#生成2维正太分布,生成的数据按分位数分为两类,500个样本,2个样本特征
x1,y1 = make_gaussian_quantiles(n_samples = 500,n_features=2,n_classes=2)
#生成2维正太分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3
x2,y2 = make_gaussian_quantiles(mean = (3,3),n_samples = 500,n_features=2,n_classes=2)
#将两组数据合成一组数据
x_data = np.concatenate((x1,x2))
y_data = np.concatenate((y1,-y2 + 1))


plt.scatter(x_data[:,0],x_data[:,1],c = y_data)

# 决策树模型
model = tree.DecisionTreeClassifier(max_depth = 3)

# 输入数据建立模型
model.fit(x_data,y_data)
#获取数据值所在的范围
x_min,x_max = x_data[:,0].min() - 1,x_data[:,0].max()+1
y_min,y_max = x_data[:,1].min() - 1,x_data[:,1].max()+1
#生成网格矩阵
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
                       np.arange(y_min,y_max,0.02))
z = model.predict(np.c_[xx.ravel(),yy.ravel()]) # ravel与flatten类似,多维数据转一维.flatten不会改变原始数据,ravel会改变原始数据
z = z.reshape(xx.shape)
# 登高线图
cs = plt.contourf(xx,yy,z)
plt.scatter(x_data[:,0],x_data[:,1],c = y_data)
plt.show()

# 模型准确率
model.score(x_data,y_data)


# adaboost模型 传入决策树模型
model = AdaBoostClassifier(DecisionTreeClassifier(max_depth = 3),n_estimators=10)
model.fit(x_data,y_data)
#获取数据值所在的范围
x_min,x_max = x_data[:,0].min() - 1,x_data[:,0].max()+1
y_min,y_max = x_data[:,1].min() - 1,x_data[:,1].max()+1
#生成网格矩阵
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
                       np.arange(y_min,y_max,0.02))
z = model.predict(np.c_[xx.ravel(),yy.ravel()]) # ravel与flatten类似,多维数据转一维.flatten不会改变原始数据,ravel会改变原始数据
z = z.reshape(xx.shape)
# 登高线图
cs = plt.contourf(xx,yy,z)
plt.scatter(x_data[:,0],x_data[:,1],c = y_data)
plt.show()
model.score(x_data,y_data)

 

stacking ,自行去了解这个算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CID( ͡ _ ͡°)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值