集成学习 #数据挖掘 #Python
集成学习是一种机器学习方法,它通过结合多个模型的预测结果来提高整体性能和稳定性。这种方法的主要思想是“集合智慧”,通过将多个模型(比如决策树、随机森林、梯度提升机等)的预测集成起来,可以减少单个模型的过拟合风险,同时提高对未知数据的泛化能力。
集成学习主要有两种主要形式:
- bagging(自助法/Bootstrap aggregating):这种方法创建多个训练集,每个训练集由原始数据随机抽取并保持数据的多样性。然后,对每个子集训练独立的模型,最后将它们的预测结果取平均或投票来得出最终结果。
- boosting:这是一种迭代过程,每次训练时专注于那些被前一轮错误分类的样本。 AdaBoost、Gradient Boosting Machine (GBM) 等就是典型的 boosting 方法。它们逐步提高弱模型的权重,形成一个强健的组合模型。
优点:
- 提高准确性和稳定性:通过集成多个模型,降低了单个模型失效带来的影响。
- 减少过拟合:由于模型之间有竞争,它们可能不会过度拟合特定的训练数据。
- 可以处理各种类型的数据:包括数值型、分类型和非结构化数据。
集成学习在以下情况下特别有效:
- 处理复杂数据:当数据集包含多个特征和复杂的非线性关系时,集成方法如随机森林或梯度提升机能够通过组合多个模型的结果提高预测精度。
- 减少过拟合:通过结合多个基础模型,集成学习可以降低单个模型过拟合的风险,因为每个模型可能学习到数据的不同部分。
- 提高稳定性和鲁棒性:集成学习模型通常比单个模型更稳定,即使其中一个模型表现不佳,整体性能也往往不会受到太大影响。
- 利用不同学习算法的优势:可以将弱学习器组合成强学习器,如AdaBoost将弱分类器逐步调整以关注难以分类的数据。
- 数据不平衡问题:集成方法能更好地处理类别分布不均的数据,通过加权或平衡采样等方式,提高少数类别的预测能力。
- 模型融合:例如,通过投票、平均等方式,将不同的模型预测结果整合起来,提高最终决策的可靠性。
应用案例:信用卡还贷情况预测。
数据获取(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 pltplt.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,最后是决策树。
相关文章:
集成学习 #数据挖掘 #Python
集成学习是一种机器学习方法,它通过结合多个模型的预测结果来提高整体性能和稳定性。这种方法的主要思想是“集合智慧”,通过将多个模型(比如决策树、随机森林、梯度提升机等)的预测集成起来,可以减少单个模型的过拟合…...
IDEA 中设置 jdk 的版本
本文介绍一下 IDEA 中设置 jdk 版本的步骤。 一共有三处需要配置。 第一处 File --> Project Structure Project 和 Modules 下都需要指定一下。 第二处 File --> Settings 第三处 运行时的配置...
AI日报|Luma推出AI视频模型,又一Sora级选手登场?SD3 Medium发布,图中文效果改善明显
文章推荐 AI日报|仅三个月就下架?微软GPT Builder出局AI竞争赛;马斯克将撤回对奥特曼的诉讼 谁是最会写作文的AI“考生”?“阅卷老师”ChatGPT直呼惊艳! ⭐️搜索“可信AI进展“关注公众号,获取当日最新…...
嵌入式系统复习(一)
第一章 嵌入式系统的定义、特点 嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 特点:嵌入性 专用性 计算机系统 嵌入式系统典型组成…...
一次搞定:Java中数组拷贝VS数组克隆
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…...
Java多线程编程与并发处理
引言 在现代编程中,多线程和并发处理是提高程序运行效率和资源利用率的重要方法。Java提供了丰富的多线程编程支持,包括线程的创建与生命周期管理、线程同步与锁机制、并发库和高级并发工具等。本文将详细介绍这些内容,并通过表格进行总结和…...
C++ 35 之 对象模型基础
#include <iostream> #include <string.h> using namespace std;class Students05{ public:// 只有非静态成员变量才算存储空间,其他都不算int s_a; // 非静态成员变量,算对象的存储空间double s_c;// 成员函数 不算对象的存储空间void f…...
PHP超级全局变量:功能、应用及最佳实践
PHP中的超级全局变量(Superglobal Variables)是预定义的数组,它们在脚本的全部作用域内都可以访问,无需使用global关键字。超级全局变量包含了关于请求、会话、服务器等各种信息,常见的有$_GET、$_POST、$_REQUEST、$_…...
python在windows创建的文件,换成linux系统格式
python在windows创建的文件,换成linux系统格式 dos2unix.exe的下载(下载的文件放入路径下:C:\Windows\System32) 链接:https://pan.baidu.com/s/10fC2tfvUtbh-axJ21cj_Xw?pwdm3zc 提取码:m3zc 批量修改文件格式 import subpr…...
最新区块链论文速读--CCF A会议 ICSE 2024 共13篇 附pdf下载 (2/2)
Conference:International Conference on Software Engineering (ICSE) CCF level:CCF A Categories:Software Engineering/System Software/Programming Languages Year:2024 Num:13 第1~7篇区块链文章请点击此处…...
C++ 34 之 单例模式
#include <iostream> #include <string.h> using namespace std;class King{// 公共的函数,为了让外部可以获取唯一的实例 public:// getInstance 获取单例 约定俗成static King* getInstance(){return true_king;}private: // 私有化// 构造函数设置为…...
SAP BW:传输转换源系统-源系统映射关系
最近有朋友再问问我源系统映射关系怎么配置,想着写一个怕以后忘了。 简单说下这个是干嘛的,其实就是配置一个源系统到目标系统的一个映射,这样传输的时候才知道传过来的数据源要变成目标系统的数据源。 比如下图,在开发环境&…...
React+TS前台项目实战(九)-- 全局常用组件弹窗Dialog封装
文章目录 前言Dialog公共弹窗组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局公共弹窗Dialog组件封装,将用到上篇封装的模态框Modal组件。有时在前台项目中,偶尔要用到一两个常用的组件,如 弹窗&#x…...
利用视觉分析技术提升水面漂浮物、水面垃圾检测效率
随着城市化进程的加速和工业化的发展,水体污染问题日益严重,水面漂浮物成为水环境治理的一大难题。传统的水面漂浮物检测方法主要依赖人工巡查和简单的传感器检测,存在着效率低、准确率不高等问题。为了提升水面漂浮物检测的效率和准确性&…...
NFT 智能合约实战-快速开始(1)NFT发展历史 | NFT合约标准(ERC-721、ERC-1155和ERC-998)介绍
文章目录 NFT 智能合约实战-快速开始(1)NFT发展历史国内NFT市场国内NFT合规性如何获得NFT?如何查询NFT信息?在 OpenSea 上查看我们的 NFT什么是ERC721NFT合约标准ERC-721、ERC-1155和ERC-998 对比ERC721IERC721.sol 接口内容关于合约需要接收 ERC721 资产 onERC721Received…...
Linux知识整理说明
最近学校Linux课程刚刚结课,但还是有其他课程在继续。 所以接下来我会抽时间,根据笔记以及网络资料,整理和Linux相关的知识文档,各位可以后续留意. 完整的章目录我会先发出来,后续补充完整。 所有的内容会在 下周三(6…...
诊所管理系统哪家会好一点
随着医疗行业的快速发展和信息化进程的加速,诊所作为医疗服务的重要基层单位,其运营管理效率与服务质量的提升愈发依赖于现代化的管理工具。诊所管理系统应运而生,旨在通过集成化、智能化的技术手段,帮助诊所实现诊疗流程优化、资…...
前端根据权限生成三级路由
三级菜单和后端返回数组对比获取有权限的路由 数组: //后端返回的数组 const arr1 [sale.management, sale.order, sale.detail]; //前端路由 const arr2 [{path: "/sale-manage",redirect: "/sale-manage/sale-order/sale-list",name: sale…...
Databricks超10亿美元收购Tabular;Zilliz 推出 Milvus Lite ; 腾讯云支持Redis 7.0
重要更新 1. Databricks超10亿美元收购Tabular,Databricks将增强 Delta Lake 和 Iceberg 社区合作,以实现 Lakehouse 底层格式的开放与兼容([1] [2])。 2. Zilliz 推出 Milvus Lite 轻量级向量数据库,支持本地运行;Milvus Lite 复…...
算法day29
第一题 695. 岛屿的最大面积 本题解法:采用bfs的算法; 本题使用象限数组的遍历方法和定义布尔数组vis来遍历每一个元素的上下左右元素,防治被遍历的元素被二次遍历; 本题具体分析如上题故事,但是由于要求区域的最大面…...
车牌识别(附源代码)
完整项目已上传至github:End-to-end-for-chinese-plate-recognition/License-plate-recognition at master duanshengliu/End-to-end-for-chinese-plate-recognition GitHub 整体思路: 1.利用u-net图像分割得到二值化图像 2.再使用cv2进行边缘检测获得车牌区域坐…...
在VSCode中安装python
引言 Python 是一种广泛使用的高级编程语言,因其易学、易用、强大而受到欢迎。它由 Guido van Rossum 于 1991 年首次发布,并以简洁的语法和丰富的库生态系统而著称。 以下是 Python 的一些关键特点和优势: 关键特点 易于学习和使用&#x…...
StarkNet架构之L1-L2消息传递机制
文章目录 StarkNet架构之L1-L2消息传递机制L2 → L1消息L2 → L1消息结构L2 → L1消息哈希L1 → L2消息L1 → L2消息取消L1 → L2报文费用L1 → L2哈希额外资源StarkNet架构之L1-L2消息传递机制 原文地址:https://docs.starknet.io/architecture-and-concepts/network-archit…...
19.2 HTTP客户端-定制HTTP请求、调试HTTP、响应超时
1. 定制HTTP请求 如果需要对向服务器发送的HTTP请求做更多超越于默认设置的定制化。 client : http.Client{} 使用net/http包提供的导出类型Client,创建一个表示客户端的变量。request, err : http.NewRequest("GET", "https://ifconfig.io/ip&quo…...
KafkaQ - 好用的 Kafka Linux 命令行可视化工具
软件效果前瞻 ~ 鉴于并没有在网上找到比较好的linux平台的kafka可视化工具,今天为大家介绍一下自己开发的在 Linux 平台上使用的可视化工具KafkaQ 虽然简陋,主要可以实现下面的这些功能: 1)查看当前topic的分片数量和副本数量 …...
不愧是字节,图像算法面试真细致
这本面试宝典是一份专为大四、研三春招和研二暑假实习生准备的珍贵资料。 涵盖了图像算法领域的核心知识和常见面试题,包括卷积神经网络、实例分割算法、目标检测、图像处理等多个方面。不论你是初学者还是有经验的老手,都能从中找到实用的内容。 通过…...
14、C++中代码重用
1、C模板的主要作用是允许编写通用代码,即能够在不同数据类型或数据结构上工作而无需重复编写代码。通过模板,可以实现代码的复用性和灵活性,从而提高开发效率和程序的可维护性。 typename关键字: 在C中,typename关键…...
剖析框架代码结构的系统方法(下)
当面对Dubbo、Spring Cloud、Mybatis等开源框架时,我们可以采用一定的系统性的方法来快速把握它们的代码结构。这些系统方法包括对架构演进过程、核心执行流程、基础架构组成和可扩展性设计等维度的讨论。 在上一讲中,我们已经讨论了架构演进过程和核心执行流程这两个系统方法…...
C语言学习笔记之结构体(一)
目录 什么是结构体? 结构体的声明 结构体变量的定义和初始化 结构体成员的访问 结构体传参 什么是结构体? 在现实生活中的很多事物无法用单一类型的变量就能描述清楚,如:描述一个学生,需要姓名,年龄&a…...
MATLAB入门知识
目录 原教程链接:数学建模清风老师《MATLAB教程新手入门篇》https://www.bilibili.com/video/BV1dN4y1Q7Kt/ 前言 历史记录 脚本文件(.m) Matlab帮助系统 注释 ans pi inf无穷大 -inf负无穷大 i j虚数单位 eps浮点相对精度 0/&a…...
政府门户网站建设的意义/软文广告经典案例300字
1 引言上回说到自定义扩展的第一步,是需要声明行为的类型。也就是通过实现一个行为接口,实现接口中的方法来声明行为的类型。2 附件自定义行为到Operaiton或者是Endpoint实现自定义的行为,第二步就是将自定义的行为类挂(附加&…...
网站建设广东/网店seo
在使用Python中,import是非常非常常用的。 那它性能怎么样呢?今天就想测测Python的import性能。 首先,我这种测试,肯定不怎么准,充其量只能提供个参照,大家看看,就图一个乐呵吧。 ● linux下&…...
中国人寿寿险保险公司官方网站/关键词上首页软件
Android实现自动更新功能 Android自动更新的功能可以使用第三方的SDK来实现,但是类似友盟,就不支持x86手机的自动更新,科大讯飞,弹窗是全局的,小米手机就会默认把弹窗权限关掉不允许弹出提示框,还要用户手动…...
做的网站被挂马/手机免费建网站
Delphi APP 開發入門(十)REST Client 開發 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:3116 發表時間:2014/08/27tags: 行動開發 教學 App Delphi XE6 Android iOSDelphi APP 開…...
帝国cms如何做网站地图/西地那非片吃了能延时多久
版权声明:原创作品,谢绝转载!否则将追究法律责任。 一个Objective-c类定义了一个对象结合数据相关的行为。有时候,这使得他有意义的表达单个任务或者单元的行为。而不是集合的方法。 blocks是语言的特性,我们可以在C C…...
网页制作与网站建设宝典 第2版/seo优化网站词
功能 : 无需索引来访问数组元素和集合元素 String [] bookls {"你好", "黑哥", "笑一个呀"}; for(String book : books){System.out.println(book); }其中book将会自动跌送每个数组元素...