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

news2024/12/23 10:35:37

一、引言

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

本文将探讨两个在机器学习领域中备受关注的主题: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>)`

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

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

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

相关文章

论文笔记 - :DIGGING INTO OUTPUT REPRESENTATION FOR MONOCULAR 3D OBJECT DETECTION

Title: 深入研究单目 3D 物体检测的输出表示 Abstract 单目 3D 对象检测旨在从单个图像中识别和定位 3D 空间中的对象。最近的研究取得了显着的进展&#xff0c;而所有这些研究都遵循基于 LiDAR 的 3D 检测中的典型输出表示。 然而&#xff0c;在本文中&#xff0c;我们认为…

Flask Python:如何获取不同请求方式的参数

Flask中 如何获取不同请求方式的参数 前言一、get请求下1.1、路径中带有参数1.1.1、postman示例1.1.2、 flask代码实现1.1.3、 注意事项 1.2、在url后边带有参数1.2.1、postman示例1.2.2、 flask代码实现 二、post请求下2.1、form-data格式2.1.1、postman示例2.1.2、flask代码实…

【面试HOT200】数组篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试coding部分的&#xff0c;整理期间苛求每个算法题目&#xff0c;平衡可读性与代码性能&#xff08;leetcode运行复杂度均打败80%以上&#xff09;。 &#x1f970;来源&#xff1a;材料主要源于…

uniapp-打包app-图标配置

依次找到manifest->App图标配置&#xff0c;然后点击浏览&#xff0c;从本地文件夹中选择你们项目的logo&#xff0c;然后点击自动生成所有图标并替换&#xff0c;即可&#xff1a;

OpenHarmony实战:轻量级系统之安全子系统移植

安全子系统提供网络设备连接、认证鉴权等功能&#xff0c;依赖mbedtls实现硬件随机数以及联网功能。 由于每个厂商芯片硬件与实现硬件随机数的方式不同&#xff0c;需要适配硬件随机数接口。 移植指导 OpenHarmony提供了mbedtls的开源三方库&#xff0c;路径为“//third_par…

adobe stock会员开通付费付款订阅充值教程/adobe stock免费白嫖一个月

登录adobe stock的官网&#xff0c;点击你想要下载的视频&#xff0c;然后点击免费下载&#xff0c;我们点击免费试用按钮&#xff0c;可以看到非常贵&#xff0c;需要80美金一个月&#xff0c;用fomepay可以免费白嫖一个月 点击获取一张虚拟信用卡&#xff0c;就可以白嫖一个…

【Vscode】无法将“python,pip,node,npm等”识别为cmdlet...问题

问题出现场景 新换个电脑&#xff0c;然后重新安装了软件&#xff0c;又复现一次又一次“老生常谈”的问题。 解决方法 网络答案吧五花八门&#xff0c;我采取一个我的场景解决可行的方案&#xff0c; 首先我的场景是&#xff0c;环境变量&#xff0c;配置路径都是没有问题…

C#手术麻醉临床信息系统源码,自动生成麻醉记录单、各种手术麻醉相关医疗文书

麻醉临床信息系统&#xff0c;采用计算机和通信技术&#xff0c;实现监护仪、麻醉机、输液泵等设备输出数据的自动采集&#xff0c;采集的数据能够如实准确地反映患者生命体征参数的变化&#xff0c;并实现信息高度共享&#xff0c;根据采集结果&#xff0c;综合其他患者数据&a…

第五篇:3.4 用户归因和受众(User attribution and audience) - IAB/MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xff09;第四篇广…

【Vue3源码学习】— CH2.7 Computed: Vue 3 计算属性深入解析

Computed: Vue 3 计算属性深入解析 1.计算属性的基本用法2. ComputedRefImpl 类深入解析JavaScript 中的 getter 函数 3. 计算属性的创建&#xff1a;computed 方法解析3.1 源码解析3.2 使用示例 4. 计算属性的工作原理5. 手动实现简化的计算属性6. 结语 在 Vue 3 的响应式系统…

go之web框架gin

介绍 Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API&#xff0c;性能要好得多&#xff0c;多亏了 httprouter&#xff0c;速度提高了 40 倍。 如果您需要性能和良好的生产力&#xff0c;您一定会喜欢 Gin。 安装 go get -u github.com/gin-gonic/g…

XRDP登录ubuntu桌面闪退问题

修改 /etc/xrdp/startwm.sh unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR . $HOME/.profile

【C语言】——指针七:数组和指针试题解析

【C语言】——指针七&#xff1a; 前言一、 s i z e o f sizeof sizeof 与 s t r l e n strlen strlen 的对比1.1、 s i z e o f sizeof sizeof1.2、 s t r l e n strlen strlen1.3、 s i z e o f sizeof sizeof 和 s t r l e n strlen strlen 对比 二、数组和指针笔试题解析…

C++之优化Linux内核结构体用智能指针std::unique_ptr与std::make_unique分配内存总结(二百六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

自贡市第一人民医院:超融合与 SKS 承载 HIS 等核心业务应用,加速国产化与云原生转型

自贡市第一人民医院始建于 1908 年&#xff0c;现已发展成为集医疗、科研、教学、预防、公共卫生应急处置为一体的三级甲等综合公立医院。医院建有“全国综合医院中医药工作示范单位”等 8 个国家级基地&#xff0c;建成高级卒中中心、胸痛中心等 6 个国家级中心。医院日门诊量…

Linux (Ubuntu)- mysql8 部署

1.基本部署 01》》先查看OS类型&#xff0c;如果是Ubuntu在往下边看 rootspray:/etc/mysql/mysql.conf.d# lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: …

Movavi Video Converter 2022 for Mac/Win:卓越的视频音频文件转换器

在数字化时代&#xff0c;视频和音频文件已成为我们日常生活和工作中不可或缺的一部分。无论是制作精美的家庭影片&#xff0c;还是编辑专业的商业视频&#xff0c;一款高效、便捷的视频音频文件转换器无疑是您的得力助手。而Movavi Video Converter 2022&#xff0c;就是这样一…

GPT 模型解析:ChatGPT 如何在语言处理领域引领潮流?

人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋&#xff08;英伟达CEO&#xff09; ChatGPT 好得有点可怕了&#xff0c;我们距离危险的强人工智能不远了。——马斯克&#xff08;Tesla/SpaceX/Twitter CEO&#xff09; 以上的内容说明我们现在正处于一个技术大翻牌的…

测斜仪在边坡安全监测中的重要作用

边坡作为土木工程和地质工程领域中常见的结构形式&#xff0c;其稳定性直接关系到工程安全以及人民生命财产的安全。因此&#xff0c;对边坡进行精确、及时的监测是至关重要的。在众多边坡监测仪器中&#xff0c;测斜仪以其独特的优势在边坡安全监测中发挥着重要的作用。 测斜仪…

(24年4月2日更新)Linux安装chrome及chromedriver(Ubuntu20.0416.04)

一、安装Chrome 1&#xff09;先执行命令下载chrome&#xff1a; wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb2&#xff09;安装chrome sudo dpkg -i google-chrome-stable_current_amd64.deb踩坑&#xff1a;这里会提示如下报错&…