机器学习 集成学习篇——python实现Bagging和AdaBOOST算法
机器学习 集成学习篇——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算法相关推荐
- 机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...
- 机器学习集成学习算法
目录 1 集成学习算法简介 1.1 什么是集成学习 1.2 机器学习的两个核心任务 1.3 集成学习中boosting和Bagging 1.4 小结 2 Bagging和随机森林 2.1 Baggin ...
- ML《集成学习(一)Bagging 和 Random Forest》
今天一起来学习集成学习,其中的Bagging和随机森林(Random Forest). 一:bootstrap 二:Bagging 三:随机森林(Random Forest)
- 【集成学习】boosting和bagging
视频链接 思想 Boosting和Bagging Boosting Adaboost 算法流程 (分类误差率小的时候,\(\alpha_{m}\):权重就更大) (\(Z{m-1}\)相当于一个归一化 ...
- Python进行Bagging和Adaboost
Python进行Bagging和Adaboost 一.Bagging 第一步,导入数据和库: 第二步,数据处理: 第三步,Bagging; 第四步,模型评价: (1)混淆矩阵 (2)ROC曲线 二.A ...
- 集成学习精讲02 - Bagging方法:多个基模型的聚合(SAP大神黄佳新作《零基础学机器学习》节选)
我们将分为5篇文章介绍集成学习,分别是: 集成学习基础知识:偏差和方差 - 戳此阅读 Bagging - Boosting - 戳此阅读 Stacking/Blending - 戳此阅读 Voting ...
- 机器学习--集成学习--Bagging,Boosting,Stacking
在一些数据挖掘竞赛中,后期我们需要对多个模型进行融合以提高效果时,常常会用到Bagging,Boosting,Stacking等这几个框架算法.下面就来分别详细讲述这三个框架算法.这里我们只做原理上的 ...
- 机器学习集成学习-BOOSTING与BAGGING
集成算法(Emseble Learning) 是构建多个学习器,然后通过一定策略结合把它们来完成学习任务的,常常可以获得比单一学习显著优越的学习器. 用于减少方差的bagging 用于减少偏差的boo ...
- 深入理解机器学习——集成学习(Ensemble Learning):袋装法Bagging
分类目录:<深入理解机器学习>总目录 我们在<集成学习(一):基础知识>中提到,欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立:虽然"独立"在现 ...
最新文章
- 垃圾要分类!我们的大脑如何处理垃圾呢?
- c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...
- java的同步块_Java 同步块
- 【faster-rcnn】训练自己的数据集时的坑
- ubuntu16.04 安装ros
- HTML5 Canvans 常用API整理
- mongodb 如何删除 字段值为 json对象中的某个字段值
- 第二十期:核心交换机的链路聚合、冗余、堆叠、热备份
- git log 你学废了吗?
- 【转载保存】java操作HDFS
- PHP 是最糟糕编程语言?
- 月球软着陆matlab程序,matlab变量优化 卫星软着陆问题
- POJ 1573机器人走迷宫
- JS 格式化时间字符串
- Nmap下载和简单应用
- 【PAT】 1020 发邮件(错排问题)详解
- 用JavaScript做一个牛逼哄哄的计算机
- ArGIS计算多个栅格均值、最大值等
- 个人网络信息安全管理方法
- 考研数学之多元函数微积分
热门文章
- MySQL 优化原理(一)
- HashiCorp Nomad和遗留系统
- Spring Boot 性能优化
- GCC : 什么是编译?什么是静态库?什么是动态库?怎么生成?优先级?
- 【Python】青少年蓝桥杯_每日一题_1.19_Python 求和
- Android——怎么在一个 Activity 中销毁另外一个 Activity
- gorm增删查改json_gorm 关联查询请教
- 修改VMOS2的SID 并成为成员服务器,求助SAS9.4服务器版的sid!!!急急!
- 人工智能导论 王万良教授_学会动态丨辽宁省人工智能导论教学研讨活动在沈阳成功举办...
- android出现adpt2的问题,android - 尝试在空对象引用上调用接口方法'int android.database.Cursor.getCount()'[重复] - 堆栈内存溢出...