机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

【模型融合】集成学习(boosting, bagging, stacking)原理介绍、python代码实现(sklearn)、分类回归任务实战 浅浅介绍了boost, bagging, stacking 的一些基本原理。内含NLP特征工程分类任务(小说新闻分类),2023美赛春季赛Y题二手帆船价格预测回归任务。 阅读详情

机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

摘要

本文通过python实现了集成学习中的Bagging和AdaBOOST算法,并将代码进行了封装,方便读者调用。

Bagging算法

import numpy as np
import pandas as pd
class Cyrus_bagging(object):
    def __init__(self,estimator,n_estimators = 20):
        self.estimator = estimator
        self.n_estimators = n_estimators
        self.models = None
    def fit(self,x,y):
        x = np.array(x)
        y = np.array(y).reshape((-1,))
        indices = np.arange(x.shape[0])
        self.models = []
        for i in range(self.n_estimators):
            index = np.random.choice(indices,x.shape[0])
            x0 = x[index]
            y0 = y[index]
            self.models.append(self.estimator.fit(x0,y0))
    def predict(self,x):
        res = np.zeros([x.shape[0],self.n_estimators])
        for i in range(self.n_estimators):
            res[:,i] = self.models[i].predict(x)
        result = []
        for i in range(res.shape[0]):
            pd_res = pd.Series(res[i,:]).value_counts()
            result.append(int(pd_res.argmax()))
        return np.array(result)
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
knn = KNeighborsClassifier()
model = Cyrus_bagging(knn)
model.fit(x_train,y_train)
y_pre = model.predict(x_test)
print(classification_report(y_test,y_pre))

示例使用的数据为了与不使用集成算法的模型的准确率区分开来,所以使用较少特征的数据,因而准确率不是特别高,不过与未使用集成算法的模型相比,准确率已经优出不少。

precision    recall  f1-score   support

          0       1.00      1.00      1.00        11
          1       0.67      0.67      0.67         9
          2       0.70      0.70      0.70        10

avg / total       0.80      0.80      0.80        30

Adaboost算法

import numpy as np
import pandas as pd
from sklearn.metrics import accuracy_score
class CyrusAdaBoost(object):
    def __init__(self,estimator,n_estimators = 20):
        self.estimator = estimator
        self.n_estimators = n_estimators
        self.error_rate = None
        self.model = None
    def update_w(self,y,pre_y,w):
        error_rate = 1 - accuracy_score(y,pre_y)
        for i in range(w.shape[0]):
            if y[i] == pre_y[i]:
                w[i] = w[i]*np.exp(-error_rate)
            else:
                w[i] = w[i]*np.exp(error_rate)
        return w/w.sum()
    def cal_label(self,result,alpha):
        label = []
        for i in range(result.shape[0]):
            count = np.zeros(int(result[i,:].max()+1))
            for j in range(result.shape[1]):
                count[int(result[i,j])] += alpha[j]
            label.append(count.argmax())
        return np.array(label)
    def fit(self,x,y):
        x = np.array(x)
        y = np.array(y).reshape((-1,))
        self.error_rate = []
        self.model = []
        w0 = np.ones(x.shape[0])
        w0 = w0/w0.sum()
        indices = np.arange(x.shape[0])
        for i in range(self.n_estimators):
            index = np.random.choice(indices,size = x.shape[0],p = w0)
            x0 = x[index]
            y0 = y[index]
            model0 = self.estimator.fit(x0,y0)
            pre_y0 = model0.predict(x0)
            error_rate = 1 - accuracy_score(y0,pre_y0)
            self.error_rate.append(error_rate)
            self.model.append(model0)
            w0 = self.update_w(y0,pre_y0,w0)
    def predict(self,x):
        res = np.zeros([x.shape[0],self.n_estimators])
        for i in range(self.n_estimators):
            res[:,i] = self.model[i].predict(x)
        alpha = 1 - np.array(self.error_rate)
        return self.cal_label(res,alpha)    
from sklearn.tree import DecisionTreeClassifier
model = CyrusAdaBoost(estimator=DecisionTreeClassifier(),n_estimators=50)
model.fit(x_train,y_train)
y_pre = model.predict(x_test)
print(accuracy_score(y_pre,y_test))
0.932

by CyrusMay 2020 06 12

这世界全部的漂亮
不过你的可爱模样
——————五月天(爱情的模样)——————

周志华-机器学习(西瓜书) 集成学习 课后练习题8.3 Adaboost & 8.5 Bagging Python实现 周志华-机器学习(西瓜书) 集成学习 课后练习题8.3 Adaboost & 8.5 Bagging Python实现前言背景知识scikit-learn完成练习scikit-learn的安装集成学习1.题目[8.3][8.5]2.利用sklearn进行集成学习2.5.利用sklearn进行图的分析3.编程实现8.38.38.5引用新的改变功能快捷键如何改变文本的样式KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图 前言 本文从零开始完成了周志华版《机器学习》(即西 阅读详情

相关推荐

Python 机器学习 集成学习

集成学习是一种机器学习方法,它通过构建并组合多个学习器来完成学习任务,旨在提高预测的准确性。集成学习背后的基本思想是多个模型的组合通常会比单个模型表现得更好。这些模型可以是同种类型的,也可以是不同类型的。集成学习通常能在各种机器学习任务中取得很好的效果,尤其是复杂的问题大规模数据集。

weixin_42098295的博客 1428

简单机器学习流程,AdaBoostBagging二分类,预测是否存款

数据来源:http://archive.ics.uci.edu/ml/datasets/Bank+Marketing 开发工具:Jupyter notebook 语言版本:python 3.6 1.查看数据情况 (1)数据 import numpy as np import pandas as pd %matplotlib inline from matplotlib import p...

xiaocxyczh的博客 609

机器学习入门二】集成学习AdaBoost算法python实现

本文主要基于周志华老师的《机器学习》第八章内容 个体与集成 集成学习通过构建并结合多个学习器来完成学习任务。集成学习的一般结构如图所示: 先产生一组个体学习器,在用某种策略把它们结合在一起。个体学习器通常有一个现有的学习算法从训练数据产生,如决策树桩BP神经网络。个体学习器可以使相同类型的也可以是不同类型的,比如全是神经网络或者同事含有神经网络决策树桩。 集成学习通过将多个学习...

gongyi_yf的博客 976

集成学习_AdaBoostBagging

期末考试复习时写的,简单介绍了集成学习的两个算法

CM_20030210的博客 304

机器学习中的提升方法:Boosting 与 AdaBoost

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达在 Kaggle 及其它机器学习任务中,集成方法非常流行,不论是 XGBoost还是随机森林,它们都强大无比。而本文从最基础的 Boosting 概念到 AdaBoost 算法进行了详细的介绍,并展示了如何实现 AdaBoost,这些都是走进集成方法大家族的敲门砖。后来,Boosting技术在 Kaggle 竞赛以及其它预测分析...

小白学视觉 395

(五)如何用 Python 从头开始实现 Bagging 算法

作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai (一)机器学习中的集成学习入门 (二)bagging 方法 (三)使用Python进行交易的随机森林算法 (四)Python中随机森林的实现与解释 (五)如何用 Python 从头开始实现 Bagging 算法 决策树是一种简单而强大的预测建模技术,但它们存在高方差。这意味着在给定不同的训练数据的情...

CoderPai的博客 7912

机器学习集成学习的基本概念、BaggingBoosting的区别以及集成学习方法在python中的运用(含python代码)

集成学习在许多机器学习任务中都是一种非常有效的策略,尤其是在数据量较大、特征较多或者模型需要高度精确的情况下。通过合理地选择组合不同的学习器,集成学习能够显著提升机器学习任务的性能总的来说,BaggingBoosting都是有效的集成学习策略,但它们适用的场景解决问题的侧重点不同。在实际应用中,选择哪种技术取决于具体的数据集问题。

ya的博客 1758

全面掌握集成学习AdaBoostBagging实战指南

虽然使用现成的库可以快速实现AdaBoost,但理解并自定义一个AdaBoost分类器可以让我们深入学习算法的工作原理。下面是实现自定义AdaBoost分类器的简要步骤:# 初始化权重# 训练弱学习器# 计算错误率# 计算权重# 更新样本权重# 记录信息# 使用自定义的AdaBoost分类器以上代码段展示了如何使用Python实现一个简单的AdaBoost分类器。我们首先初始化分类器,然后通过fit方法训练分类器,并最终使用predict方法进行预测。

weixin_36204513的博客 620

机器学习经典算法详解及Python实现--元算法AdaBoost

AdaBoost算法AdaBoost.M1AdaBoost.M2两种算法AdaBoost.M1是我们通常所说的Discrete AdaBoost,而AdaBoost.M2是M1的泛化形式。关于AdaBoost算法的一个结论是:当弱分类器算法使用简单的分类方法时,boosting的效果明显地统一地比bagging要好.当弱分类器算法使用C4.5时,boosting比bagging较好,但是没有前者明显。后来又有学者提出了解决多标签问题的AdaBoost.MHAdaBoost.MR算法,其中AdaBoo

Adan 2万+

机器学习实验五:集成学习

以上就是今天要讲的内容,机器学习实验五:集成学习

magic171的博客 2208

机器学习Python实现AdaBoost

adaboost是boosting方法多个版本中最流行的一个版本,它是通过构建多个弱分类器,通过各个分类器的结果加权之后得到分类结果的。这里构建多个分类器的过程也是有讲究的,通过关注之前构建的分类器错分的那些数据而获得新的分类器。这样的多个分类器在训练时很容易得到收敛。 本文主要介绍了通过单层决策树构建弱分类器,同理,也可以用其他的分类算法构建弱分类器。 boost 算法系列的起源来自

xietingcandice的专栏 1万+

数据处理分析之分类算法Adaboost集成学习Adaboost的关系

集成学习(Ensemble Learning)是一种机器学习策略,它通过构建并结合多个学习器来解决预测问题,以提高预测性能。集成学习的基本思想是:通过组合多个弱学习器(Weak Learner),可以得到一个强学习器(Strong Learner)。弱学习器是指在某些方面表现良好,但在其他方面可能表现不佳的学习模型。而强学习器则是指在各种情况下都能表现良好的学习模型。集成学习的原理在于,多个弱学习器的组合可以减少模型的偏差方差,从而提高模型的泛化能力。

2401_87715305的博客 928

集成学习实战:从理论到代码实现——以AdaBoostBagging为例

本文以西瓜数据集为例,深入实战了集成学习中的两大经典方法:AdaBoostBaggingAdaBoost通过序列化训练、动态调整样本权重,将弱学习器提升为强学习器,有效降低模型偏差;Bagging则通过自助采样并行训练多个模型并投票,旨在降低模型方差,提升稳定性。文章从核心思想、数学原理到代码实现细节进行了完整剖析,并提供了对比选型指南。

k6l7m8n9的博客 610

机器学习】Ensemble Learning 集成学习 + Python代码实战

Bagging模型:并行训练一堆分类器,然后对所有分类器的结果求平均作为最后的结果Bagging模型中最典型的代表是:随机森林随机:数据随机采样,特征选择随机森林:多个决策树并行放在一起跟上学考试一样,这次做错的题,需要额外注意,下次就不要做错了堆叠:很暴力,拿来一堆直接上(各种分类器都来了)可以堆叠各种各样的分类器(KNN、SVM、RF、神经网络等等)分阶段:第一阶段得出各自的结果,第二阶段再用前一阶段的结果训练为了刷结果,不择手段!

知不足而奋进,望远山而前行 3万+

【AI概念】集成学习(Ensemble Learning):Bagging与Boosting详解(附Python代码演示)|有什么分别?原理、数学推导与应用|随机森林|AdaBoost、XGBoost

大家好,我是爱酱。本将会系统讲解集成学习(Ensemble Learning)、Bagging(Bootstrap Aggregating)与Boosting的核心原理、数学表达、优缺点、典型算法工程应用。内容非常详细,并有友善的代码解释、流程解析等,适合初学者进阶者系统理解。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 1622

机器学习笔记14」集成学习全面解析:从Bagging到Boosting的Python实战指南

集成学习通过组合多个弱学习器构建强学习器,提升机器学习性能。其有效性源于:1)克服单一经验法则局限;2)解决假设空间多解性;3)避免局部最优;4)逼近真实假设空间。主要方法包括:1)加权多数算法,通过动态调整基学习器权重进行投票;2)Bagging,采用自助采样训练多个基学习器后投票或平均。Python实现显示,Bagging集成50棵决策树比单棵决策树准确率提升显著(如从0.86提升至0.92)。实验表明,随着基学习器数量增加,测试准确率逐步提高并趋于稳定。

weixin_38291577的博客 964

集成学习综合教程(附Python代码)

本文约8000字,建议阅读10+分钟。 本文从基础集成技术讲起,随后介绍了高级的集成技术,最后特别介绍了一些流行的基于BaggingBoosting的算法,帮助读者对集成学习建立一个整体印象。 介绍 当你想购买一辆新车时,你会走到第一家汽车商店就根据经销商的建议购买一辆车吗?这是不太可能的。 你可能会浏览一些人们发布评论并比较不同车型的门户网站,检查其功能价格。...

lyy的博客 4607

机器学习-集成学习

1.知道集成学习是什么?2.了解集成学习的分类3.理解bagging集成的思想4.理解boosting集成的思想Adaptive Boosting(自适应提升)基于 Boosting思想实现的一种集成学习算法核心思想是通过逐步提高那些被前一步分类错误的样本的权重来训练一个强分类器。弱分类器的性能比随机猜测强就行,即可构造出一个非常准确的强分类器。训练时,样本具有权重,并且在训练过程中动态调整。被分错的样本的样本会加大权重,算法更加关注难分的样本。(观察下图)(1)不同的训练集—>调整样本权重。

weixin_60668256的博客 1067
上一篇: 机器学习 决策树篇——解决连续变量的分类问题
下一篇: 可视化篇(三)———使用Excel绘制动态数据分布饼图
CyrusMay
博客等级 码龄6年 296粉丝 112原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值