scikit-learn集成学习代码批注及相关练习

news2024/11/28 6:32:48

一、代码批注

代码来自:https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_twoclass.html#sphx-glr-auto-examples-ensemble-plot-adaboost-twoclass-py

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import make_gaussian_quantiles
from sklearn.datasets import make_classification

# 生成数据集
# X1, y1 = make_gaussian_quantiles(cov=2.0, n_samples=200, n_features=2, n_classes=2, random_state=1)
# X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5, n_samples=300, n_features=2, n_classes=2, random_state=1)
# X = np.concatenate((X1, X2))
# y = np.concatenate((y1, -y2 + 1))
X, y = make_classification(n_samples=1000, n_features=2,  n_redundant=0, random_state=6)

# 生明AdaBoostClassifier预估器
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), algorithm="SAMME", n_estimators=3000)
# bdt = AdaBoostClassifier(SGDClassifier(loss='hinge'), algorithm="SAMME", n_estimators=1000)
# bdt = AdaBoostClassifier(LogisticRegression(), algorithm="SAMME", n_estimators=3000)
bdt.fit(X, y)

plot_colors = "br"
plot_step = 0.02
class_names = "AB"
plt.figure(figsize=(10, 5))

plt.subplot(121)
# 这里画图的方法与Knn的一样
# 画出决策边界,用不同颜色表示
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
# np.meshgrid:生成网格点坐标矩阵(因为pcolormesh需要这样使用)
# np.arange:起始,终点,步长
# xx,yy分别为两个特征
# 这里的意思就是为了有底色,每个x和y都都进行组合计算,算出它呢个点的底色。上面X和y相当于是训练集,这里差不多可以算作是没有结果的测试集
xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step), np.arange(y_min, y_max, plot_step))
# 用ravel()方法将数组拉成一维数组
# np.c 就是按列叠加两个矩阵,就是把两个矩阵左右组合,要求行数相等。
Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# contourf:画轮廓图(与pcolormesh图形效果类似)
cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
plt.axis("tight")

# 补充训练数据点
for i, n, c in zip(range(2), class_names, plot_colors):
    idx = np.where(y == i)
    plt.scatter(
        X[idx, 0],
        X[idx, 1],
        c=c,
        cmap=plt.cm.Paired,
        s=20,
        edgecolor="k",
        label="Class %s" % n,
    )
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.legend(loc="upper right")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Decision Boundary")

# 画出两类的分别决定成绩
twoclass_output = bdt.decision_function(X)
plot_range = (twoclass_output.min(), twoclass_output.max())
plt.subplot(122)
for i, n, c in zip(range(2), class_names, plot_colors):
    plt.hist(
        twoclass_output[y == i],
        bins=10,
        range=plot_range,
        facecolor=c,
        label="Class %s" % n,
        alpha=0.5,
        edgecolor="k",
    )
x1, x2, y1, y2 = plt.axis()
plt.axis((x1, x2, y1, y2 * 1.2))
plt.legend(loc="upper right")
plt.ylabel("Samples")
plt.xlabel("Score")
plt.title("Decision Scores")
plt.tight_layout()
plt.subplots_adjust(wspace=0.35)
plt.show()

二、更换机器学习数量

AdaBoostClassifier的原理是先训练一个弱学习器模型,然后对他的结果进行评估,对于这个模型中做对的问题,我们将减少它的注意力,对于做错的问题我们将增大对他的注意力,从而在后续的新模型中,更专注克服前一个模型所不能解决的困难点,最后,当我们把所有模型整合在一起,构成一个大的框架,大框架中有处理简单问题的模型,也有处理困难问题的模型,使大框架的整体性能有所提高。
根据它的原理,在任务中要修改基学习器的数量,起初我以为是在AdaBoostClassifier的base_estimator放入更多模型,像Staking一样,但AdaBoostClassifier并不能这样做,在Stack Overflow中有网友也回答道,理论上可以的,但AdaBoostClassifier仅仅要求弱学习器比随机的好一些,因此它经常只是用同一种的分类器。
在这里插入图片描述
而任务中修改基学习器的数量因该指的是修改n_estimators的大小,它是弱学习器的最大迭代次数,也可以说是最大的弱学习器的个数。通过下图的测试如果太小,容易欠拟合,分类面比较规则,如果太大,容易过拟合,1000左右比较为宜。
在这里插入图片描述

三、更换机器学习器类型

base_estimator:默认为DecisionTreeClassifier。理论上可以选择任何一个分类或者回归学习器,不过需要支持样本权重,比如说Knn,MLP就不支持,会报“xxx doesn’t support sample_weight.”。我之后选择了逻辑回归模型,但一直报“BaseClassifier in AdaBoostClassifier ensemble is worse than random, ensemble can not be fit.”网络上也几乎没有对这个原因的解释。不仅仅是逻辑回归,SGD也不行,经过不断尝试,发现如果将下图生成数据的方式改为make_classification的方式,代码将成功执行,原因尚不清楚。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【stable diffusion】保姆级入门课程02-Stable diffusion(SD)图生图-基础图生图用法

目录 学前视频 0.本章素材 1.图生图是什么 2.图生图能做什么 3.如何使用图生图 4.功能区域 4.1.提示词区域 4.2.图片提示词反推区域 1.CLIP反推 2.DeepBooru 反推 4.3.图片上传区域 4.4.结果图区域 4.5.缩放模式 4.6.重绘幅度 7.结语 8.课后训练 学前视频 …

【Ranking】50 Matplotlib Visualizations, Python实现,源码可复现

详情请参考博客: Top 50 matplotlib Visualizations 因编译更新问题,本文将稍作更改,以便能够顺利运行。 1 Ordered Bar Chart 有序条形图有效地传达项目的排名顺序。但是,将图表上方的指标值相加,用户将从图表本身获得准确的信息…

制造业想要数字化转型应该从哪方面入手?

制造业可以通过关注以下几个关键领域来开启数字化转型之旅: 数据收集和分析:实施系统收集和分析来自各种来源(例如机器、传感器和生产过程)的数据至关重要。这些数据可以提供有关运营效率、质量控制和预测性维护的见解。 物联网&…

Flask Bootstrap 导航条

(43条消息) Flask 导航栏,模版渲染多页面_U盘失踪了的博客-CSDN博客 (43条消息) 学习记录:Bootstrap 导航条示例_bootstrap导航栏案例_U盘失踪了的博客-CSDN博客 1,引用Bootstrap css样式,导航栏页面跳转 2,页面两列…

【冒泡排序】模仿qsort的功能实现一个通用的冒泡排序

文章目录 前言曾经学的冒泡排序存在着一些局限性首先第一步:写一个main()函数,分装一个test1函数test1函数 用来描写类型的性状 在test1创建了bubble_int 函数,下一步就是实现它,分两步走步骤一:写函数参数步骤二&…

Matlab论文插图绘制模板第107期—标签散点图

在之前的文章中,分享了Matlab散点图绘制模板: 进一步,再来分享一种特殊的散点图:标签散点图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需…

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中,大家总是奔波于家和公司之间。大部分时间用于工作中,也就很难及时知晓家中的动态情况,对于家中有老人、小孩或宠物的(甚至对居住环境安全不放心的),这已然是…

ubuntu下tmux安装

目录 0. 前言1. Tmux介绍2. 安装3. 验证安装 0. 前言 本节安装tmux终端复用工具,在Ubuntu中运行一些服务或脚本的时候往往不能退出终端,需要一直挂着。在有图形界面的linux中你还可以新开一个终端去做别的事,但是在无界面linux中&#xff0c…

re学习(22)伪造CTF(谜之操作)

思维导图:找flag关键之处 1.字符串 (flag, sorry) 2.导入函数:(Import _scanf ) 其他函数(敏感函数) createfileA:将flag放在一个文件中 Createprocess&am…

基于HCL的​​​​​​​网络规划与部署综合实训报告

0、前言 本次实验是对之前有关网络规划与综合部署的综合实验,适合入门的同学们进行学习,该实验选择了使用华三模拟器进行,希望能够帮助大家了解相关的指令。 一、实训目的及意义 ① 掌握网络规划和设计的基本流程 从需求分析开始做起&#x…

4-2 3D images: Volumetric data Representing tabular data

本文所用到的资料下载地址 By stacking individual 2D slices into a 3D tensor, we can build volumetric data representing the 3D anatomy of a subject. We just have an extra dimension, depth, after the channel dimension, leading to a 5D tensor of shape N C D…

【MySQL进阶(三)】 InnoDB体系架构之内存池(buffer pool)

InnoDB体系架构之内存池 一、InnoDB 体系结构二、缓冲池 buffer pool内部结构free 链(管理空闲缓冲页)怎么知道数据页是否被缓存? flush 链表(管理脏页)1. 脏页2. 链表结构3. 刷盘时机 LRU 链表(控制数据热…

blender 纹理材质

添加材质纹理需要哪五个节点? 映射节点:调整纹理的位置、大小、缩放; 纹理坐标:怎么映射,以什么方式去映射这张图,换句话说就是如何将 2D 的图片映射到 3D 的图像上;纹理坐标就是以什么坐标方式…

【学会动态规划】下降路径最小和(8)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

Rust学习01:D-day

以前自学过Python,开发了一些小程序,用于工作中提升效率。 Python的确好学易用,但用来做一个真正意义上的产品,哪怕是比较简单的产品,差点意思,特别是在移动端开发领域。 Rust看了两本书,准备动…

剑指offer61.扑克牌中的顺子

我的想法非常简单,就是先给数组排序,然后统计里面有几个0,然后遍历数组,如果是0或者比后面一个数小1就直接进入下一次循环,如果比后面一个数小2,就用掉一个0,0的数量减1,如果比后面的…

leetcode面试题 判断字符是否唯一

⭐️ 题目描述 🌟 leetcode链接:判断字符是否唯一 思路: a - z 的 ASCII 区间在 [97 , 122] 当中的每个减去 97 或者 a 都会变成 0 - 25,所以只需要一个数组,用当前元素减去 97 97 97 的下标来记录当前字母出现的次数…

微软、OpenAI用上“数据永动机” 合成数据是晨曦还是暮光?

微软、OpenAI、Cohere等公司已经开始测试使用合成数据来训练AI模型。Cohere首席执行官Aiden Gomez表示,合成数据可以适用于很多训练场景,只是目前尚未全面推广。 已有的(通用)数据资源似乎接近效能极限,开发人员认为&a…

volatile轻量级锁

一、背景 我们在写项目的时候,有时会使用多线程。为了保证一部分线程之间的通信,所以需要线程中的一些变量具有可见性。 说到线程可见性,对于Java而言,有两种方法实现:volatile和synchronized。 需要注意的是&#…

Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化...

原文链接:http://tecdat.cn/?p23689 本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测(点击文末“阅读原文”获取完整代码数据)。 相关视频 在本文中,你将看到如何使用…