【MATLAB第42期】基于MATLAB的贝叶斯优化决策树分类算法与网格搜索、随机搜索对比,含对机器学习模型的评估度量介绍

news2024/11/13 19:31:31

【MATLAB第42期】基于MATLAB的贝叶斯优化决策树分类算法与网格搜索、随机搜索对比,含对机器学习模型的评估度量介绍

网格搜索、随机搜索和贝叶斯优化是寻找机器学习模型参数最佳组合、交叉验证每个参数并确定哪一个参数具有最佳性能的常用方法。

一、 评估指标
1、分类
1.1 准确性
1.2 精度
1.3 召回
1.4 F1值
1.5 F0.5值
1.6 F2值
1.7 计算评估指标的功能
2、回归
2.1 平均绝对误差
2.2 均方误差
2.3 均方根误差
二、 基于F1值执行网格搜索的多循环
三、 fitctree优化选项中的网格搜索(不能将目标函数更改为f1值)
四、 fitctree优化选项中的随机搜索(不能将目标函数更改为f1值)
五、 基于F1值的贝叶斯优化

六、代码获取

在讨论这些方法之前,我想先谈谈评估指标。这是因为从不同的超参数组合中选择最佳模型将是我们的性能指标。

一、 评估指标

这里将讨论不同的评估指标:准确度、精密度、召回率、F1值、F0.5值、F2值、平均绝对误差、均方误差、均方根误差。

1、分类

例如,假设我们的实际标签和预测代码如下:

Actual = {'hi','hi','No hi','hi','No hi','hi','hi','hi','No hi','hi','No hi'};
Prediction = {'hi','No hi','hi','hi','No hi','hi','hi','hi','No hi','No hi','No hi'};
confusionchart(Actual,Prediction);

在这里插入图片描述

假设“No hi”对我们来说更重要,因此,我们的评估指标(召回率、精度、F1、F2、F0.5)将集中在“No hi“类上。

1.1 准确性

Accuracy = (3+5)/(3+5+2+1)
%Accuracy =0.72727

1.2 精度

Precision = 3 / (3+2)
%Precision = 0.6

1.3 召回

Recall = 3 / (3+1)
%Recall = 0.75

1.4 F1值

它被称为调和均值

F1 = 2*(Precision*Recall)/(Precision+Recall)
%F1=0.6666667

1.5 F0.5值

权重比召回更注重准确性

F05 = (1+0.5^2)*(Precision*Recall)/((0.5^2)*Precision+Recall)
%F05=0.625

1.6 F2值

权重更强调召回而非准确性

F2 = (1+2^2)*(Precision*Recall)/((2^2)*Precision+Recall)
%F2=0.71429

1.7 计算评估指标的功能

您可以下载下面的函数,通过您的输入(实际和预测)在单行中计算所有评估指标
https://www.mathworks.com/matlabcentral/fileexchange/70978-summary_confusion?s_tid=prof_contriblnk

2、回归

例如,假设我们的预测结果是:

X = randn(100,5);
Actual = X*[1;0;3;0;-1] + randn(100,1);
mdl = fitlm(X,Actual);
Predicted=predict(mdl,X);
plot(X,Actual,'bo','MarkerSize',2)
hold on
plot(X,Predicted,'ko','MarkerSize',2)
title('Actual Vs Predicted')
grid on
set(gca,'Color',[1 0 1])
hold off

在这里插入图片描述

2.1 平均绝对误差MAE

MAE = sum(Actual-Predicted)/numel(Actual)
MAE =1.0214e-16

2.2 均方误差MSE

MSE = sum((Actual-Predicted).^2)/numel(Actual)
MSE =0.90475

2.3 均方根误差RMSE

 RMSE = sqrt(sum((Actual-Predicted).^2)/numel(Actual))
RMSE = 0.95118

二、 基于F1值执行网格搜索的多循环

例如,我们将训练具有不同超参数组合的决策树模型。
我们的数据集中有两个类别“b”和“g”,假设类“b”对我们更重要,因此我们将计算b的F1。
超参数的不同组合:
MaxNumSplit : 7,8,9,10
Minimun Leaf : 5,10,15

%导入数据
display(categories(categorical(Y)))
rng(2); % 固定算子
MdlDefault = fitctree(X,Y,'CrossVal','on');
i=1; %初始数量
for MaxNumSplit = 7:1:10
    for MinLeaf = 5:5:15
        Model = fitctree(X,Y,'MaxNumSplits',MaxNumSplit,'MinLeafSize',MinLeaf);        
        
        %计算每个组合的F1
        Predicted=predict(Model,X);
        confMat=confusionmat(Y,Predicted);   
        recall=confMat(1,1)/sum(confMat(1,:));
        precision=confMat(1,1)/sum(confMat(:,1));
        F1(i) = 2*recall*precision/(recall+precision);
        
        %记录当前的MaxNumSplit和Min LeafSize
        MaxNumSplit_r(i) = MaxNumSplit;
        MinLeafSize_r(i) = MinLeaf;
        
        %下一次循环
        i=i+1;
    end
end

%寻找最佳F1值
Best=Final_Result(Final_Result.F1Score==max(Final_Result.F1Score),:)
% 训练当前模型
Model = fitctree(X,Y,'MaxNumSplits',Best.MaxNumSplit,'MinLeafSize',Best.MinLeafSize); 

%绘图展示
view(Model,'mode','graph') 

在这里插入图片描述

三、 fitctree优化选项中的网格搜索(不能将目标函数更改为f1值)

据我所知,不能改变fitctree中的目标函数
如果您想详细了解fitctree的参数,可以参考以下文档:
https://www.mathworks.com/help/stats/fitctree.html
默认的目标函数是样本误差或交叉验证误差(准确度=1-误差),因此,如果您想将目标函数更改为F1,我建议您使用上面的循环方法。

我用同样的例子来演示如何在fitctree的优化选项中使用网格搜索。

rng(3);%固定算子

%优化变量及其范围
MaxNumSplit = optimizableVariable('MaxNumSplit',[7,10],'Type','integer');
MinLeaf = optimizableVariable('MinLeaf',[5,15],'Type','integer');
hyperparamtersRF = [MaxNumSplit;MinLeaf];

% 执行网格搜索以找到最佳组合
% verbose=1将显示表中的优化结果
Model = fitctree(X,Y,'OptimizeHyperparameters',hyperparamtersRF,'HyperparameterOptimizationOptions',opts);
Accuracy = 1-min(Model.HyperparameterOptimizationResults.Objective)

在这里插入图片描述
因此,从上表的结果中,我们可以注意到最佳组合是4号(MaxNumSplit=8,MinLeaf=14)。这是网格搜索后选定的模型。

四、 fitctree优化选项中的随机搜索(不能将目标函数更改为f1值)

它与网格搜索相同,不能更改目标函数,默认目标函数基于错误(精度=1-错误)。
因此,您可以考虑基于F1分数进行随机搜索的多循环方法。
如果你想在优化选项中使用随机搜索,你只需要将上面的网格搜索改为随机搜索。

rng(3);%固定算子
% 优化变量及范围
MaxNumSplit = optimizableVariable('MaxNumSplit',[7,10],'Type','integer');
MinLeaf = optimizableVariable('MinLeaf',[5,15],'Type','integer');
hyperparamtersRF = [MaxNumSplit;MinLeaf];

%执行网格搜索以找到最佳组合
opts = struct('Optimizer','randomsearch','ShowPlots',true,'AcquisitionFunctionName','expected-improvement-plus','verbose',1);
Model = fitctree(X,Y,'OptimizeHyperparameters',hyperparamtersRF,'HyperparameterOptimizationOptions',opts);
Accuracy = 1-min(Model.HyperparameterOptimizationResults.Objective)

在这里插入图片描述

五、 基于F1值的贝叶斯优化

本部分展示了如何实现贝叶斯优化,以使用F1值调整决策树的超参数。它还让您了解如何为贝叶斯优化创建目标函数,因此,您可以根据需要更改任何评估矩阵(准确性、精确度、召回率、F1、F2、F0.5)。

rng(3) %固定算子
% 优化变量及范围
MaxNumSplit = optimizableVariable('MaxNumSplit',[7,10],'Type','integer');
MinLeaf = optimizableVariable('MinLeaf',[5,15],'Type','integer');
hyperparamtersRF = [MaxNumSplit;MinLeaf];

%目标功能在辅助功能部分(如下)
%用贝叶斯优化器优化变量
results = bayesopt(@(params)f1_objective(params,X,Y),hyperparamtersRF,...
    'AcquisitionFunctionName','expected-improvement-plus','Verbose',1);

在这里插入图片描述
在这里插入图片描述

六、代码获取

后台**私信回复“42期”**可获取下载链接。

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

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

相关文章

STM32F103基于HAL工程挂载FatFS驱动SD卡

STM32F103基于HAL工程挂载FatFS驱动SD卡 📌基于标准库驱动《STM32挂载SD卡基于Fatfs文件系统读取文件信息》 🎬驱动实验效果: 🔨通过STM32cubemx配置SPI1作为访问SD、TF卡通讯方式。 🔧在STM32cubemx配置中挂载中…

Scala入门【变量和数据类型】

目录 Scala基本认知 Hello Scala 方法的定义 伴生对象 Java: Scala: 2、变量和数据类型 2.1、注释 2.2、变量和常量 Java中的变量和常量 Scala基本语法 2.3、标识符 2.4、字符串 基本语法 2.5、标准输入输出 基本语法 2.6、文件的读写 …

6-8 二分查找

今天是端午节,祝大家端午节快乐~ 竟然这样,还不点点赞。 言归正传┏ (゜ω゜)☞ 目录 引入 二分查找算法思想 时间复杂度O(logN) 二分查找算法描述 二分查找算法的框架如下: 例题1: 例题2&#x…

秒懂SpringBoot之如何集成SpringDoc(全网目前最新最系统最全面的springdoc教程)

[版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 文章目录 概述概念解释SpringDoc使用简单集成配置文档信息配置文档分组使用注解TagOperationSchemaParameterParametersApiResponses 和ApiResponse 认证授权无需认证需要认证 总结源码 概述 近来颇为懈…

13. WebGPU 正交投影

在上一篇文章中,讨论了矩阵的工作原理。讨论了如何通过 1 个矩阵和一些神奇的矩阵数学来完成平移、旋转、缩放,甚至从像素到裁剪空间的投影。实现 3D 操作 只需要再向前迈一小步。 在之前的 2D 示例中,将 2D 点 (x, y) 乘以 3x3 矩阵。要实现…

【机器学习】——续上:卷积神经网络(CNN)与参数训练

目录 引入 一、CNN基本结构 1、卷积层 2、下采样层 3、全连接层 二、CNN参数训练 总结 引入 卷积神经网络(CNN)是一种有监督深度模型框架,尤其适合处理二维数据问题,如行人检测、人脸识别、信号处理等领域,是带…

19c rac添加节点

在正常的节点 [rootdb1 ~]# xhost access control disabled, clients can connect from any host [rootdb1 ~]# su - grid ASM1:/home/griddb1>export DISPLAY:1.0 ASM1:/home/griddb1>$ORACLE_HOME/gridSetup.sh [rootdb2 ~]# /tmp/GridSetupActions2021-09-16_…

基于Nginx1.22+PHP8+MySQL8安装Discuz! X3.5

基于Nginx1.22PHP8MySQL8安装Discuz! X3.5 1. 安装PHP82. 安装MySQL83. 配置Nginx1.224. 安装Discuz! X3.5 1. 安装PHP8 更新系统: yum update安装EPEL存储库: yum install epel-release安装Remi存储库(提供了最新的 PHP 版本)&…

【十三】druid 原理解析

druid 原理解析 先前写了一篇博客关于druid集成相关的,这里来分析一下druid原理,结合这两篇文章希望读者能够把druid理解透彻。 一、druid介绍 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能&…

【前端JS交互篇】ECMA核心语法 ——常量、变量、数据类型、各种弹框

一、javascript简介 1.1 Javascript简史 在WEB日益发展的同时,网页的大小和复杂性不断增加,受制于网速的限制,为完成简单的表单验证而频繁地与服务器交换数据只会加重用户的负担,当时走在技术革新最前沿的Netscape(网…

阿里云服务器的弹性计算能力如何?是否支持按需扩展和缩减?

阿里云服务器的弹性计算能力如何?是否支持按需扩展和缩减?   【本文由阿里云代理商[聚搜云www.4526.cn]撰写】   阿里云服务器,作为业界领先的云计算服务提供商,其弹性计算能力是如何体现的?是否真的支持按需扩展和…

定制你的Blocks UI布局:Gradio的Block Layouts模块介绍

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

【python】如何在 Python 中创建相关矩阵

目录 一、说明 二、相关理论 2.1 何为相关 2.2 相关的前提 2.3 Correlation Matrix是个啥? 2.4 皮尔逊相关系数 三、Python演示如何创建相关矩阵 四、数据可视化观察 五、后记 一、说明 本教程介绍如何在 Python 中创建和解释相关矩阵。然而,创…

English Learning - L3 作业打卡 Lesson7 Day47 2023.6.20 周二

English Learning - L3 作业打卡 Lesson7 Day47 2023.6.20 周二 引言🍉句1: Growing up in a hot Las Vegas desert, all I wanted was to be free.成分划分弱读连读语调 🍉句2: I would daydream about traveling the world, living in a place where i…

有三个线程,分别只能打印A,B和C要求按顺序打印ABC,打印10次(多种方法,小白也懂)

目录 第一种方法:使用LockSupport的park和unpark功能(推荐) 第二种方式:synchronizedwaitnotify 第三种:暴力循环方法(不推荐) 第一种方法:使用LockSupport的park和unpark功能(推荐) 简单来说我们有一个名为LockSupport的方法 park就是阻塞当前进程 unpark就是取消阻塞让其…

DRIFTINGBLUES: 4实战演练

文章目录 DRIFTINGBLUES: 4实战演练一、前期准备1、相关信息 二、信息收集1、端口扫描2、访问网站3、查看源码4、解密5、访问网页6、解密7、访问网页8、微信扫一扫9、爆破FTP10、登录FTP11、下载文件并查看12、写入SSH密钥并上传13、SSH连接 三、后渗透1、查看第一个flag2、查找…

Golang | Web开发之Gin静态资源映射及HTML模板渲染

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

[Eigen中文文档] 稀疏矩阵操作

文档总目录 本文目录 稀疏矩阵格式SparseMatrix 类 第一个示例SparseMatrix 类矩阵和向量属性迭代非零系数 填充稀疏矩阵支持的运算符和函数基本操作矩阵乘积块操作三角形视图和自共轭视图 英文原文(Sparse matrix manipulations) 处理和解决稀疏问题涉及各种模块&#xff0c…

【马蹄集】第十六周作业

第十六周作业 目录 MT2149 最长子段和MT2150 旅费MT2156 矩阵取数MT2157 迷宫MT2155 四柱河内塔 MT2149 最长子段和 难度:钻石    时间限制:1秒    占用内存:128M 题目描述 给出一个长度为 n n n 的序列 A A A,选出其中连续…

Android studio的安装的详细过程

Android开发环境 Eclipse Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。 Eclipse是一种面…