R统计实战:详解机器学习Adaboost的操作步骤与应用

一、引言

机器学习是人工智能的核心领域之一,其重要性体现在其能够从数据中自动学习并改进的能力上。在实际问题中,机器学习已经被广泛应用于各个领域,包括但不限于金融、医疗、电子商务、社交网络等。例如,在金融领域,机器学习被用于风险评估、交易预测等;在医疗领域,机器学习可用于疾病诊断、药物研发等。这些应用不仅提高了工作效率,还为决策提供了数据支持,促进了各行业的发展与进步。

本文将探讨两个在机器学习领域中备受关注的主题:Adaboost。Adaboost是一种集成学习算法,通过组合多个弱分类器来构建一个强分类器,具有很高的预测准确性和泛化能力。本文旨在帮助读者更好地理解和应用机器学习技术,从而在实际问题中取得更好的应用效果。

二、Adaboost算法的介绍

2.1 Adaboost基本原理和工作方式

Adaboost(Adaptive Boosting)是一种集成学习算法,通过串行训练多个弱分类器并将它们组合成一个强分类器。其基本原理如下:

  1. 初始化权重:给每个训练样本赋予相等的权重
  2. 迭代训练:对于每一轮迭代:
    • 使用当前样本权重训练一个弱分类器(例如,决策树、支持向量机等)
    • 计算弱分类器的错误率以及其在总体分类中的权重
    • 更新样本权重,增加被错误分类的样本的权重,减少被正确分类的样本的权重
  3. 组合弱分类器:根据每个弱分类器的权重,将它们组合成一个强分类器。
  4. 输出结果:通过组合的强分类器进行预测。

Adaboost的核心思想是每一轮迭代都关注被前一轮分类错误的样本,通过提高它们的权重来改进分类器。这种逐步迭代的方式能够聚焦于难以分类的样本,最终构建出一个在整个数据集上表现很好的强分类器。

2.2 Adaboost的优缺点以及适用场景

  1. 「优点」
    • Adaboost能够在相对简单的弱分类器基础上构建出高准确率的强分类器。
    • 对于处理大量数据集和高维特征的问题,Adaboost表现出色。
    • 由于每个弱分类器的权重与其性能相关,Adaboost对于异常值和噪声数据具有一定的鲁棒性。
  2. 「缺点」
    • Adaboost对噪声数据和过拟合敏感,容易受到异常值的影响。
    • 对于数据分布不均匀或存在类别不平衡的情况,Adaboost的效果可能不佳。
    • 训练过程中每一轮都需要重新计算样本权重,计算量较大。
  3. 「适用场景」
    • 二分类或多分类问题中,适用于处理大规模数据集和高维特征。
    • 数据集相对均匀,类别平衡或能够通过数据重采样等方式处理类别不平衡问题时。
    • 适用于需要较高分类准确率的应用场景,如人脸识别、文本分类等。

Adaboost是一种强大的分类器,但在实际应用中需要考虑数据质量、异常值处理等因素,以充分发挥其优势。

三、Adaboost操作步骤

  1. 数据准备
    • 加载数据集
    • 数据预处理和特征工程
  2. 模型训练
    • 使用adabag包中的adaboost函数训练Adaboost模型
    • 设置参数并进行模型训练
  3. 模型评估
    • 对模型进行交叉验证或者使用测试集进行评估
    • 分析模型的性能指标,如准确率、召回率等
  4. 模型优化与调参
    • 调整参数以优化模型性能
    • 使用网格搜索或其他方法进行参数调优

四、示例演示

  • 「数据集准备」
library(survival)
head(gbsg)

结果展示:

   pid age meno size grade nodes pgr er hormon rfstime status
1  132  49    0   18     2     2   0  0      0    1838      0
2 1575  55    1   20     3    16   0  0      0     403      1
3 1140  56    1   40     3     3   0  0      0    1603      0
4  769  45    0   25     3     1   0  4      0     177      0
5  130  65    1   30     2     5   0 36      1    1855      0
6 1642  48    0   52     2    11   0  0      0     842      1
  • 「示例数据集介绍」
> str(gbsg)
'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1"1 2 1 1 1 2 2 1 2 2 ...

age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 「划分训练集和测试集」
# 划分训练集和测试集
data <- gbsg[,c(-1)]

library(h2o)

h2o.init()
# 转换成h2o需要的数据格式
data <- as.h2o(data)
data$status <- h2o.asfactor(data$status)
data$meno <- h2o.asfactor(data$meno)
data$grade <- h2o.asfactor(data$grade)
data$hormon <- h2o.asfactor(data$hormon)

y <- "status"
x <- setdiff(names(data),y)

# 划分数据集为训练集和测试集
splits <- h2o.splitFrame(data, ratios = c(0.650.3), seed = 123)
train <- splits[[1]]
test <- splits[[2]]
  • 「模型拟合」
adaboost_model <- h2o.adaBoost(nlearners=50,
                               learn_rate = 0.5,
                               weak_learner = "DRF",
                               x = x,
                               y = y,
                               training_frame = train)
# 预测
pred <- h2o.predict(adaboost_model, train)

结果展示:

> h2o.predict(adaboost_model, train)
|===================================================================| 100%
  predict        p0        p1
1       0 0.8945913 0.1054087
2       1 0.1208220 0.8791780
3       0 0.6866856 0.3133144
4       0 0.7532780 0.2467220
5       1 0.1807224 0.8192776
6       1 0.2444292 0.7555708

[434 rows x 3 columns] 

  • 「模型评估」
perf <- h2o.performance(adaboost_model, test)
perf

h2o.auc(perf)
plot(perf)

结果展示:

H2OBinomialMetrics: adaboost

MSE:  0.2061091
RMSE:  0.4539924
LogLoss:  0.6077034
Mean Per-Class Error:  0.2895257
AUC:  0.7400362
AUCPR:  0.6404273
Gini:  0.4800725

Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
         0   1    Error     Rate
0       90  42 0.318182  =42/132
1       24  68 0.260870   =24/92
Totals 114 110 0.294643  =66/224

Maximum Metrics: Maximum metrics at their respective thresholds
                        metric threshold      value idx
1                       max f1  0.349462   0.673267  92
2                       max f2  0.072062   0.798246 174
3                 max f0point5  0.465848   0.651709  79
4                 max accuracy  0.465848   0.714286  79
5                max precision  0.951895   1.000000   0
6                   max recall  0.039011   1.000000 189
7              max specificity  0.951895   1.000000   0
8             max absolute_mcc  0.349462   0.414249  92
9   max min_per_class_accuracy  0.385054   0.695652  86
10 max mean_per_class_accuracy  0.349462   0.710474  92
11                     max tns  0.951895 132.000000   0
12                     max fns  0.951895  91.000000   0
13                     max fps  0.022880 132.000000 194
14                     max tps  0.039011  92.000000 189
15                     max tnr  0.951895   1.000000   0
16                     max fnr  0.951895   0.989130   0
17                     max fpr  0.022880   1.000000 194
18                     max tpr  0.039011   1.000000 189

Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

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

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

相关文章

spark shuffle 补充概念

spark shuffle 我们在前面的文章说过&#xff0c;所谓shuffle&#xff0c;就是spark RDD的一种宽依赖关系&#xff0c;父RDD的数据会发送给多个子RDD spark中Map和Reduce概念 在Shuffle过程中.提供数据的称之为Map端(Shuffle Write)接收数据的称之为Reduce端(Shuffle Read)&…

使用Excel连接Azure DevOps自动退出的问题

Azure DevOps Server (原名TFS)是微软公司的软件开发管理平台&#xff0c;也是著名的软件开发过程管理工具&#xff1b;系统中记录了软件开发过程中的需求、问题、缺陷和迭代计划等各种软件开发工作项数据。 对于工作项数据的批量操作(例如新增和编辑)&#xff0c;Excel是一个非…

springcloud基本使用五(Gateway服务网关)

为什么使用网关&#xff1f; 权限控制&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否有请求资格&#xff0c;如果没有则进行拦截。 路由和负载均衡&#xff1a;一切请求都必须先经过gateway&#xff0c;但网关不处理业务&#xff0c;而是根据某种规则&#xff…

【Python面试题收录】Python的可变对象与不可变对象

一、可变对象与不可变对象的定义 在Python中&#xff0c;对象的可变性是指对象的内部状态&#xff08;值&#xff09;是否允许在对象创建后发生改变。根据这一特性&#xff0c;Python的数据类型可以分为两大类&#xff1a;可变对象&#xff08;mutable objects&#xff09;和不…

某音乐平台歌曲信息逆向之webpack扣取

逆向网址 aHR0cHM6Ly95LnFxLmNvbS8 逆向链接 aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvc29uZ0RldGFpbC8wMDJkdzRndjFabWlHdA 逆向接口 aHR0cHM6Ly91Ni55LnFxLmNvbS9jZ2ktYmluL211c2ljcy5mY2c 逆向过程 请求方式&#xff1a;POST 逆向参数 sign zzbd8c72309rdslvlnjwk8pthj2lw462f12…

Linux系统---进程间通信与管道入门

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、进程间通信 1.进程间通信的目的 1.数据传输&#xff1a;一个进程需要把他的数据传给另外一个进程。 2.资源共享&…

el-table实现表格内部横向拖拽效果

2024.4.2今天我学习了如何对el-table表格组件实现内部横向拖拽的效果&#xff0c;效果&#xff1a; 代码如下&#xff1a; 一、创建utils/底下文件 const crosswise_drag_table function (Vue){// 全局添加table左右拖动效果的指令Vue.directive(tableMove, {bind: function…

IMU参数辨识及标定

IMU参数辨识及标定 一、标定参数分析 标定的本质是参数辨识。首先明确哪些参数可辨识&#xff0c;其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 IMU需要标定的参数主要是确定性误差和随机误差&#xff0c;确定性误差主要标定bias&#xff0…

Python 之 Flask 框架学习

毕业那会使用过这个轻量级的框架&#xff0c;最近再来回看一下&#xff0c;依赖相关的就不多说了&#xff0c;直接从例子开始。下面示例中的 html 模板&#xff0c;千万记得要放到 templates 目录下。 Flask基础示例 hello world from flask import Flask, jsonify, url_fora…

STM32H5 读取温度传感器校准值时进 HardFault 的原因分析

1.前言 有客户反馈&#xff0c;在使用 STM32H5 读取温度传感器校准值地址时&#xff0c;会进入 HardFault&#xff0c;而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题&#xff0c;发现只有开启 ICACHE 后才会复现&#xff0c;初步验证…

图像处理与视觉感知---期末复习重点(6)

文章目录 一、图像分割二、间断检测2.1 概述2.2 点检测2.3 线检测2.4 边缘检测 三、边缘连接3.1 概述3.2 Hough变换3.3 例子3.4 Hough变换的具体步骤3.5 Hough变换的法线表示形式3.6 Hough变换的扩展 四、阈值处理4.1 概述4.2 计算基本全局阈值算法4.3 自适应阈值 五、基于区域…

ElementUI 表格横向滚动条时滚动到指定位置

ElementUI 表格横向滚动条时滚动到指定位置 getColumnOffset(columnProp) {this.$nextTick(() > {const table this.$refs.tableRef.$refs.multipleTable;const columns table.columns;const column columns.find((col) > col.property columnProp);if (column) {// …

Flume学习笔记

视频地址:https://www.bilibili.com/video/BV1wf4y1G7EQ/ 定义 Flume是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。 Flume高最要的作用就是实时读取服务器本地磁盘的数据,将数据写入HDFS。 官网:https://flume.apache.org/releases/content/1.9.0/…

Python PDF页面设置 -- 旋转页面、调整页面顺序

在将纸质文档扫描成PDF电子文档时&#xff0c;有时可能会出现页面方向翻转或者页面顺序混乱的情况。为了确保更好地浏览和查看PDF文件&#xff0c;本文将分享一个使用Python来旋转PDF页面或者调整PDF页面顺序的解决方案。 目录 使用Python旋转PDF页面 使用Python调整PDF页面…

【Redis 知识储备】单机架构 -- 分布系统的演进(1)

单机架构 1. 概念2. 单机架构的优点3. 单机架构的问题4. 单机架构问题的解决思路 1. 概念 单机架构, 只有一台服务器, 这个服务器负责所有的工作 初期&#xff0c;我们需要利⽤我们精⼲的技术团队&#xff0c;快速将业务系统投⼊市场进⾏检验&#xff0c;并且可以迅速响应变化…

【攻防世界】warmup (代码审计)

进入题目环境&#xff0c;只有一个表情&#xff1a; ctrl u 查看源代码&#xff1a; 源代码提示我们访问 /source.php。访问结果如下&#xff1a; 我们进行代码审计&#xff0c;发现解题的关键点 include &_REQUEST[file]。但是题目使用了白名单进行了过滤。我们发现白名单…

Redis底层数据库之SDS

高速的存储介质&#xff1a;内存优秀的底层数据结构高效的IO模型高效的线程模型 1. 动态字符串SDS Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是redis中最常用的一种数据结构。 C语言种字符串存在的一些问题&#xff1a; 获取字符…

web-AOP

AOP基础 AOP进阶 通知顺序和类型 切入点表达式 连接点

腾讯云(CVM)托管进行权限维持

前言 刚好看到一个师傅分享了一个阿里云ECS实战攻防&#xff0c;然后想到了同样利用腾讯云CVM的托管亦可实现在实战攻防中的权限维持。 简介 腾讯云自动化助手&#xff08;TencentCloud Automation Tools&#xff0c;TAT&#xff09;是一个原生运维部署工具&#xff0c;它可…

链表的极致——带头双向循环链表

​ 文章目录 双向带头循环链表简介&#xff1a;双向&#xff1a;带头&#xff1a;特点&#xff1a;链表带头节点的好处&#xff1a; 循环&#xff1a;特点&#xff1a;循环的好处&#xff1a; 双向带头循环链表的接口函数实现准备工作&#xff1a; 初始化链表&#xff08;头结…