集成学习-BaggingVoting和多个模型的混淆矩阵

当涉及到集成学习时,投票法和袋装法是两种常见的技术,用于将多个基学习器(base learner)组合成一个强大的集成模型。

投票法(Voting):投票法是一种简单且常用的集成学习方法。在投票法中,多个基学习器(如随机森林、XGBoost、LightGBM等)被训练并组合在一起,通过对每个基学习器的预测结果进行投票来确定最终的集成预测结果。投票法可以根据投票方式分为两种类型:硬投票和软投票。

  • 硬投票(Hard Voting):在硬投票中,每个基学习器投票给一个类别标签,最终的预测结果是得票最多的类别标签。
  • 软投票(Soft Voting):在软投票中,每个基学习器给出了每个类别的概率估计,这些概率进行平均或加权平均,最终选择概率最高的类别标签作为预测结果。
    投票法可以通过平衡不同基学习器之间的性能来提高整体预测的准确性和稳定性。它适用于二分类和多分类问题。

袋装法(Bagging):袋装法是一种基于自助采样(bootstrap sampling)的集成学习方法。在袋装法中,通过从原始训练集中随机有放回地采样生成多个训练子集,每个子集用于训练一个基学习器。然后,通过对基学习器的预测结果进行平均或多数投票来确定最终的集成预测结果。

  • 袋装法的主要优势在于通过多样化训练数据的方式,可以减少过拟合的风险,并提高模型的泛化能力。袋装法适用于各种机器学习算法,如决策树、随机森林等。

需要注意的是,袋装法和投票法可以结合使用。在这种情况下,袋装法用于生成多个训练子集和基学习器,然后投票法用于集成基学习器的预测结果,得到最终的集成预测结果。这种结合使用的方法可以进一步提高集成模型的性能和鲁棒性。

from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix# 读取历史数据
df_o2d_temp = df_o2d[df_o2d['lt_rp_pod'] <= 120].reset_index().drop('index', axis=1)
history_data = df_o2d_temp[['dayofweek_secc_rp_created_local', 'hour_secc_rp_created_local', 'supplier_name', 'tms_sla', 'delivery_plant', 'actual_shipped_wh', 'ship_to_region', 'premier_premiumcare_legion_ultimate', 'cat_lt_rp_pod_1']]# 选取需要使用的特征列
feature_cols = ['dayofweek_secc_rp_created_local', 'hour_secc_rp_created_local', 'supplier_name', 'tms_sla', 'delivery_plant', 'actual_shipped_wh', 'ship_to_region', 'premier_premiumcare_legion_ultimate']# 使用独热编码处理特征列
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
encoder.fit(history_data[feature_cols])
history_data_encoded = pd.DataFrame(encoder.transform(history_data[feature_cols]))# 获取独热编码后的特征列名称
feature_names = encoder.get_feature_names(feature_cols)# 将独热编码后的特征列与预测目标列合并
encoded_data = pd.concat([history_data_encoded, history_data['cat_lt_rp_pod_1']], axis=1)# 拆分训练集和测试集
train_data = encoded_data.sample(frac=0.8, random_state=158)
test_data = encoded_data.drop(train_data.index)# 分离特征列和目标列
train_features = train_data.iloc[:, :-1]
train_target = train_data.iloc[:, -1]
test_features = test_data.iloc[:, :-1]
test_target = test_data.iloc[:, -1]# 将目标变量转换为整数标签
label_encoder = LabelEncoder()
train_target_encoded = label_encoder.fit_transform(train_target)
test_target_encoded = label_encoder.transform(test_target)# 定义集成学习模型的基分类器
rf_model = RandomForestClassifier(n_estimators=200, random_state=42)
xgb_model = XGBClassifier(n_estimators=200, learning_rate=0.5, max_depth=20, reg_alpha=9, reg_lambda=5, gamma=0.6)
lgbm_model = LGBMClassifier(n_estimators=200, learning_rate=0.5, max_depth=20)
lr_model = LogisticRegression()# 定义投票法集成学习模型
ensemble_model = VotingClassifier(estimators=[('rf', rf_model), ('xgb', xgb_model), ('lgbm', lgbm_model), ('lr', lr_model)],voting='hard'  # 使用硬投票进行集成
)# 训练模型并进行预测
rf_model.fit(train_features, train_target_encoded)
xgb_model.fit(train_features, train_target_encoded)
lgbm_model.fit(train_features, train_target_encoded)
lr_model.fit(train_features, train_target_encoded)
ensemble_model.fit(train_features, train_target_encoded)print('rf_model', "Accuracy on test data:", accuracy_score(test_target_encoded, rf_model.predict(test_features)))
print('xgb_model', "Accuracy on test data:", accuracy_score(test_target_encoded, xgb_model.predict(test_features)))
print('lgbm_model', "Accuracy on test data:", accuracy_score(test_target_encoded, lgbm_model.predict(test_features)))
print('lr_model', "Accuracy on test data:", accuracy_score(test_target_encoded, lr_model.predict(test_features)))
print('ensemble_model', "Accuracy on test data:", accuracy_score(test_target_encoded, ensemble_model.predict(test_features)))# 绘制混淆矩阵函数
def plot_confusion_matrix(model, test_features, test_target, model_name):predictions = model.predict(test_features)cm = confusion_matrix(test_target, predictions)# 绘制混淆矩阵热力图plt.figure(figsize=(8, 6))sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False,xticklabels=label_encoder.classes_, yticklabels=label_encoder.classes_)plt.xlabel('Predicted')plt.ylabel('True')plt.title('{0} Confusion Matrix'.format(model_name))plt.show()# 绘制混淆矩阵
plot_confusion_matrix(rf_model, test_features, test_target_encoded, 'rf')
plot_confusion_matrix(xgb_model, test_features, test_target_encoded, 'xgb')
plot_confusion_matrix(lgbm_model, test_features, test_target_encoded, 'lgbm')
plot_confusion_matrix(lr_model, test_features, test_target_encoded, 'lr')
plot_confusion_matrix(ensemble_model, test_features, test_target_encoded, 'ensemble')predictions = ensemble_model.predict(test_features)# 评估模型
accuracy = accuracy_score(test_target_encoded, predictions)
print('ensemble', "Accuracy on test data:", accuracy)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Graalvm编译spring boot 3 + jpa 的原生镜像

编译spring boot 3 native jpa的原生镜像 其中涉及版本&#xff1a; maven: 3.5.4 jdk: 17 graalvm: 22.3 springboot jpa: 3.0.8 一、Windows 1、graalvm安装 GraalVM22.3.0安装地址 解压到任意目录后添加JAVA_HOME环境变量 新增path&#xff1a;%JAVA_HOME%与%JAVA_H…

MySQL数据库(三)

前言 聚合查询、分组查询、联合查询是数据库知识中最重要的一部分&#xff0c;是将表的行与行之间进行运算。 目录 前言 一、聚合查询 &#xff08;一&#xff09;聚合函数 1、count 2、sum 3、avg 4、max 5、min 二、分组查询 &#xff08;一&#xff09;group by …

【python手写算法】利用梯度下降实现线性拟合

利用梯度下降实现线性拟合&#xff0c;效果和sklearn LinearRegression()差不多。 学习率初始设置为0.1结果算高的&#xff0c;直接让我的参数变成了nan。&#xff08;体会到了飞出去的感觉&#xff09; 把学习率调小了之后就正常了 # codingutf-8 import matplotlib.pyplot a…

<数据结构>NO9.选择类排序|直接选择排序|堆排序

文章目录 选择排序1.直接选择排序优化直接选择排序 2. 堆排序 选择排序 基本思想 选组排序是从待排序数据中选出最大/最小的元素放入到序列的起始位置&#xff0c;直到待排序数据全部有序。 直接选择排序和堆排序的基本思想均符合选择排序。 1.直接选择排序 假设数据按升序…

时间序列预测 | Matlab基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测| Matlab基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的时间序列预测 评价指标包括:MAE、MBE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warni…

改进二进制粒子群算法在配电网重构中的应用(Matlab实现)【论文复现】

目录 0 概述 1 配电网重构的目标函数 2 算例 3 matlab代码实现 0 概述 配电系统中存在大量的分段开关和联络开关&#xff0c;配电网重构正是通过调整分段开关和联络升大的组合状态来变换网络结构,用于优化配电网某些指标&#xff0c;使其达到最优状态。正常运行时,则通过两…

高效工作:ADManager Plus的利器

在当今快节奏的商业环境中&#xff0c;高效的工作是成功的关键。对于IT管理员来说&#xff0c;管理和维护Active Directory&#xff08;AD&#xff09;环境是一项重要的任务。然而&#xff0c;手动处理繁琐的AD管理任务可能会占用大量的时间和精力&#xff0c;影响工作效率。为…

RLHF-基于人类反馈的强化学习

RLHF 文章目录 RLHF强化学习基础回顾为什么要使用基于人类反馈的强化学习大纲RLHF的起源大预言模型中的RLHF案例 ChatGPT RLHF中的技术细节预训练语言模型训练奖励模型基于RL进行微调 RLHF 的未来 强化学习基础回顾 智能体通过采取行动与环境进行交互&#xff0c;并返回状态和奖…

SpringCloud微服务(三)RabbitMQ、SpringAMQP、elasticsearch、DSL、MQ、ES详细介绍

目录 一、初始MQ 同步调用 异步调用 什么是MQ 执行下面的命令来运行MQ容器&#xff1a; 如果冲突了&#xff0c;可以先查询 RabbitMQ概述 常见消息模型 HelloWorld案例 二、SpringAMQP 引入依赖 Work Queue 消费预取限制 ​编辑 发布、订阅 发布订阅Fanout Ex…

能不能推荐个 vue 后台管理系统模板?

前言 下面是我整理的vue2和vue3的一些后台管理系统模板&#xff0c;希望对你有帮助~ Vue2 1、iview-admin Star: 16.4k 基于 iview组件库开发的一款后台管理系统框架&#xff0c;提供了一系列的强大组件和基础模板&#xff0c;方便开发人员快速搭建一套功能丰富、界面美观、…

红帽回应对开源的承诺

导读红帽上周宣布了限制源代码访问性的政策&#xff0c;称其企业发行版 RHEL (Red Hat Enterprise Linux) 相关源码仅通过 CentOS Stream 公开&#xff0c;付费客户和合作伙伴可通过 Red Hat Customer Portal 访问到源代码。 红帽上周宣布了限制源代码访问性的政策&#xff0c…

在Microsoft Excel中带单位的数字如何求和

使用 Excel 中的 SUM 函数对一系列单元格、整列或非连续单元格求和。要创建出色的 SUM 公式&#xff0c;请将 SUM 函数与其他 Excel 函数结合使用&#xff0c;然而 SUM 函数不能直接对带单位的数字进行求和。 当直接相加带单位的几个数字会出现如下错误&#xff1a; 错误的原因…