集成学习——AdaBoost(自适应增强)

39 篇文章 2 订阅
13 篇文章 0 订阅

集成学习——AdaBoost(自适应增强)

0. 原理

朴素的思想:将学习的重点放在出错的地方。
学习步骤:首先准备一份训练集X,对训练集进行有放回的随机抽样,用于训练。Adaboost会有序地构建一系列弱分类器:首先抽取一份训练数据,用作分类,构建第一个弱分类器,同时根据分类结果修改训练集X(某条数据分类错误时,提高该条数据在X中的份量,即提高抽取到该条数据概率,加强下次新的弱分类器针对错误情况的训练;相对的,分类正确的数据在X的份量就被降低了)。然后,再次抽取数据训练,构建第二个弱分类器,修改训练集X。后续弱分类器的构建,依此类推。最终,决定类别时,使用每个弱分类器的各分类一次,根据每个弱分类器已有的准确度属性衡量每个弱分类器在决定最终类别时的贡献(准确度高的贡献更高),从而决定最终类别。

1. 导包

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

2. 原始数据

# 使用datasets生成数据
x1, y1 = datasets.make_gaussian_quantiles(mean=(3, 6),n_samples=1000, n_features=2, n_classes=2)
x2, y2 = datasets.make_gaussian_quantiles(mean=(6, 3), n_samples=1000, n_features=2, n_classes=2)

X = np.concatenate((x1, x2))
y = np.concatenate((y1, y2))

# 作图
plt.scatter(X[:, 0], X[:, 1], c=y_data)
plt.show()

数据展示图

3. 数据预处理

# 训练集、测试集拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

4. 参照模型(决策树)

  • 构建决策树模型
model = DecisionTreeClassifier(max_depth=5)
model.fit(X_train, y_train)
  • 结果预测与评分
# 评分
print(model.score(X_test, y_test))
# 结果预测
y_predict = model.predict(X_test)
print(y_predict[0:10])
# 打印分类结果统计信息
print(classification_report(y_test, y_predict))
  • 结果打印
0.728
[0 1 1 0 0 0 0 0 0 0]
              precision    recall  f1-score   support

           0       0.64      0.99      0.77       235
           1       0.98      0.50      0.66       265

   micro avg       0.73      0.73      0.73       500
   macro avg       0.81      0.74      0.72       500
weighted avg       0.82      0.73      0.71       500

5. 使用Adaboost 提升评分

  • Adaboost模型构建
# Adaboost
model = AdaBoostClassifier(DecisionTreeClassifier(max_depth=5), n_estimators=100)
model.fit(X_train, y_train)
  • 结果预测与评分
# 评分
print(model.score(X_test, y_test))
# 结果预测
y_predict = model.predict(X_test)
print(y_predict[0:10])
# 打印分类结果统计信息
print(classification_report(y_test, y_predict))
  • 结果打印
0.972
[1 1 1 0 0 0 0 0 0 0]
              precision    recall  f1-score   support

           0       0.95      0.99      0.97       235
           1       0.99      0.96      0.97       265

   micro avg       0.97      0.97      0.97       500
   macro avg       0.97      0.97      0.97       500
weighted avg       0.97      0.97      0.97       500
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值