集成算法实验(Bagging策略)

news2024/11/26 23:25:39

Bagging模型(随机森林)

Bagging:训练多个分类器取平均
f ( x ) = 1 / M ∑ m = 1 M f m ( x ) f(x)=1/M\sum^M_{m=1}{f_m(x)} f(x)=1/Mm=1Mfm(x)
全称: bootstrap aggregation(说白了就是并行训练一堆分类器)
最典型的代表就是随机森林,现在Bagging模型基本上也是随机森林。
image.png
随机:数据采样随机,每棵树只用部分数据;数据有多个特征(属性)组成,每棵树随机选择部分特征。随机是为了使得每个分类器拥有明显差异性。
森林:很多个决策树并行放在一起
如何对所有树选择最终结果?分类的话可以采取少数服从多数,回归的话可以采用取平均值。

Bagging策略

首先对训练数据集进行多次采样(有放回的取样),保证每次得到的采样每份数据都是不同的(但是每份数据里面可能和其他数据有相同)
分别训练多个模型,例如树模型
预测时需得到所有模型结果再进行集成
image.png

import numpy as np
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
np.random.seed(42)
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons

X,y = make_moons(n_samples=500, noise=0.30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
plt.plot(X[:,0][y==0],X[:,1][y==0],'yo',alpha = 0.6)
plt.plot(X[:,0][y==0],X[:,1][y==1],'bs',alpha = 0.6)

image.png

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

# DecisionTreeClassifier 采用树模型
# n_estimators 500个分类器
# max_samples 每次采样100条数据
# bootstrap = True 有放回的随机采样
bag_clf = BaggingClassifier(DecisionTreeClassifier(),
                  n_estimators = 500,
                  max_samples = 100,
                  bootstrap = True,
                  n_jobs = -1,
                  random_state = 42
)
bag_clf.fit(X_train,y_train)
y_pred = bag_clf.predict(X_test)
# Bagging策略的结果
accuracy_score(y_test,y_pred)

结果:0.904

# 不使用Bagging策略,为了对比公平,random_state都为42
tree_clf = DecisionTreeClassifier(random_state = 42)
tree_clf.fit(X_train,y_train)
y_pred_tree = tree_clf.predict(X_test)
accuracy_score(y_test,y_pred_tree)

结果:0.856

决策边界

集成与传统方法对比

from matplotlib.colors import ListedColormap
def plot_decision_boundary(clf,X,y,axes=[-1.5,2.5,-1,1.5],alpha=0.5,contour =True):
    x1s=np.linspace(axes[0],axes[1],100)
    x2s=np.linspace(axes[2],axes[3],100)
    x1,x2 = np.meshgrid(x1s,x2s)
    X_new = np.c_[x1.ravel(),x2.ravel()]
    y_pred = clf.predict(X_new).reshape(x1.shape)
    custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])
    plt.contourf(x1,x2,y_pred,cmap = custom_cmap,alpha=0.3)
    if contour:
        custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])
        plt.contour(x1,x2,y_pred,cmap = custom_cmap2,alpha=0.8)
    plt.plot(X[:,0][y==0],X[:,1][y==0],'yo',alpha = 0.6)
    plt.plot(X[:,0][y==0],X[:,1][y==1],'bs',alpha = 0.6)
    plt.axis(axes)
    plt.xlabel('x1')
    plt.xlabel('x2')

plt.figure(figsize = (12,5))
plt.subplot(121)
plot_decision_boundary(tree_clf,X,y)
plt.title('Decision Tree')
plt.subplot(122)
plot_decision_boundary(bag_clf,X,y)
plt.title('Decision Tree With Bagging')

可以看出Bagging的分类结果更加平滑
image.png

OOB(Out Of Bag)策略

在Bagging中,假如总共有100条数据,每颗树只随机取80条数据(有放回),那么Out Of Bag的意思就是选择每次剩下20条数据作为验证集。

# oob_score = True 开启oob
bag_clf = BaggingClassifier(DecisionTreeClassifier(),
                  n_estimators = 500,
                  max_samples = 100,
                  bootstrap = True,
                  n_jobs = -1,
                  random_state = 42,
                  oob_score = True
)
bag_clf.fit(X_train,y_train)
print('验证集的结果为:')
bag_clf.oob_score_

验证集的结果为:
0.9253333333333333

y_pred = bag_clf.predict(X_test)
print('测试集的结果为:')
accuracy_score(y_test,y_pred)

测试集的结果为:
0.904

随机森林

from sklearn.ensemble import RandomForestClassifier
rf_clf = RandomForestClassifier()
rf_clf.fit(X_train,y_train)

image.png
特征重要性:
sklearn中是看每个特征的平均深度

from sklearn.datasets import load_iris
iris = load_iris()
rf_clf = RandomForestClassifier(n_estimators=500,n_jobs=-1)
rf_clf.fit(iris['data'],iris['target'])
for name,score in zip(iris['feature_names'],rf_clf.feature_importances_):
    print (name,score)

sepal length (cm) 0.11105536416721994
sepal width (cm) 0.02319505364393038
petal length (cm) 0.44036215067701534
petal width (cm) 0.42538743151183406
Mnist中哪些特征比较重要呢?

# from sklearn.datasets import fetch_mldata
# mnist = fetch_mldata('MNIST original')
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, cache=True)
rf_clf = RandomForestClassifier(n_estimators=500,n_jobs=-1)
rf_clf.fit(mnist['data'],mnist['target'])

image.png

rf_clf.feature_importances_.shape
# (784,)
def plot_digit(data):
    # 将一维(784,)的feature_importances_改成二维正方形(28,28)
    image = data.reshape(28,28)
    plt.imshow(image,cmap=matplotlib.cm.hot)
    plt.axis('off')
plot_digit(rf_clf.feature_importances_)
char = plt.colorbar(ticks=[rf_clf.feature_importances_.min(),rf_clf.feature_importances_.max()])
char.ax.set_yticklabels(['Not important','Very important'])

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1816519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚鼎科技:装饰画哪里好卖

在当代社会,艺术与商业的界限日益模糊,装饰画作为一种既能美化空间又能体现个人品味的物品,受到了广泛的欢迎。但许多创作者和商家常常面临一个问题:《装饰画哪里好卖》? 要解决这个问题,我们需明白市场需求的重要性。…

斜率优化详解

斜率优化 [HNOI2008] 玩具装箱 状态转移方程: f i m i n ( f i , f j ( s u m i i − s u m j − j − L ) 2 ) i > j f_imin(f_i,f_j(sum_ii-sum_j-j-L)^2){i>j} fi​min(fi​,fj​(sumi​i−sumj​−j−L)2)i>j 设A为 s u m i i sum_ii sumi​i&…

代码随想录算法训练营第36天(py)| 贪心 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间

452. 用最少数量的箭引爆气球 力扣链接 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同…

【kubernetes】k8s集群安全机制 保姆级攻略

目录 一、认证(Authentication) Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介, 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 A…

CCNA 0基础入门

OSI & TCP/IP OSI参考模型 TCP/IP协议 应用层 ------↓表示层 ------>应用层会话层 ------↑传输层 ------>传输层网络层 ------>网络互联层链路层 ------>网络接口层物理层 ------>↑ 物理层 传输的信号以及网线以及接线 主要作用是产生并检测电…

怎么修改Visual Studio Code中现在github账号

git config --global user.name “你的用户名” git config --global user.email “你的邮箱” git config --global --list git push -u origin your_branch_name git remote add origin

手部出现这4种症状,可能是糖尿病先兆!务必及时监测血糖

糖尿病来袭,手部或先知!出现这 4 种症状,务必尽快监测血糖 第一,手指麻木感明显,当持续性的高血糖损害手部血管与神经末梢时,便会导致手指产生麻木以及刺痛之感。而且随着血糖不断升高,受损的血…

【QT Creator软件】解决中文乱码问题

QT Creator软件解决中文乱码问题 问题描述:Qtcreator安装好后打印中文在控制台输出乱码 在网上也查找了修改编辑器的默认编码为UTF-8,但是仍然没有任何作用,于是有了以下的解决方案 原因剖析:因为项目的编码与控制台的编码不一致…

Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件

打包与运行 window版本上制作 我们要把idea中的程序抽取出来作为一个独立的jar包 把jar包放到服务器上 服务器是长期运行的 我们就能随时访问了 在Maven的生命周期中选择package 打包功能 在资源管理器中查找 java -jar 文件名.jar java -jar 文件名.jar 但是我们在测试…

kotlin 中的字符串

一、字符类访问 1、字符串的访问跟js一样,可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一:for (item in a) {println(item) // 输出每一个字符}// 方式二:println("${a[0]}, ${a[1]}, ${a[2…

纯干货科普!水浸传感器品牌该怎么选?

在现代化生产过程中,漏水是常见的安全隐患之一。特别是机房、档案馆等高精密设备较多的场合,一旦没有及时解决漏水问题,就有可能导致线路故障、设备损坏甚至业务办理。绝大部分管理人员会选择安装水浸传感器,它能够帮我们及时检测…

bugku---misc---easy_nbt

1、题目描述 2、下载附件,解压之后得到 3、查找资料发现:NBT文件是Minecraft游戏数据文件,其中包含以命名二进制标签(NBT)格式保存的数据。这种格式用于存储大量二进制数据,通常包含有关Minecraft世界的信息。NBT数据通常以.dat文…

2024 全球软件研发技术大会官宣,50+专家共话软件智能新范式!

2024年的全球软件研发技术大会(SDCon)由CSDN和高端IT咨询与教育平台Boolan联合主办,将于7月4日至5日在北京威斯汀酒店举行。本次大会的主题为“大模型驱动软件智能化新范式”,旨在探讨大模型和开源技术的发展如何引领全球软件研发…

Xmind导入纯文本TXT方法

最近有很多同事咨询我如何在xmind直接导入纯文本txt笔记或者思维导图呢? 解决办法如下: 1.先打开xmind随便打开一个思维导图-文件-导出-marldown 2.选中导出的markdown文件。右键-打开方式-苹果系统选择文本编辑,Win系统选择记事本 3.按照图示…

计算机二级Access选择题考点

在Access中,若要使用一个字段保存多个图像、图表、文档等文件,应该设置的数据类型是附件。在“销售表"中有字段:单价、数量、折扣和金额。其中,金额单价x数量x折扣,在建表时应将字段"金额"的数据类型定义为计算。若…

用Vue3实现一个3D图的在线展示

本文由ScriptEcho平台提供技术支持 项目地址:传送门 代码相关技术博客 应用场景 该代码段用于创建一个带有社交媒体链接的欢迎卡片,用于网站或应用程序的登录页面或主页。 基本功能 该欢迎卡片提供以下功能: 显示欢迎信息和感谢访问网…

25年后回顾融智学新范式(感受人机互助新时代到了的愉悦,体验人机互助新时代的理解和表达的深入浅出)

25年后回顾融智学新范式 (不仅感受人机互助新时代到了的愉悦,更体验人机互助新时代的理解和表达的深入浅出) 一句话概述: 《融智学新范式》是一种创新的理论框架,它提出了协同智能主体的概念框架,通过严…

大模型高级 RAG 检索策略之流程与模块化

我们介绍了很多关于高级 RAG(Retrieval Augmented Generation)的检索策略,每一种策略就像是机器中的零部件,我们可以通过对这些零部件进行不同的组合,来实现不同的 RAG 功能,从而满足不同的需求。 今天我们…

连接查询-外连接(FULL JOIN)、内连接(JOIN)、自身连接

一、表与表之间存在着某种联系,如果一个查询必须在多个表之间完成,则需要用到连接查询 二、连接查询的SQL查询语句 格式: SELECT A1,A2,...,Am FROM R1,R2,..,Rn WH…

大厂Java面试题:详细描述MyBatis缓存的实现原理

大家好,我是王有志。今天给大家带来的是一道来自光大科技的 MyBatis 面试题:详细描述MyBatis缓存的实现原理。 在通过源码分析 MyBatis 一二级缓存的实现原理前,我先给出我的回答。 首先是 MyBatis 一级缓存的实现原理: MyBaits…