集成学习 #数据挖掘 #Python

集成学习是一种机器学习方法,它通过结合多个模型的预测结果来提高整体性能和稳定性。这种方法的主要思想是“集合智慧”,通过将多个模型(比如决策树、随机森林、梯度提升机等)的预测集成起来,可以减少单个模型的过拟合风险,同时提高对未知数据的泛化能力。

集成学习主要有两种主要形式:

  1. bagging(自助法/Bootstrap aggregating):这种方法创建多个训练集,每个训练集由原始数据随机抽取并保持数据的多样性。然后,对每个子集训练独立的模型,最后将它们的预测结果取平均或投票来得出最终结果。
  2. boosting:这是一种迭代过程,每次训练时专注于那些被前一轮错误分类的样本。 AdaBoost、Gradient Boosting Machine (GBM) 等就是典型的 boosting 方法。它们逐步提高弱模型的权重,形成一个强健的组合模型。

优点

  • 提高准确性和稳定性:通过集成多个模型,降低了单个模型失效带来的影响。
  • 减少过拟合:由于模型之间有竞争,它们可能不会过度拟合特定的训练数据。
  • 可以处理各种类型的数据:包括数值型、分类型和非结构化数据。

集成学习在以下情况下特别有效:

  1. 处理复杂数据:当数据集包含多个特征和复杂的非线性关系时,集成方法如随机森林或梯度提升机能够通过组合多个模型的结果提高预测精度。
  2. 减少过拟合:通过结合多个基础模型,集成学习可以降低单个模型过拟合的风险,因为每个模型可能学习到数据的不同部分。
  3. 提高稳定性和鲁棒性:集成学习模型通常比单个模型更稳定,即使其中一个模型表现不佳,整体性能也往往不会受到太大影响。
  4. 利用不同学习算法的优势:可以将弱学习器组合成强学习器,如AdaBoost将弱分类器逐步调整以关注难以分类的数据。
  5. 数据不平衡问题:集成方法能更好地处理类别分布不均的数据,通过加权或平衡采样等方式,提高少数类别的预测能力。
  6. 模型融合:例如,通过投票、平均等方式,将不同的模型预测结果整合起来,提高最终决策的可靠性。


应用案例:信用卡还贷情况预测。

数据获取(UCI_Credit_Card.csv) 30000 行客户等还款记录,有 25 列,包含客户的基本信息,每月的 还款记录,以及需要我们预测的目标—是否违约。

首先加载数据集,查看数据集概况,并做数据清洗:

1)EDUCATION(教育背景):将其中值为 0,5,6 的样本对应值修改为 4

2)MARRIAGE(婚姻状况):0 值的样本修改为 3

#加载数据
import pandas as pd
data = pd.read_csv('UCI_Credit_Card.csv')
#查看数据概况
data.info()
#数据清洗
#将'EDUCATION'列中值为0,5,6,改为4
data['EDUCATION'].replace({0:4,5:4,6:4},inplace=True)
#将'MARRIAGE'列中值为0,改为3
data['MARRIAGE'].replace({0:3},inplace=True)

#划分特征集和类别集
x = data.iloc[:,1:-1]
y = data.iloc[:,-1]
#划分数据集
from sklearn import model_selection
x_train,x_test,y_train,y_test = model_selection.train_test_split(x,y,
                                                                 test_size=0.2,
                                                                 random_state=1)

通过.info查看数据集概况可知,该数据集有25个属性列,共30000个样本数据。没有缺失值,最后一个属性列“target”为下个月还款违约情况

建立预测集成训练模型:

1、Bagging集成模型

from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import BaggingClassifier
bagging = BaggingClassifier(KNeighborsClassifier(),
                            max_samples=0.5,
                            max_features=0.5)
bagging.fit(x_train,y_train)
pred1 = bagging.predict(x_test)
from sklearn.metrics import classification_report
#输出:Accuracy、Precisio、Recall、F1分数等信息
print('bagging模型评估报告:\n',classification_report(y_test,pred1))
print('bagging模型的准确率为:',bagging.score(x_test,y_test))

#计算AUC得分
y_predict_proba_1 = bagging.predict_proba(x_test)
from sklearn.metrics import roc_curve
fpr_1, tpr_1, thretholds_1 = roc_curve(y_test, y_predict_proba_1[:,1])
from sklearn.metrics import auc
AUC_1 = auc(fpr_1,tpr_1)
print('ROC曲线下面积AUC为:',AUC_1)

指标说明:
Accuracy:准确率 
Precisio:查准率 、精确率
Recall:查全率 、召回率、敏感率、真正例率
F1分数:衡量分类模型精确度的一个指标,可视为精确率和召回率的一种调和平均

 2、Random Forest集成模型

from sklearn.ensemble import RandomForestClassifier
RF = RandomForestClassifier()
RF.fit(x_train,y_train)
pred2 = RF.predict(x_test)
print('RandomFore模型评估报告:\n',classification_report(y_test,pred2))
print('RandomFore模型的准确率为:',RF.score(x_test,y_test))

#计算AUC得分
y_predict_proba_2 = RF.predict_proba(x_test)
from sklearn.metrics import roc_curve
fpr_2, tpr_2, thretholds_2 = roc_curve(y_test, y_predict_proba_2[:,1])
from sklearn.metrics import auc
AUC_2 = auc(fpr_2,tpr_2)
print('ROC曲线下面积AUC为:',AUC_2)

3、AdaBoost集成模型

from sklearn.ensemble import AdaBoostClassifier
AB = AdaBoostClassifier(n_estimators = 10)
AB.fit(x_train,y_train)
pred3 = AB.predict(x_test)
print('AdaBoost模型评估报告:\n',classification_report(y_test,pred3))
print('AdaBoost模型的准确率为:',AB.score(x_test,y_test))

#计算AUC得分
y_predict_proba_3 = AB.predict_proba(x_test)
from sklearn.metrics import roc_curve
fpr_3, tpr_3, thretholds_3 = roc_curve(y_test, y_predict_proba_3[:,1])
from sklearn.metrics import auc
AUC_3 = auc(fpr_3,tpr_3)
print('ROC曲线下面积AUC为:',AUC_3)

#特征重要性
impotrances = RF.feature_importances_
#模型参数
RF.get_params()

#模型验证交叉验证
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import cross_val_score
clf = AdaBoostClassifier(n_estimators=30)
scores = cross_val_score(clf,x,y,cv=10)
scores.mean()

4、决策树

from sklearn.tree import DecisionTreeClassifier
dct = DecisionTreeClassifier()
dct.fit(x_train,y_train)
pred4 = dct.predict(x_test)
print('决策树 模型评估报告:\n',classification_report(y_test,pred4))
print('决策树 模型的准确率为:',dct.score(x_test,y_test))

#计算AUC得分
y_predict_proba_4 =dct.predict_proba(x_test)
from sklearn.metrics import roc_curve
fpr_4, tpr_4, thretholds_4 = roc_curve(y_test, y_predict_proba_4[:,1])
from sklearn.metrics import auc
AUC_4 = auc(fpr_4,tpr_4)
print('ROC曲线下面积AUC为:',AUC_4)

对四个模型测试结果ROC曲线对比:

import matplotlib
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = ['SimHei']        #用来显示中文标签
plt.rcParams['axes.unicode_minus'] = False      #用来正常显示符号

matplotlib.rc('axes', facecolor = 'white')      #设置背景颜色是白色
matplotlib.rc('font', size = 14)                #全局设置字体
matplotlib.rc('figure', figsize = (12, 8))      #全局设置大小
matplotlib.rc('axes', grid = True)              #显示网格

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(fpr_1,tpr_1,'d:y',linestyle = 'dashed',
        label = 'bagging--AUC=%0.4f'%auc(fpr_1,tpr_1))
ax.plot(fpr_2,tpr_2,'s:r',linestyle = 'dashed',
        label = 'RandomFore --AUC=%0.4f'%auc(fpr_2,tpr_2))
ax.plot(fpr_3,tpr_3,'v:b',linestyle = 'dashed',
        label = 'AdaBoost--AUC=%0.4f'%auc(fpr_3,tpr_3))
ax.plot(fpr_4,tpr_4,'o:k',linestyle = 'dashed',
        label = 'decision tree--AUC=%0.4f'%auc(fpr_4,tpr_4))
ax.legend(loc = 'best')
plt.title('测试结果 ROC曲线对比')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.savefig('测试结果 ROC曲线对比.png')

通过以上结果可以总结出:

模型

测试结果

accuracy

precision(macro avg)

recall(macro avg)

AUC

bagging

0.78

0.7

0.53

0.6587

Random Forest

0.81

0.74

0.65

0.7594

AdaBoost

0.81

0.76

0.63

0.7586

决策树

0.72

0.6

0.61

0.609

可以看出四种模型中,随机森林和AdaBoost两个模型得到的结果在各个性能评估指标上都明显地优于baging和决策树。

随机森林和AdaBoost两个模型的各个指标都十分的相近,两模型之间的性能几乎没有什么差别;而baging和决策树两个模型之间,bagging的各个性能评估指标略微地优于决策树。

由此得出:最优的模型是随机森林和AdaBoost,其次是bagging,最后是决策树。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何发挥物联网电能表的优势

发挥物联网电能表的优势,对于提升电力系统的智能化水平、优化电力资源配置、提高用电效率以及促进环保发展等方面都具有重要意义。 一、实时监测与数据分析 物联网电能表的核心优势在于其能够实时监测电力使用情况,并通过无线网络将数据传输到云平台。…

【云岚到家】-day03-2-门户缓存实现实战

【云岚到家】-day03-2-门户缓存实现实战 5 缓存实现5.2 定时任务更新缓存5.2.1 分布式调度平台5.2.1.1 jdk提供的Timer定时器5.2.1.2 使用第三方Quartz方式5.2.1.3 使用分布式调度平台XXL-JOB 5.2.2 XXL-JOB5.2.2.1 介绍5.2.2.2 部署调度中心5.2.2.3 执行器 5.2.2 定义缓存更新…

laravel版本≥ 8.1

laravel10 php ≥ 8.1 且 ≤ 8.3&#xff1f; 8.1 < php < 8.3PHP版本要求在 8.1 到 8.3 之间&#xff0c;包括这两个版本。具体来说&#xff1a;"≥ 8.1" 表示 PHP 的版本至少是 8.1&#xff0c;也就是说 8.1 及以上的版本都可以。 "≤ 8.3" 表示 P…

2024年【广东省安全员A证第四批(主要负责人)】找解析及广东省安全员A证第四批(主要负责人)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员A证第四批&#xff08;主要负责人&#xff09;找解析根据新广东省安全员A证第四批&#xff08;主要负责人&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将广东省安全员A证第四批&#xff…

光储充一体化,开启绿色出行新篇章

一、追光逐梦&#xff0c;绿色能源点亮未来 在蔚蓝的天空下&#xff0c;光伏发电板如同一片片金色的叶子&#xff0c;静静地捕捉着太阳的光芒。它们不仅为大地带来光明&#xff0c;更是绿色出行的强大后盾。光储充一体化充电站&#xff0c;以光伏为源&#xff0c;储能为桥&…

CV预测:快速使用LeNet-5卷积神经网络

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

Vue 3深度探索:自定义渲染器与服务端渲染

title: Vue 3深度探索&#xff1a;自定义渲染器与服务端渲染 date: 2024/6/14 updated: 2024/6/14 author: cmdragon excerpt: 这篇文章介绍了如何在Vue框架中实现自定义渲染器以增强组件功能&#xff0c;探讨了虚拟DOM的工作原理&#xff0c;以及如何通过SSR和服务端预取数…

【并发编程系列一】并发编年史:线程的双刃剑——从优势到风险的全面解析

文章目录 并发简史&#x1f5a5;️初期探索&#xff08;20世纪50-60年代&#xff09;并发理论基础&#xff08;1965年以后&#xff09;并行计算的兴起&#xff08;1970年代至1980年代&#xff09;现代并发技术&#xff08;1990年代至今&#xff09; 线程的优势&#x1f60d;发挥…

体验亚马逊AIGC——Amazon Bedrock

前言 随着人工智能技术的不断发展&#xff0c;我们已经进入了一个全新的时代&#xff0c;即AI驱动的时代。在这个时代&#xff0c;人工智能已经逐渐成为我们生活中不可或缺的一部分&#xff0c;它可以帮助我们更好地处理各种复杂的问题&#xff0c;提高我们的工作效率&#xff…

单调队列——Acwing.154滑动窗口

单调队列 定义 单调队列是一个限制只能队尾插入&#xff0c;但是可以两端删除的双端队列。单调队列存储的元素值&#xff0c;是从队首到队尾单调递增或单调递减的。 运用情况 滑动窗口最大值&#xff1a;给定一个整数数组和一个窗口大小&#xff0c;计算窗口内的最大值。任…

vscode 连接 GitHub

文章目录 连接 GitHub一、通过 SSH 连接 github二、通过 HTTPS 连接 github 连接 GitHub 在 vscode 中首次使用 git push 命令时会要求输入 github 账户的 username 和 password&#xff0c;这种基本身份验证在 2021.8.13 以前还是可以的&#xff0c;之后的话&#xff0c;就会…

逆向分析-Ollydbg动态跟踪Ransomware.exe恶意锁机程序

1.认识Ollydbg Ollydbg是一个新的动态追踪工具&#xff0c;将IDA与SoftICE结合起来的思想&#xff0c;Ring 3级调试器&#xff0c;非常容易上手&#xff0c;己代替SoftICE成为当今最为流行的调试解密工具了。同时还支持插件扩展功能&#xff0c;是目前最强大的调试工具。 Oll…

Python开源项目周排行 2024年第9周

#2024年第9周2024年6月3日1buku强大的浏览器书签管理工具。这是一款开源的书签命令行管理工具&#xff0c;它轻量、隐私安全且易于使用&#xff0c;支持从主流浏览器导入书签、自动获取书签信息、跨平台同步和强大的搜索功能。2flagsmith轻松管理功能开关和配置的平台。这是一个…

MJ绘画设计基础——如何玩转midjourney?

抽卡的时候经常有一个问题&#xff0c;就是整张图都还不错&#xff0c;但是某些地方有些小问题&#xff0c;比如说手很奇怪&#xff0c;比如下面这个图&#xff0c;哪都挺好看&#xff0c;就是左手有点问题。 这时候就可以局部重绘来拯救一下 第一次生成的图 点击图片下方的V…

DFS序 欧拉序

【算法分析】 ● DFS 序DFS 序表示从根结点开始对树进行 DFS 所得的结点遍历顺序。 易得上图的 DFS 序为&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9。可见&#xff0c;通过 DFS 序&#xff0c;可…

Nginx+Tomcat负载均衡、动静分离群集方案

一、Tomcat简介 在现代 Web 服务架构中&#xff0c;Tomcat 和 Nginx 是两个至关重要的组件&#xff0c;负责处理用户请求并实现高性能的服务。本篇博客将深入探讨这些技术的原理和部署配置方法。 最初是由Sun的软件构架师詹姆斯邓肯戴维森开发。安装Tomcat后&#xff0c;安装…

最新区块链论文速读--CCF A会议 ICSE 2024 共13篇 附pdf下载 (2/2)

Conference&#xff1a;International Conference on Software Engineering (ICSE) CCF level&#xff1a;CCF A Categories&#xff1a;Software Engineering/System Software/Programming Languages Year&#xff1a;2024 Num&#xff1a;13 第1~7篇区块链文章请点击此处…

后端返回前端时间格式化

时间格式化的方法总共包含以下 5 种。 1.前端时间格式化 JS 版时间格式化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function dateFormat(fmt, date) { let ret; const opt { "Y": date.getFullYear().toString(), // 年 …

[Shell编程学习路线]——探讨Shell中变量的作用范围(export)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月14日10点14分 &#x1f004;️文章质量&#xff1a;95分 文章目录 ————前言———— 定义变量&#xff1a; 输出变…