AI - 集成学习

目录

集成学习概念

集成学习器性能评估 

随机森林 

AdaBoost 


😆😆😆感谢大家的阅读😆😆😆

集成学习概念

💎集成学习是机器学习中的一种思想,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型成为弱学习器(基学习器)。训练时,使用训练集依次训练出这些弱学习器,对未知的样本进行预测时,使用这些弱学习器联合进行预测。

 

  • 集成学习通过构建多个模型来解决单一预测问题
  • 生成多基学习器,各自独立地学习和预测
  • 通过平权或者加权的方式,整合多个基学习器的预测输出 

传统机器学习算法 (例如:决策树,逻辑回归等) 的目标都是寻找一个最优分类器尽可能的将训练数据分开。集成学习 (Ensemble Learning) 算法的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。

集成算法可以分为:Bagging,Boosting和Stacking等类型。 

基学习器是可使用不同的学习模型,比如:支持向量机、神经网络、决策树整合到一起作为一个集成学习系统也可使用相同的学习模型,一般情况下,更使用相同的学习模型 。

集成学习器性能评估 

如果把好坏不等的东西掺到一起,通常结果会比最坏的好一些,比最好的坏一些。集成学习把多个学习器结合起来,要获得好的集成,个体学习器应有一定的准确性 ,学习器不能太坏,并且学习器之间具有差异 。 

常用的度量标准包括准确率、精确率、召回率、F1分数、ROC曲线下的面积(AUC)等。并且可以使用交叉验证等技术来选择最优的模型,根据性能评估的结果,可以调整集成学习器的参数,如基学习器的数量、投票策略等,以优化其性能。这是一个迭代的过程,可能需要多次重复以上步骤,直到达到满意的性能。

根据集成分类策略

  • Bagging(随机森林)
  • Boosting (Adaboost、XGBoost)

Baggging 框架通过有放回的抽样产生不同的训练集,从而训练具有差异性的弱学习器,然后通过平权投票、多数表决的方式决定预测结果。 

 

Bagging算法首先采用M轮自助采样法,获得M个包含N个训练样本的采样集。然后,基于这些采样集训练出一个基学习器。最后将这M个基学习器进行组合。

  • 分类任务采用简单投票法:即每个基学习器一票

  • 回归问题使用简单平均法:即每个基学习器的预测值取平均值

随机森林 

💎随机森林是基于 Bagging 思想实现的一种集成学习算法,它采用决策树模型作为每一个基学习器。

  1. 有放回的产生训练样本
  2. 随机挑选 n 个特征(n 小于总特征数量)
  3. 预测:平权投票,多数表决输出预测结果

 

单个决策树在产生样本集和确定特征后,使用CART算法计算,不剪枝。得到所需数目的决策树后,随机森林方法对这些树的输出进行投票,以得票最多的类作为随机森林的决策。 

随机森林的随机性体现在每棵树的训练样本是随机的,树中每个节点的分裂属性也是随机选择的。即使每棵决策树没有进行剪枝,随机森林也不会产生过拟合的现象。 

sklearn.ensemble.RandomForestClassifier() 

  • n_estimators:决策树数量
  • Criterion:entropy、gini 
  • max_depth:指定树的最大深度
  • max_features="auto”, 决策树构建时使用的最大特征数量
  • bootstrap:是否采用有放回抽样,如果为 False 将会使用全部训练样本
  • min_impurity_split: 节点划分最小不纯度,如果某节点的不纯度小于这个阈值,则该节点不再生成子节点

Sklearn实战💎 

import pandas as pdtitanic=pd.read_csv("泰坦尼克号.csv")
X=titanic[['Pclass','Age','Sex']]
y=titanic['Survived']
#数据的填补
X['Age'].fillna(X['Age'].mean(),inplace=True)
X = pd.get_dummies(X)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test =train_test_split(X,y,test_size=0.25,random_state=26)#使用单一的决策树
from sklearn.tree import DecisionTreeClassifier
dtc=DecisionTreeClassifier()
dtc.fit(X_train,y_train)
dtc_y_pred=dtc.predict(X_test)
dtc.score(X_test,y_test)#随机森林进行模型的训练和预测分析
from sklearn.ensemble import RandomForestClassifier
rfc=RandomForestClassifier(max_depth=6,random_state=9)
rfc.fit(X_train,y_train)
rfc_y_pred=rfc.predict(X_test)
rfc.score(X_test,y_test)#性能
from sklearn.metrics import classification_report
print("dtc_report:",classification_report(dtc_y_pred,y_test))
print("rfc_report:",classification_report(rfc_y_pred,y_test))

超参数选择

rf = RandomForestClassifier()
param={"n_estimators":[80,100,200], "max_depth": [2,4,6,8,10,12],"random_state":[9]}# GridSearchCV网格搜索
from sklearn.model_selection import GridSearchCV
gc = GridSearchCV(rf, param_grid=param, cv=2)
gc.fit(X_train, y_train)
print("随机森林预测的准确率为:", gc.score(X_test, y_test))

Boosting

Boosting的核心思想在于逐步改进预测结果,每个新的基模型都在前一个模型的基础上进一步提升性能。这种方法是递进的,意味着后续的学习器依赖于前面学习器的表现。Boosting方法通常会对所有基模型的预测结果进行线性组合,以产生最终的预测结果。这种组合方式有助于减少整体的偏差,从而提高模型的预测性能。 

💎Bagging 和 Boosting

  • 样本选择:Bagging 使用均匀取样,每个样本的权重相等,而 Boosting 根据错误率不断调整样本的权值,错误率越大的样本权重越大。
  • 预测函数:在 Bagging 中,所有预测函数的权重相等,而 Boosting 中每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
  • 计算效率:Bagging 算法更加简单高效,因为每次迭代可以独立进行,而 Boosting 需要根据前一轮的结果来调整样本的权重和训练模型。

 

  • 先从初始训练集训练出一个基学习器
  • 在根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到最大的关注。
  • 然后基于调整后的样本分布来训练下一个基学习器;
  • 如此重复进行,直至基学习器数目达到实现指定的值T为止。
  • 再将这T个基学习器进行加权结合得到集成学习器。

 

 然后进行第二轮训练时预测错误的样品放大,正确的缩小。

直到循环几轮之后:

 

AdaBoost 

AdaBoost是Boosting算法的一种实现,是一种用于分类问题的算法,它用弱分类器的线性组合来构造强分类器。在训练开始时,每个样本都被赋予相同的权值,例如 ( w_1 = \frac{1}{N} ),其中 ( N ) 是训练样本的数量。

  • 接着,算法会训练一系列的弱分类器 ( h_i )。对于每一轮训练,如果某个样本被正确分类,则它的权值会降低;反之,如果被错误分类,则权值会增加。这样做的目的是让后续的弱分类器更加关注那些难以正确分类的样本。 
  • 在每一轮迭代中,根据上一轮的分类结果调整样本权值,并基于新的权值分布训练下一个弱分类器。
  • 最终,所有的弱分类器会被组合起来形成一个强分类器。每个弱分类器的贡献由其在训练过程中的表现决定,分类效果好的弱分类器会有更大的权重。

AdaBoost自提出以来,因其出色的性能在多个领域得到了广泛应用,如文本分类、图像识别和生物信息学等。它的优势在于能够自适应地调整样本权重,并通过弱分类器的线性组合达到强化模型性能的目的。 

import pandas as pd
df_wine = pd.read_csv('wine.data')df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols',
'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines',
'Proline']
df_wine = df_wine[df_wine['Class label'] != 1]
# 获取特征值和目标值
X = df_wine[['Alcohol', 'Hue']].values
y = df_wine['Class label'].valuesfrom sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
# (2,3)=>(0,1)
le = LabelEncoder()
y = le.fit_transform(y)
# 划分训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.4,random_state=1)from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifiertree = DecisionTreeClassifier(criterion='entropy',max_depth=1,random_state=0)
ada=AdaBoostClassifier(base_estimator=tree,n_estimators=500,learning_rate=0.1,random_state=0)from sklearn.metrics import accuracy_score
# 决策树和AdaBoost分类器评估
# 决策树性能评估
tree = tree.fit(X_train,y_train)
y_train_pred = tree.predict(X_train)
y_test_pred = tree.predict(X_test)
tree_train = accuracy_score(y_train,y_train_pred)
tree_test = accuracy_score(y_test,y_test_pred)
print('Decision tree train/test accuracies %.3f/%.3f' % (tree_train,tree_test))
# Decision tree train/test accuracies 0.845/0.854# AdaBoost性能评估
ada = ada.fit(X_train,y_train)
y_train_pred = ada.predict(X_train)
y_test_pred = ada.predict(X_test)
ada_train = accuracy_score(y_train,y_train_pred)
ada_test = accuracy_score(y_test,y_test_pred)
print('Adaboost train/test accuracies %.3f/%.3f' % (ada_train,ada_test))
# Adaboost train/test accuracies 1/0.875 

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

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

相关文章

C语言经典面试题目(十四)

1、C语言中的异常处理机制有哪些?如何使用try-catch块进行异常处理? 在C语言中并没有内置的try-catch块来处理异常。异常处理通常是通过函数返回值或者全局变量来实现的。以下是一些常见的异常处理方式: 返回错误码:函数返回一个…

老卫带你学---vscode使用remote-ssh时出现Could not establish connection to XXX: XHR failed

vscode使用remote-ssh时出现Could not establish connection to XXX: XHR failed 这种情况大部分都是本地升级/降级vscode版本,并且各种卸载安装,导致远端服务器的配置出了问题 直接ssh登录到远端服务器上 然后直接删除之前的remote ssh的相关commit …

BUUCTF-----[CISCN 2019 初赛]Love Math

<?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("太长了不会算");}$blacklist [ , \t, \r, \n…

由于找不到kvpvbsext64.dll,无法继续执行代码。解决办法,

kvpvbsext64.dll 是一个动态链接库文件&#xff0c;通常作为某个软件的一部分存在。具体来说&#xff0c;它可能为某个程序的特定功能提供支持&#xff0c;在软件运行时被调用和使用。因此&#xff0c;当出现与该文件相关的错误时&#xff0c;可能会影响到相应软件的正常运行。…

c++复数计算器

定制魏:QTWZPW,获取更多源码等 目录 题目 目的 要求 涉及的知识 类声明 构造函数 核心算法实现代码 总体设计 运行效果 总结 完整代码 题目 为复数定义一个类。复数的形式 a+bi 其中,a和b是double类型的数字,而i表示虚数单位√-1。将复数表示成double类型的两…

k8s集群部署elk

一、前言 本次部署elk所有的服务都部署在k8s集群中&#xff0c;服务包含filebeat、logstash、elasticsearch、kibana&#xff0c;其中elasticsearch使用集群的方式部署&#xff0c;所有服务都是用7.17.10版本 二、部署 部署elasticsearch集群 部署elasticsearch集群需要先优化…

【ZooKeeper】1、基本介绍

本文基于 Apache ZooKeeper Release 3.7.0 版本书写 作于 2022年3月6日 14:22:11 转载请声明 1、Zookeeper是什么&#xff1f; 由ZooKeeper的官网介绍可知&#xff1a; ZooKeeper 是Apache原子基金会下一个开源的、用于提供可靠的分布式协同的服务器。 ZooKeeper 可以用来 配置…

此站点的连接不安全,怎么解决?

有部分的网站用户在打开的时候会被提示“此站点的连接不安全”这种现象为什么会出现&#xff0c;大概率是因为没有安装SSL证书或者SSL证书出现了错误&#xff0c;小编在这里面将展开讲解为大家分析其中的原因以及解决方法。 一&#xff1a;遇到该情况的时候该怎么办&#xff1…

使用 C 或 C++ 扩展 Python

如果你会用 C&#xff0c;添加新的 Python 内置模块会很简单。以下两件不能用 Python 直接做的事&#xff0c;可以通过 extension modules 来实现&#xff1a;实现新的内置对象类型&#xff1b;调用 C 的库函数和系统调用。 为了支持扩展&#xff0c;Python API&#xff08;应…

7-LINUX--库文件的生成与使用

一.什么是库文件 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在&#xff1a;/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。 库有两种&#xff0c;一种是静态库&#x…

计算机网络——物理层(物理传输介质和物理层的设备)

计算机网络——物理层&#xff08;物理传输介质和物理层的设备 物理传输介质导向性传输介质双绞线同轴电缆光纤 非导向性传输介质无线电波多径效应 微波地面微波通信ISM 频段 卫星通信 物理层设备中继器集线器中继器和集线器的区别 我们今天进入物理层的物理传输介质和物理层的…

AI将如何影响我们的生活?

1. AI 会如何影响你的生活 通用聊天场景&#xff1a;也即 ChatGPT 本身&#xff0c;或者用 gpt-3.5 的 api 实现的各类网站或小程序。他们没有明确的问题场景&#xff0c;但反而可以解决非常多的问题&#xff0c;比如搜索一些常见问题的答案、编个笑话等&#xff0c;可以当个搜…

PHP7 用 Exception catch不到error,Throwable 才可以

Throwable work on PHP 7.x. Exception work on PHP 5.x. 参考链接&#xff1a; https://www.php.net/manual/en/language.errors.php7.php ​<?phptry {// Code that may throw an Exception or Error.} catch (Throwable $t) {// Executed only in PHP 7, will not m…

linux常用命令指南

什么是Linux命令&#xff1f; Linux命令是在Linux操作系统中用于执行特定任务的命令行工具。它们被用于管理文件和目录、执行程序、配置系统设置等。Linux命令通常由一个命令名称和一些选项或参数组成&#xff0c;并且可以通过命令行界面&#xff08;CLI&#xff09;或脚本文件…

【Pandas】(1)安装与Series

Pandas是一个开源的Python数据分析库,提供了高性能、易于使用的数据结构和数据分析工具。它是基于NumPy库构建的,使得数据预处理、清洗、分析变得更加快速和简单。Pandas主要有两种类型的数据结构:Series(一维数组)和DataFrame(二维表格)。 注意:和Numpy相比,Pands的计…

图片上传语法

图片上传 步骤 <!-- 文件选择元素 --><input type"file" class"upload"><br><!-- 上传的图片出于安全不能使用url使用&#xff0c;智能做背景使用 --><img src"" alt""><script src"https://c…

图论02-并查集的实现(Java)

2.并查集理论基础 并查集的作用 将两个元素添加到一个集合中。 判断两个元素在不在同一个集合并查集的实现 1.DSU 类定义&#xff1a;DSU 类中包含一个整型数组 s 用来存储元素的父节点信息。2.DSU 构造函数&#xff1a; 构造函数 DSU(int size) 接受一个参数 size&#xff0…

【前端】国际化实现过程

过程 安装依赖&#xff0c;配置&#xff0c;当点击中英文切换按钮时候&#xff0c;全局变换&#xff0c;element-plus组件也需要中英文切换。 确定初始化的语言在setting中&#xff0c;页面加载会读取里面的语言走一次语言的初始化配置&#xff0c;后面就是按钮切换 代码 仅…

欧拉角与横滚-俯仰-偏航角(RPY)

围绕欧拉角和横滚-俯仰-偏航角这两个术语存在很多混淆。这源于教科书和论文中截然不同的、看似权威的定义。 欧拉旋转定理&#xff08;1775 年&#xff09;指出&#xff0c;一个 3D 坐标系相对于另一个坐标系的方向可以用“围绕三个轴的连续旋转来描述&#xff0c;因此没有两个…

泰迪智能科技携手华北电力大学理学院共建“校外实践基地”

3月15日&#xff0c;华北电力大学数理学院教学副主任史会峰、科研副主任王涛、概率教研室副主任解西阳莅临泰迪智能科技产教融合实训基地开展“华北电力大学校外实践教学基地”签约揭牌仪式。泰迪智能科技董事长张良均、支持中心负责人王宏刚、外联部吴桂锋进行接待。 活动伊始…