【机器学习系列】Python实战:使用GridSearchCV优化AdaBoost分类器及其基分类器

news2024/11/23 1:04:12

目录

一、AdaBoost的标准实现中是否支持使用不同类型的基分类器?

二、Adaboost的参数

三、Python实现Adaboost

(一)导入库和数据集

(二) 划分训练集

(三)选择基分类器--决策树

 (四)创建Adaboost分类器

(五) 网格调参寻找Adaboost中最优参数:n_estimators和learning_rate

(六)创建 GridSearchCV 对象并执行网格搜索

 (七)获取最优参数和最佳准确率

(八) 打印最佳参数和最佳准确率

(九) 使用最佳参数训练AdaBoost分类器

(十) 进行预测并计算准确率

(十一) 输出评估报告


本文旨在深入探索AdaBoost算法的标准实现,并解释如何通过网格搜索(GridSearchCV)对其及其基分类器(如决策树)的参数进行优化,以在分类任务中达到更高的准确率。我们将从AdaBoost的基本概念讲起,介绍其在Python中的实现方式,并通过一个实例详细展示如何划分训练集、选择基分类器、创建AdaBoost分类器、调参优化以及评估预测性能。本篇博客将帮助读者理解AdaBoost算法的调优步骤,并能够运用网格搜索技术寻找最优的模型参数,从而提高模型在实际应用中的预测精度。

一、AdaBoost的标准实现中是否支持使用不同类型的基分类器?

在标准的AdaBoost实现中,由于算法设计时假设所有的基分类器都是同质的,因此通常所有的基分类器都是同一类型。这意味着在同一个AdaBoost模型中,通常所有基分类器都是决策树、KNN或其他单一类型的分类器。

然而,一些变体的集成学习方法允许使用不同类型的基分类器。例如,Stacking(堆叠)是一种集成学习方法,它可以在不同的层中使用不同类型的分类器。在Stacking中,第一层的分类器可以是不同类型的,而第二层的分类器则使用第一层的分类器的输出作为输入。

对于AdaBoost来说,如果你想在一个模型中同时使用决策树和KNN,你需要使用一个允许混合不同类型基分类器的集成学习方法,而不是标准的AdaBoost。例如,你可以手动实现一个自定义的集成学习方法,它结合了AdaBoost的权重更新机制和不同类型的基分类器。

二、Adaboost的参数

在机器学习领域,Adaboost算法是一个强大的集成学习技术,它结合多个弱学习器来生成一个强大的预测模型。为了优化Adaboost算法的性能,有几个关键参数需要调整:

1. 估计器数量(n_estimators):此参数决定集成中包含的弱学习器的数量。增加估计器的数量通常能提高模型的性能,但也会增加计算时间和可能引起过拟合。通过交叉验证选择最优的估计器数量是一种常见的做法。

2. 学习率(learning_rate):学习率决定了每个弱学习器对最终模型的贡献比例。较小的学习率能使训练过程更慢,但有助于防止过拟合;较大的学习率虽然能加快训练速度,但也可能导致过拟合。这个参数通常与估计器数量一起调整以找到最佳平衡点。

3. 基础估计器选择(estimator):选择合适的基础估计器(弱学习器)非常关键,常用的如决策树桩(一层浅决策树)或简单的线性模型。不同的基础估计器可能对不同数据集的适应性各不相同,因此尝试多种基础估计器是有益的。

4. 基础分类器超参数:如果基础估计器有超参数(例如决策树的max_depth),调整这些参数也会影响AdaBoost模型的性能。

5. 随机种子(random_state):设置一个固定的随机种子可以确保实验的可重复性。但在超参数调优时,尝试不同的随机种子可以测试模型在不同随机初始化下的稳定性。

6. 交叉验证:交叉验证是超参数调整中不可或缺的一部分,可以帮助评估模型在未见数据上的性能,并防止在训练集上过拟合。使用网格搜索或随机搜索等技术可以有效探索超参数空间。

通过精心调整这些参数,可以显著提升Adaboost模型的性能,实现在各种数据集上的最优表现。

三、Python实现Adaboost

(一)导入库和数据集

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
from sklearn.model_selection import KFold
# 导入鸢尾花数据集
iris = load_iris()
X = iris.data # 特征
y = iris.target # 类别
feature_names = iris.feature_names # 特征名称
class_names = iris.target_names # 类别名称

(二) 划分训练集

 # 将数据集划分为训练集和测试集,比例为 8:2
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

(三)选择基分类器--决策树

# 首先创建基础分类器
base_estimator = DecisionTreeClassifier(criterion="entropy", max_depth=2, min_samples_split=2, min_samples_leaf=2, random_state=0)

 (四)创建Adaboost分类器

# 然后创建 AdaBoost 分类器实例
ada_classifier = AdaBoostClassifier(estimator = base_estimator,random_state=0) 
# ada_classifier.base_estimator = base_estimator

(五) 网格调参寻找Adaboost中最优参数:n_estimators和learning_rate


# 定义参数网格
param_grid = {
    'n_estimators': [10, 20, 30,40,50],
    'learning_rate': [0.01, 0.02,0.001]
}

(六)创建 GridSearchCV 对象并执行网格搜索

# 创建 GridSearchCV 对象
grid_search = GridSearchCV(estimator=ada_classifier, param_grid=param_grid, cv=5, scoring='accuracy')
# 执行网格搜索
grid_search.fit(X_train, y_train)

 (七)获取最优参数和最佳准确率

# 获取最佳参数和最佳准确率
best_params = grid_search.best_params_
best_score = grid_search.best_score_

(八) 打印最佳参数和最佳准确率

# 打印最佳参数和最佳准确率
print("Best parameters:", best_params)
print("Best cross-validation score (accuracy):", best_score)

(九) 使用最佳参数训练AdaBoost分类器

best_ada_classifier = AdaBoostClassifier(estimator = base_estimator,random_state=0,n_estimators=best_params['n_estimators'], learning_rate=best_params['learning_rate'])
best_ada_classifier.fit(X_train, y_train)

(十) 进行预测并计算准确率

# 使用训练好的AdaBoost分类器进行预测
predictions = best_ada_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, predictions)
# 打印准确率
print("Accuracy with best parameters:", accuracy)

(十一) 输出评估报告

from sklearn.metrics import accuracy_score, classification_report
print('模型的准确率为:\n', accuracy_score(y_test, predictions))
print('模型的评估报告:\n', classification_report(y_test, predictions))

 补充:为什么改变基础弱分类器的参数,Adaboost的准确率不变?

当你改变决策树(base_classifier)的参数,例如criterion、max_depth、min_samples_split和min_samples_leaf,实际上是在改变每个基础分类器的性能。然而,AdaBoostClassifier的fit方法会根据给定的estimator(这里就是基础弱分类器)训练多个弱分类器,并对它们的权重进行调整。如果这些基础模型的性能变化不明显,或者它们之间有很好的互补性,那么整个AdaBoost模型的组合效果可能不会显著提升准确率。

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

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

相关文章

数据结构_栈和队列

目录 一、栈 1.1 栈的使用 1.2 模拟实现栈 二、队列 2.1 队列的使用 2.2 环形队列 2.3 双端队列 总结 一、栈 栈是只允许在固定的一端进行元素的插入和删除操作的一种特殊线性表。其中进行元素的插入和删除操作的一端称为栈顶,另一端称为栈底。栈遵循先进后…

MQTT服务器/MQTT_C#客户端/Websoket连MQTT

1 . 搭建MQTT服务器 找到上传中的 emqx-5.3.2-windows-amd64 打开bin如下: 链接: emqx-5.3.2-windows-amd64 如果安装失败 在上传中找到链接: VC_redist.x64.exe 安装。 正确后在浏览器输入 http://127.0.0.1:18083 会有如下mqtt服务端管理页面: 进入客户端认证,创建一个…

72. UE5 RPG 实现召唤技能数量的限制,并优化技能相关

在上一篇文章里,我们实现了召唤技能,并且能够无限的召唤。所以,这属于一个bug,我们不能无限制的去召唤,这会影响游戏的体验。所以,在这篇里面,我们实现一下对召唤物数量的限制,并优化…

32.双击列表启动目标游戏

上一个内容&#xff1a;31.加载配置文件中的游戏到辅助列表 以 31.加载配置文件中的游戏到辅助列表 它的代码为基础进行修改 效果图&#xff1a; 添加列表双击事件 实现代码&#xff1a; LPNMITEMACTIVATE pNMItemActivate reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR…

掌控浮动布局,主宰页面之美

浮动有很多的效果 实现文字环绕效果导致一个元素脱离文档流可以让块级元素水平排列浮动元素可以用 marign, 但是不能使用 margin: 0 auto; 同时也会带来很多不好的效果 如果我想要让文字在图片的旁边应该怎么做&#xff1f; 这里我们就可以使用浮动float: left;去实现 <…

Java | Leetcode Java题解之第168题Excel表列名称

题目&#xff1a; 题解&#xff1a; class Solution {public String convertToTitle(int columnNumber) {StringBuffer sb new StringBuffer();while (columnNumber ! 0) {columnNumber--;sb.append((char)(columnNumber % 26 A));columnNumber / 26;}return sb.reverse().t…

【odoo | JSON-RPC】无会话(session_id)控制的api,外部api密钥的另一种表现!

概要 在Odoo中&#xff0c;JSON-RPC&#xff08;JSON Remote Procedure Call&#xff09;是一种基于JSON格式的远程过程调用协议&#xff0c;用于客户端和服务器之间的通信。此文章将介绍 JSON-RPC中无会话(session_id)控制的api&#xff0c;也是外部api密钥的另一种表现方式。…

【Linux基础IO】重定向以及原理分析

我们先来看下面一个情况&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define filename "text.txt"int main(){close(1);//关…

差分数组汇总

本文涉及知识点 算法与数据结构汇总 差分数组 令 a[i] ∑ j : 0 i v D i f f [ i ] \sum_{j:0}^{i}vDiff[i] ∑j:0i​vDiff[i] 如果 vDiff[i1]&#xff0c;则a[i1…]全部 如果vDiff[i2]–,则a[i2…]全部–。 令11 < i2 &#xff0c;则&#xff1a; { a [ i ] 不变&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 身高差值排序(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

重学java 77.JDK新特性 ③ Stream流

The road is long,it can be really hard.Whatever you do,you hold on to that foolishly hopeful smile —— 24.6.19 Stream流 stream流中的"流"不是特指"IO流",它是一种"流式编程"(编程方式),可以看做是"流水线 package S109Stream;im…

在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector

在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…

【全文档】软件项目经理需要掌握的文档有哪些?

软件项目经理在项目管理过程中需要编写多种文档&#xff0c;以下是常见的十五个文档&#xff1a; 项目计划&#xff1a; 详细描述了项目的范围、时间、成本、资源、沟通计划等关键信息&#xff0c;是项目管理的核心文档。 需求文档&#xff1a; 记录了项目的业务需求、功能需求…

VMR,支持30+种编程语言的SDK版本管理器,支持Windows/MacOS/Linux。

官方文档地址&#xff1a;documents 官方项目地址&#xff1a;github 欢迎安装使用&#xff0c;分享转发&#xff0c;前往github star。 跨平台&#xff0c;支持Windows&#xff0c;Linux&#xff0c;MacOS支持多种语言和工具&#xff0c;省心受到lazygit的启发&#xff0c;拥…

【stm32-新建工程-CubeMX】

stm32-新建工程-CubeMX ■ CubeMX 生产工程 ■ CubeMX 生产工程

数据库 |试卷八试卷九试卷十

1.基数是指元组的个数 2.游标机制 3.触发器自动调用 4.count(*)统计所有行&#xff0c;不忽略空值null&#xff0c;但不但要全局扫描&#xff0c;也要对表的每个字段进行扫描&#xff1b; 5.eacherNO INT NOT NULL UNIQUE&#xff0c;为什么不能断定TeacherNO是主码&#xff…

JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题

前言 在上一节中&#xff0c;我们简单介绍了 TCP 协议的相关概念和格式&#xff0c;而且还介绍了TCP 协议原理中的 确认应答机制、超时重传机制&#xff0c;在本节中我们将会继续介绍 TCP协议原理中的其他机制。 连接管理机制&#xff08;安全机制&#xff09; 在正常情况下&…

数学建模基础:统计模型

目录 前言 一、概率与统计基础 二、统计模型 三、Matlab统计工具箱 四、实例示范&#xff1a;市场调查分析 步骤 1&#xff1a;数据导入 步骤 2&#xff1a;数据可视化 步骤 3&#xff1a;建立多元线性回归模型 步骤 4&#xff1a;模型验证 步骤 5&#xff1a;模型应…

Java学习 (二)关键字、标识符、数组

一、关键字 我们第一章案例中有很多关键字&#xff0c;比如class、public、static、void等&#xff0c;这些关键字依旧被java定义好了&#xff0c;可以拿来用&#xff0c;不需要死记硬背&#xff0c;按照官方文档查询即可 #官方文档 https://docs.oracle.com/javase/tutorial/j…

高速公路收费图片分析系统深入理解

当今社会&#xff0c;随着交通运输业的快速发展&#xff0c;高速公路已成为人们出行的重要选择。而高速公路收费系统作为保障道路可持续运营的重要组成部分&#xff0c;其效率和准确性对于保障道路畅通和交通安全至关重要。近年来&#xff0c;随着技术的不断进步&#xff0c;高…