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

news2024/12/23 22:35:49

当涉及到集成学习时,投票法和袋装法是两种常见的技术,用于将多个基学习器(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.coloradmin.cn/o/737275.html

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

相关文章

Django_设置和读取cookie

设置cookie 在响应对象中使用set_cookie方法设置cookie from django.http import HttpResponsedef set_cookie(request):rsp HttpResponse("set cookie")rsp.set_cookie("set_cookie", "hello python", max_age3600)return rsp 注&#xff1…

Latex更改字体颜色以及快速生成 SCI 论文的 revised version 和 pure version

记录一下如何更改 Latex 字体颜色&#xff0c;在返修 SCI 论文时&#xff0c;如何较为快捷地完成 revised version 和 pure version 两个不同版本修改稿件的编辑与生成。 更改字体颜色 导入宏包 在 LaTeX 中&#xff0c;使用 \textcolor 命令或 \color 命令可以改变文本的颜…

十大机器学习算法之一:线性回归

十大机器学习算法之一&#xff1a;线性回归 1 知识预警1.1 线性代数1.2 矩阵微积分 2 什么是回归分析&#xff1f;3 线性回归3.1 一元线性回归3.2 多元线性回归 4 多项式回归 1 知识预警 1.1 线性代数 ( A T ) T A (A^\mathrm{T})^\mathrm{T}A (AT)TA$ ( A B ) T A T B T…

OpenHarmony社区运营报告(2023年6月)

本月快讯 • 6月12日&#xff0c;以“OpenHarmony共建开放&#xff0c;共享未来”为主题的2023开放原子全球开源峰会OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;分论坛在北京北人亦创国际会展中心第一报告厅圆满落幕&#xff0c;根深叶茂&#xff0c…

【Java】面向对象编程 面向对象基础

一、面向对象基础 面向对象编程&#xff0c;是一种通过对象的方式&#xff0c;把现实世界映射到计算机模型的一种编程方法。 现实世界中&#xff0c;我们定义了“人”这种抽象概念&#xff0c;而具体的人则是“小明”、“小红”、“小军”等一个个具体的人。所以&#xff0c;…

uni-app 从零开始第三章:底部 tabBar

pages.json 页面路由 | uni-app官网 一、新建 home页面 找到pages目录&#xff0c;新增一个home的页面&#xff0c;勾选上同时新建文件夹 新建完成后&#xff0c;pages.json 中 会自动添加上刚刚新建的文件信息 二、新增tabBar数据 在 pages.json中新增以下代码 "tabB…

基于pyqt5实现一款简单的界面软件(radioButton、comboBox、pushButton、图片显示)

pyqt5使用记录涉及pyqt界面控件的基本介绍&#xff0c;使用designer设计界面ui&#xff0c;并将其转化为py代码。关于界面主要实现radioButton的互斥选中事件、comboBox的选中事件&#xff08;依据list添加item&#xff09;、pushButton的单击事件、槽函数自动绑定、图片的拖入…

嵌入式开发之上位机工业风界面实现

在做测控类的嵌入式系统开发时&#xff0c;一个精美的上位机控制软件UI是可以为系统增色不少&#xff0c;一般会采用组态软件来开发&#xff0c;我们来看看下面的界面 是不是非常直观有工业质感&#xff0c;还可以根据实时数据进行动态的显示和动画效果&#xff0c;那这些炫酷的…

自定义切换整行上下位置快捷键

自定义切换整行上下位置快捷键 在File菜单中选择Settings选项&#xff0c;搜索move li 先删掉原来的快捷键 再添加你要设置的快捷键 确认就可以了。

word转Markdown文件的几个方法

word转Markdown文件的几个方法 1、 安装writage 软件&#xff0c;但是writage 需要收费了。 如果只是markdown文本编辑&#xff0c;可以直接安装typora来。 2. 利用Pandoc软件来转换word文件到markdown文件 注意doc文件需要保存docx文件格式才可以使用下面命令行 pandoc &q…

C++多线程学习(十六、STL算法中的并行版本,sequenced_policy)

目录 sequenced_policy 使用代码&#xff1a; 准备 代码 结果&#xff1a; sequenced_policy 增加参数:sequenced_policy提供相应并行版算法 execution::seq并行算法执行可以不并行化execution::par并行算法执行可以并行化execution::par_unseq并行算法执行的可以并行以…

C#基础学习_泛型集合List<T>

C#基础学习_泛型集合List 为什么要使用集合? 数组元素个数是固定的,数组一旦定义,就无法改变元素总数。如果需求变化,则必须修改源码。 如果初始化元素总数非常大,则会造成浪费。 集合的特点: 根据需要动态增加元素个数,没有限制 List泛型集合的存储结构,与数组类似,…

Ceres-Solver 官方文档

Ceres-Solver 官方文档 Non-linear Least Squares1. Introduction2. Hello World!3. Derivatives3.1 Numeric Derivatives3.2 Analytic Derivatives3.3 More About Derivatives 4. Powell’s Function5. Curve Fitting6. Robust Curve Fitting7. Bundle Adjustment8. Other Exa…

hive on spark小文件问题【hive.merge.sparkfiles参数不生效】

hive on spark小文件问题【hive.merge.sparkfiles参数不生效】 我也是查看了我们目前集群的版本是spark是3.2.3版本 hive是3.1.3版本&#xff0c;都是比较新的版本&#xff0c;正常是支持这个参数的 在测试环境中&#xff0c;如果在sql中不使用group by函数其实可以可以生效的…

响应式编程实战(08)-WebFlux,使用注解编程模式构建异步非阻塞服务

1 引言 明确了 Spring 家族中 WebFlux 组件诞生的背景和意义。作为一款新型的 Web 服务开发组件&#xff1a; 充分考虑了与原有 Spring MVC 在开发模式上的兼容性&#xff0c;开发人员仍然可以使用基于注解的编程方式来创建响应式 Web 服务WebFlux 也引入了基于函数式编程的全…

Linux下有名管道mkfifo使用

Linux下实现进程通信的方式有很多种&#xff0c;今天要说的是有名管道&#xff0c;有名管道比命名管道的优势是可以在任何进程之间传递数据。有名管道通信是依赖于管道文件这种特殊类型文件来进行的。 目录 1.mkfifo命令 2.mkfifo库函数 1.mkfifo命令 mkfifo命令可以创建管…

HuilderX 运行到 MUMU模拟器

1.网易官网下载MuMu模拟器&#xff0c;一定要打开MuMu模拟器&#xff1b; MuMu模拟器官方下载https://mumu.163.com/ 2.到MUMU模拟器的安装目录&#xff0c;找到adb.exe在的目录下&#xff0c;复制其路径&#xff1b; 举例 &#xff1a;D:/Program Files/MuMuPlayer-12.0/sh…

CSPM(项目管理专业人员能力评价)和软考有什么区别?

一、国标项目管理&#xff08;项目管理专业人员能力评级&#xff09;证书是什么&#xff1f; 《项目管理专业人员能力评价要求》&#xff08;GB/T 41831-2022&#xff09;是2022年10月12日开始实施的一项中国国家标准&#xff0c;归口于全国项目管理标准化技术委员会。 《项目…

一种环肽52661-98-0,cyclo(Gly-Ser),环(甘氨酰-L-丝氨酰),氨基酸中间体

资料编辑|陕西新研博美生物科技有限公司小编MISSwu cyclo(Gly-Ser)&#xff08;CAS号&#xff1a;52661-98-0&#xff09;一种环肽&#xff0c;一般作为氨基酸中间体&#xff0c;含有甘氨酰和丝氨酰&#xff0c;Ser Serine 丝氨酸&#xff0c;也称β羟基丙氨酸&#xff0c;丝氨…

促进协作、提高生产力:育碧选择Perforce Helix Core的原因

Perforce Helix Core成为育碧&#xff08;Ubisoft&#xff09;的主要源代码控制工具已经超过六年了&#xff0c;被团队中的程序员和美术人员在大部分项目中使用。在育碧蒙特利尔工作室&#xff0c;有超过1,200名的开发人员使用Perforce Helix Core来储存源代码和数字资产&#…