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

  • 摘要
  • 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 = estimatorself.n_estimators = n_estimatorsself.models = Nonedef 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   support0       1.00      1.00      1.00        111       0.67      0.67      0.67         92       0.70      0.70      0.70        10avg / 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 = estimatorself.n_estimators = n_estimatorsself.error_rate = Noneself.model = Nonedef 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

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

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

  1. 机器学习 - [集成学习]Bagging算法的编程实现

    机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...

  2. 机器学习集成学习算法

    目录 1 集成学习算法简介 1.1 什么是集成学习 1.2 机器学习的两个核心任务 1.3 集成学习中boosting和Bagging 1.4 小结 2 Bagging和随机森林 2.1 Baggin ...

  3. ML《集成学习(一)Bagging 和 Random Forest》

    今天一起来学习集成学习,其中的Bagging和随机森林(Random Forest). 一:bootstrap 二:Bagging 三:随机森林(Random Forest)

  4. 【集成学习】boosting和bagging

    视频链接 思想 Boosting和Bagging Boosting Adaboost 算法流程 (分类误差率小的时候,\(\alpha_{m}\):权重就更大) (\(Z{m-1}\)相当于一个归一化 ...

  5. Python进行Bagging和Adaboost

    Python进行Bagging和Adaboost 一.Bagging 第一步,导入数据和库: 第二步,数据处理: 第三步,Bagging; 第四步,模型评价: (1)混淆矩阵 (2)ROC曲线 二.A ...

  6. 集成学习精讲02 - Bagging方法:多个基模型的聚合(SAP大神黄佳新作《零基础学机器学习》节选)

    我们将分为5篇文章介绍集成学习,分别是: 集成学习基础知识:偏差和方差 - 戳此阅读 Bagging - Boosting - 戳此阅读 Stacking/Blending - 戳此阅读 Voting ...

  7. 机器学习--集成学习--Bagging,Boosting,Stacking

    在一些数据挖掘竞赛中,后期我们需要对多个模型进行融合以提高效果时,常常会用到Bagging,Boosting,Stacking等这几个框架算法.下面就来分别详细讲述这三个框架算法.这里我们只做原理上的 ...

  8. 机器学习集成学习-BOOSTING与BAGGING

    集成算法(Emseble Learning) 是构建多个学习器,然后通过一定策略结合把它们来完成学习任务的,常常可以获得比单一学习显著优越的学习器. 用于减少方差的bagging 用于减少偏差的boo ...

  9. 深入理解机器学习——集成学习(Ensemble Learning):袋装法Bagging

    分类目录:<深入理解机器学习>总目录 我们在<集成学习(一):基础知识>中提到,欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立:虽然"独立"在现 ...

最新文章

  1. 垃圾要分类!我们的大脑如何处理垃圾呢?
  2. c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...
  3. java的同步块_Java 同步块
  4. 【faster-rcnn】训练自己的数据集时的坑
  5. ubuntu16.04 安装ros
  6. HTML5 Canvans 常用API整理
  7. mongodb 如何删除 字段值为 json对象中的某个字段值
  8. 第二十期:核心交换机的链路聚合、冗余、堆叠、热备份
  9. git log 你学废了吗?
  10. 【转载保存】java操作HDFS
  11. PHP 是最糟糕编程语言?
  12. 月球软着陆matlab程序,matlab变量优化 卫星软着陆问题
  13. POJ 1573机器人走迷宫
  14. JS 格式化时间字符串
  15. Nmap下载和简单应用
  16. 【PAT】 1020 发邮件(错排问题)详解
  17. 用JavaScript做一个牛逼哄哄的计算机
  18. ArGIS计算多个栅格均值、最大值等
  19. 个人网络信息安全管理方法
  20. 考研数学之多元函数微积分

热门文章

  1. MySQL 优化原理(一)
  2. HashiCorp Nomad和遗留系统
  3. Spring Boot 性能优化
  4. GCC : 什么是编译?什么是静态库?什么是动态库?怎么生成?优先级?
  5. 【Python】青少年蓝桥杯_每日一题_1.19_Python 求和
  6. Android——怎么在一个 Activity 中销毁另外一个 Activity
  7. gorm增删查改json_gorm 关联查询请教
  8. 修改VMOS2的SID 并成为成员服务器,求助SAS9.4服务器版的sid!!!急急!
  9. 人工智能导论 王万良教授_学会动态丨辽宁省人工智能导论教学研讨活动在沈阳成功举办...
  10. android出现adpt2的问题,android - 尝试在空对象引用上调用接口方法'int android.database.Cursor.getCount()'[重复] - 堆栈内存溢出...