基于scikit-learn的机器学习分类任务实践——集成学习

一、传统机器学习分类流程与经典思想算法简述

        传统机器学习是指,利用线性代数、数理统计与优化算法等数学方式从设计获取的数据集中构建预测学习器,进而对未知数据分类或回归。其主要流程大致可分为七个部分,依次为设计获取数据特征集(特征构造和特征提取)、探索性地对数据质量分析评价、数据预处理、数据集划分、机器学习算法建模(学习器选择、特征筛选与参数调优)、任务选择(分类或回归)和精度评价与泛化性评估,设计获取数据特征集和机器学习算法建模是机器学习最为重要且关键的部分。

        传统机器学习的主要特征为需要人为设计定义数据特征并利用传统机器学习算法进行模型训练和通常受到数据量的限制。为缓解传统机器学习的大数据训练局限性,往往采用增量方式进行学习。常见的传统机器学习算法包括线性回归、逻辑回归、决策树、支持向量机、朴素贝叶斯、K最近邻等,而基于集成学习(模型融合、弱分类器集成和混合专家模型)、Bagging和Boosting思想又涌现出了随机森林、极端梯度提升和其它强大组合学习器等机器学习算法。

图一 传统机器学习通用流程图示

二、集成学习简述

1、集成学习定义[5]

        "模型集成"和"集成学习"是相同的概念。它们都指的是将多个机器学习模型组合在一起,以提高预测的准确性和稳定性的技术。通过结合多个模型的预测结果,集成学习可以减少单个模型的偏差和方差,并提供更可靠的预测结果。

2、集成学习的主要研究方向[7]

        模型融合模型融合在最初的时候被称为“分类器结合”,这个领域主要关注强评估器,试图设计出强大的规则来融合强分类器的结果,以获取更好的融合结果。这个领域的手段主要包括了投票法Voting、堆叠法Stacking、混合法Blending等,且被融合的模型需要是强分类器。

        弱分类器集成弱分类器集成主要专注于对传统机器学习算法的集成,这个领域覆盖了大部分我们熟悉的集成算法和集成手段,如装袋法bagging、提升法boosting。这个领域试图设计强大的集成算法,来将多个弱学习器提升为强学习器。

        混合专家模型(mixture of experts)混合专家模型常常出现在深度学习(神经网络)的领域。在其他集成领域当中,不同的学习器是针对同一任务、甚至在同一数据上进行训练,但在混合专家模型中,我们将一个复杂的任务拆解成几个相对简单且更小的子任务,然后针对不同的子任务训练个体学习器(专家),然后再结合这些个体学习器的结果得出最终的输出。

三、基于scikit-learn和XGBoost机器学习库的分类器构建

        scikit-learn机器学习库的运算均在CPU上实现且具有大数据量限制,而XGBoost库是GPU并行计算的工程实现库。XGBoost库可以实现在GPU上进行基于随机森林和极致梯度提升算法的分类训练任务。

1、决策树

# 决策树生成及训练
clf = tree.DecisionTreeClassifier(criterion="entropy"         #{"gini","entropy","log_loss"}不纯度计算方法#   ,random_state=4        #固定随机种子,从而可复现这棵决策树,max_depth=7              #{None,int}决策树可生长的最大深度,max_features=None          #{None,int,float,"sqrt","log2"}分枝时所参与考虑的最大特征个数,min_samples_leaf=1      #{1,int or float}分枝会向着满足每个子节点至少都包含设定值个样本的方向去发展,float[0,1]会作为比率乘以样本数,splitter = "best"       #{"best","random"} 每一个节点分裂的方法。“best”会优先选择更重要的特征进行分枝;“random”在分枝时更加随机,树会更深,min_impurity_decrease=0.0  #{0.0,float}若节点不纯度大于等于该值则必须再次进行节点分裂,max_leaf_nodes=None         #{None,int}设置决策树只能生长出的最大叶子节点数,class_weight=None        #{"None","balanced",dict {0:weight0,1:weight1,2:weight2,3:weight3} 以四分类为例,列表索引为类别标签#使用class_weight参数对样本标签进行一定均衡,给少量的标签更多的权重,调整损失函数,让模型更偏向少数类,向捕获少数类的方向建模,min_weight_fraction_leaf=0.0   #{0,0,float}min_weight_fraction_leaf搭配class_weight使用)
clf = clf.fit(Xtrain,Ytrain)

2、随机森林

# 基于scikit-learn实现随机森林分类器
clf = ensemble.RandomForestClassifier(n_estimators=50,random_state=0,criterion="gini",max_depth=8,max_features=None,min_impurity_decrease=0,min_samples_split=2,n_jobs=-1,bootstrap=True,oob_score=False)
clf = clf.fit(Xtrain,Ytrain)
# 基于XGBoost库实现随机森林分类器
RF_param = {"booster":"gbtree"              #随机森林必须设置为gbtree,"num_parallel_tree":40          #相当于n_estimators,即森林的树数量,"max_depth":8               ,"subsample": 0.8               #训练集采样,"eta":1                        #随机森林必须设置为1,"objective":"multi:softmax","num_class":7,"colsample_bytree":0.8         #{default=1,(0,1]}在建立提升树时对特征采样的比率,"colsample_bylevel":0.8       #{default=1,(0,1]}在树的每一层级所考虑的特征采样比率,"colsample_bynode":0.8         #{default=1,(0,1]}在树的每一节点需要分枝时所考虑的特征采样比率,"tree_method":"hist","device":"cuda","verbosity":0                 #在训练过程中不打印信息# "random_state":0               #为了随机森林模型可复现,可以添加该参数}
# 训练迭代次数
num_boost_round = 1            #随机森林必须设置为1,防止变为提升随机森林
RF_train = xgb.DMatrix(X,Y)
RF_bst_model = xgb.train(RF_param,RF_train,num_boost_round) 

3、极致梯度提升

hyper_param = { "booster":"dart"                 #提升方法选择{"gbtree","gblinear","dart"},default为gbtree,"objective":"multi:softmax"                #优化目标函数(可参考https://blog.csdn.net/weixin_41990278/article/details/90945550),"num_class":7                # 若"objective":"multi:softmax"则需要该参数搭配使用,以明确分类类别数,"max_depth":14                #(对模型影响起到重要作用),"gamma":0                    #{default=0}(gamma参数与max_depth相互影响)该参数表示在树的叶子节点上进一步再分枝所需的最小减少损失,"eta":0.4946027456790744          #{default=0.3}模型提升学习率,"subsample": 0.7322769765320624                #训练集的采样比例(即用于训练模型的子样本占整个样本集合的比例),"sampling_method":"uniform"   #{default=uniform},采样方式有uniform、subsample,gradient_based,"colsample_bytree":0.8296436370552397         #{default=1,(0,1]}在建立提升树时对特征采样的比率,"colsample_bylevel":0.9324152350516648        #{default=1,(0,1]}在树的每一层级所考虑的特征采样比率,"colsample_bynode":0.7855729164259361         #{default=1,(0,1]}在树的每一节点需要分枝时所考虑的特征采样比率,"lambda":0.00021262200589351114                   #{default=1}权重的L2正则项,"alpha":3.481194252535334e-06                    #{default=1}权重的L1正则项,"tree_method":"auto"           #{default=auto}构造树的方法,{exact,approx,hist(auto)},"max_leaves":0                 #{default=0}树的最大叶子节点数量,不可用于tree method = exact,"device":"cuda"             #(缩短运算时间)将验证训练放置于GPU上训练,"nthread":-1                   #运行训练器的并行线程数(本机满线程则设置为-1)# ,"scale_pos_weight":1          #{default=1}控制正负样本比例,用于数量不平衡数据集# ,"grow_policy":"depthwise"      #{default=depthwise,lossguide}控制节点生长的方式,须在tree method = hist or approx下使用# ,"seed":0             #可复现模型的参数,随机种子# ,"num_parallel_tree":1         # 每一次训练迭代所构建的树的数量# ,"verbosity":0                #[0,3]训练中是否打印每次训练的信息.(0-不打印;1-warning;2-info,3-debug)}# 开始训练
xy_train = xgb.DMatrix(X,Y)
num_boost_round = 70
bst_model = xgb.train(hyper_param,xy_train,num_boost_round)

API使用文档:

/*1*/ API reference — pandas 2.2.2 documentation

/*2*/ NumPy reference — NumPy v1.26 Manual

/*3*/ API Reference — scikit-learn 1.5.0 documentation

/*4*/ XGBoost Tutorials — xgboost 2.0.3 documentation(GPU计算并行化工程库)

/*5*/ API Reference — Optuna 3.6.1 documentation(超参数优化)

/*6*/ PhiK — Phi_K correlation library documentation(PhiK相关系数计算,适用类别标签和间隔变量)

参考资料:

[1] (超爽中英!) 2024公认最好的【吴恩达机器学习】教程!附课件代码 Machine Learning Specialization_哔哩哔哩_bilibili

[2] 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结

[3] HF.048 I Nature帮你整理了最核心的统计概念和方法,你确定不看看吗?(二)

[4] 突破机器学习核心点,特征工程!! (qq.com)

[5] 【机器学习】集成模型/集成学习:多个模型相结合实现更好的预测-腾讯云开发者社区-腾讯云 (tencent.com)

[6] 随机森林Python实战_哔哩哔哩_bilibili

[7] 【技术干货】集成算法专题:XGBoost(2022新版)_哔哩哔哩_bilibili

[8] 综述:机器学习中的模型评价、模型选择与算法选择! (qq.com)

[9] 机器学习8大调参技巧! (qq.com)

[10] 机器学习中7种常用的线性降维技术总结 (qq.com)

参考论文:

/**1**/ https://dl.acm.org/doi/pdf/10.1145/2939672.2939785(XGBoost)

/**2**/ https://link.springer.com/content/pdf/10.1023/a:1010933404324.pdf

/**3**/ http://www.cs.ecu.edu/~dingq/CSCI6905/readings/BaggingBoosting.pdf

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

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

相关文章

【C++】stack、queue和deque的使用

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读 一、stack 1. stack介绍 2. stack使用 二、queue 1. queue介绍 2. queue使用 三、deque 1. deque介绍 2. deque的…

【Pandas驯化-01】一文介绍 Pandas中的Dataframe和Series 区别

【Pandas】驯化-01一文介绍 Pandas中的Dataframe和Series 区别 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 相关内容文档获取 微信公众…

第九届星华杯网络邀请赛

T1喵星人的身高 T2犇犇碑 T3嘤嘤词典 T4三角区间和

简单Mesh多线程合并,使用什么库性能更高

1)简单Mesh多线程合并,使用什么库性能更高 2)Unity Semaphore.WaitForSignal耗时高 3)VS编辑的C#代码注释的中文部分乱码 4)变量IntPtr m_cachePtr切换线程后变空 这是第389篇UWA技术知识分享的推送,精选了…

HBase中Master初始化错误~

ERROR:org.apache.hadoop.hbase.PleaseHoldException:Master is initializing 1、停止HBase运行 2、启动zookeeper中的zkCli.sh服务 ./zookeeper/bin/zkCli.sh 3、执行完毕显示以下结果,删除habse文件夹 4、重新启动HBase即可。

python-02

面向对象 Python中把具有相同属性和方法的对象归为一个类。 class ClassName: 语句 class Myclass: # 定义类Myclassdef pp(self): # 定义方法pp()print("这是产品说明书")myclass Myclass() # 实例化类Myclass myclass.pp() # 调用Myclass中的方法pp()打印…

《幻影大师:透视缠中说禅的虚像与真相》

而且他从不犯错,至少在他的叙述中是这样,所有的文章和言论都被粉饰得完美无瑕,即便有误,他也绝不公开承认,更别提什么真诚的道歉和改正了。那些对他推崇备至的人,多是盲目追随,将他神化为无所不…

《Nest系列 - 1. 运行一个Nest项目以及整体目录学习》

初识Nest心路历程 作为一名前端开发,说实话,学习Nest后端技术, 会有一定的成本。我试着阅读文档,安装项目,把项目跑起来, 当我看到久违的Hellow world 后,还来不及欣喜,就困惑了, 作为一个后端…

Java的集合框架总结

Map接口和Collection接口是所有集合框架的父接口: Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有:HashSet、Tr…

大数据实训项目(小麦种子)-03、大数据环境Hadoop、Mapreduce、Hive、Hbase、HDFS搭建服务及调试

文章目录 前言一、Linux系统Centos7安装配置JDK8二、Linxu系统Centos7中搭建Hadoop3.1.0服务下载地址服务1:详细步骤(初始化与启动dfs服务)详细步骤配置环境变量 服务2:Hadoop(YARN)环境搭建 三、Linux系统搭建Hive3.1.2服务前提条…

记录AE快捷键(持续补充中。。。)

记录AE快捷键 快捷键常用快捷键图层快捷键工具栏图层与属性常用指令视图菜单时间轴常规快捷键项目首选项功能摄像机操作 常用操作导入AI/PS工程文件加选一个关键参数快速回到上下一帧隐藏/显示图层关键帧拉长缩短关键帧按着鼠标左键不松手,在秒表那一列往下移动会都…

深度学习(PyTorch)批注理解,建议边学可以边看这个笔记

前言 动手学习深度学习,内容丰富,但是对于初学者有很多晦涩难懂的地方,我将日常更新这篇文章以截图的形式,每天高强度学习四五个小时,精力缺乏,我认为,如果想学习这个深度学习,你需…

ubuntu vnc

如何在Ubuntu 18.04安装VNC | myfreax sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils sudo apt install tigervnc-standalone-server tigervnc-common vncserver sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils sudo apt ins…

5.数据仓库与数据挖掘期末复习

ETL的含义Extract 、 Transformation、Load。ODS的全称Operational Data Store。 DW全称 Data WarehourseDM全称是Data Mart数据仓库数据抽取时所用到技术是增量、全量、定时、调度STAGE层作用是提供业务系统数据文件的临时存储ODS层作用ods提供业务系统细节数据长期沉淀MID层…

实用软件下载:BetterZip 5最新安装包及详细安装教程

BetterZip是一款功能强大的Mac解/压缩软件,可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍,以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-安…

057、PyCharm 运行代码报错:Error Please select a valid Python interpreter

当我们在PyCharm运行代码时,提示如下图错误: 那么问题通常是由于PyCharm未正确配置Python解释器引起的。 我们只需按以下步骤重新配置Python解释器即可: 打开PyCharm设置: 在菜单栏中的点击 “File” -> “Settings”&#xf…

选择性语言建模:下一代语言模型训练方法

在人工智能领域,语言模型的预训练方法一直是研究的热点。传统的语言模型预训练方法普遍采用一种均匀的策略,即对所有训练数据中的下一个词进行预测,这种方法被称为因果语言建模(Causal Language Modeling, CLM)。虽然C…

Nginx配置详细解释:(6)实现反向代理服务器,动静分离,负载均衡

目录 单台反向代理 proxy_pass后面加不加/的问题: 反向代理动静分离 反向代理负载均衡 作为代理服务器是当客户端访问代理服务器时,代理服务器代理客户端去访问真实web服务器。proxy_pass; 用来设置将客户端请求转发给的后端服务器的主机。 需要模块…

Android入门第69天-AndroidStudio中的Gradle使用国内镜像最强教程

背景 AndroidStudio默认连接的是dl.google的gadle仓库。 每次重新build时: 下载速度慢;等待了半天总时build faild;build到一半connection timeout;即使使用了魔法也难以一次build好;这严重影响了我们的学习、开发效率。 当前网络上的使用国内镜像的教程不全 网上的教程…

C++100行超简单系统

非常好用&#xff0c;小白也可以自己修改 先来看图片&#xff1a; 用法附在代码里了&#xff01; #include <bits/stdc.h> #include <windows.h>using namespace std;struct users {string name;string num; bool f; } u[10000];int now_users 0; /*当前用户数*…