matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

原文链接:http://tecdat.cn/?p=15508

绘制ROC曲线通过Logistic回归进行分类

加载样本数据。load fisheriris通过使用与versicolor和virginica物种相对应的度量来定义二元分类问题。pred = meas(51:end,1:2);定义二进制响应变量。resp = (1:100)'>50; % Versicolor = 0, virginica = 1拟合逻辑回归模型。mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');计算ROC曲线。使用逻辑回归模型中的概率估计值作为得分。

perfcurve 将阈值存储在数组中。

显示曲线下的面积。AUCAUC = 0.7918

曲线下的面积为0.7918。最大AUC为1,对应于理想分类器。较大的AUC值表示更好的分类器性能。

绘制ROC曲线plot(X,Y)xlabel('False positive rate')ylabel('True positive rate')title('ROC for Classification by Logistic Regression')

205108890_1_20201021025811428_wm

使用ROC曲线比较分类方法

加载样本数据load ionosphereX 是351x34预测变量的矩阵。 Y 是类别标签的字符数组:  'b' 不良雷达回波和  'g' 良好雷达回波。

重新格式化因变量以适合逻辑回归。

拟合一个逻辑回归模型来估计雷达返回的后验概率是一个不好的概率。mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');score_log = mdl.Fitted.Probability; % Probability estimates

使用得分的概率计算标准ROC曲线。

在相同的样本数据上训练SVM分类器标准化数据。mdlSVM = fitcsvm(pred,resp,'Standardize',true);计算后验概率。

第二列  score_svm 包含不良雷达收益的后验概率。

使用SVM模型的分数计算标准ROC曲线。

在同一样本数据上拟合朴素贝叶斯分类器。

计算后验概率(分数)[~,score_nb] = resubPredict(mdlNB);使用朴素贝叶斯分类的分数计算标准ROC曲线。

将ROC曲线绘制在同一张图上。

205108890_2_20201021025811569_wm

尽管对于较高的阈值,SVM可以产生更好的ROC值,但逻辑回归通常更擅长区分不良雷达收益与良好雷达。朴素贝叶斯的ROC曲线通常低于其他两个ROC曲线,这表明样本内性能比其他两个分类器方法差。

比较所有三个分类器的曲线下面积。AUClogAUClog = 0.9659AUCsvmAUCsvm = 0.9489AUCnbAUCnb = 0.9393

Logistic回归的AUC度量最高,而朴素的贝叶斯则最低。该结果表明,逻辑回归对此样本数据具有更好的样本内平均性能。

确定自定义内核功能的参数值

本示例说明如何使用ROC曲线为分类器中的自定义内核函数确定更好的参数值。

在单位圆内生成随机的一组点。

定义预测变量。将第一象限和第三象限中的点标记为属于正类别,而将第二象限和第二象限中的点标记为负类。pred = [X1; X2];resp = ones(4*n,1);resp(2*n + 1:end) = -1; % Labels

创建函数mysigmoid.m ,该函数 接受要素空间中的两个矩阵作为输入,并使用S形内核将其转换为Gram矩阵。

使用Sigmoid内核函数训练SVM分类器。使用标准化数据。

设置  gamma = 0.5 ,使用调整后的S形核训练SVM分类器。SVMModel2 = fitPosterior(SVMModel2);[~,scores2] = resubPredict(SVMModel2);

计算两个模型的ROC曲线和曲线下面积(AUC)。

绘制ROC曲线。plot(x1,y1)hold onplot(x2,y2)hold offtitle('ROC for classification by SVM');

205108890_3_20201021025811663_wm

将gamma参数设置为0.5的内核函数可提供更好的样本内结果。

比较AUC度量。auc1auc2auc1 =0.9518auc2 =0.9985

伽玛设置为0.5时曲线下的面积大于伽玛设置为1时曲线下的面积。这也证实了伽玛参数值为0.5会产生更好的结果。为了直观比较这两个伽玛参数值的分类性能。

绘制分类树的ROC曲线

加载样本数据。load fisheriris列向量  species由三种不同物种的鸢尾花组成。双矩阵  meas 包含对花朵的四种测量类型:萼片长度,萼片宽度,花瓣长度和花瓣宽度。所有度量单位均为厘米。

使用萼片的长度和宽度作为预测变量训练分类树。

根据树预测物种的分类标签和分数 。[~,score] = resubPredict(Model);分数是观察值(数据矩阵中的一行)所属类别的后验概率。列  score 对应于所指定的类  'ClassNames'。

由于这是一个多类问题,因此不能仅将其  score(:,2) 作为输入。这样做将无法提供  perfcurve 有关两个阴性类别(setosa和virginica)分数的足够信息。此问题与二元分类问题不同,在二元分类问题中,知道一个类别的分数就足以确定另一个类别的分数。因此,必须提供  perfcurve 将两个否定类的得分纳入考虑范围的函数。一种函数是score(:,2)-max(score(:,1),score(:,3))。

X,默认为假阳性率,  Y,默认为真阳性率(召回率或敏感性)。正类标签为  versicolor。由于未定义否定类别,因此  perfcurve 假设不属于肯定类别的观测值属于一个类别。该函数将其接受为否定类。suby = 12×20 00.1800 0.18000.4800 0.48000.5800 0.58000.6200 0.62000.8000 0.80000.8800 0.88000.9200 0.92000.9600 0.96000.9800 0.9800⋮subnames = 1x2 cell{'setosa'} {'virginica'}

在ROC曲线上绘制ROC曲线和最佳工作点。

205108890_4_20201021025811741_wm

找到与最佳工作点相对应的阈值。T((X==OPTROCPT(1))&(Y==OPTROCPT(2)))ans = 0.2857

指定  virginica 为否定类,并计算和绘制ROC曲线  versicolor。

同样,必须提供  perfcurve 将否定类分数纳入考量的函数。要使用的函数的一个示例是score(:,2)-score(:,3)。

205108890_5_20201021025811835_wm

计算ROC曲线的逐点置信区间

加载样本数据。load fisheriris仅将前两个变量用作预测变量,来定义二元问题。pred = meas(51:end,1:2);定义二进制因变量。resp = (1:100)'>50; % Versicolor = 0, virginica = 1拟合逻辑回归模型。

通过垂直平均(VA)和使用bootstrap进行采样,计算真实正率(TPR)上的逐点置信区间。

'NBoot',1000 将引导样本的数量设置为1000。  'XVals','All' 提示  perfcurve 返回  X,  Y和  T 所有分数的Y 值,并X 使用垂直平均将所有值的值(真阳性率)  平均  (假阳性率)。 默认情况下将使用阈值平均来计算置信范围。

绘制逐点置信区间。errorbar(X,Y(:,1),Y(:,1)-Y(:,2),Y(:,3)-Y(:,1));205108890_6_20201021025811913_wm

不一定总是可以控制误报率(FPR,X 此示例中的  值)。因此,可能希望通过阈值平均来计算真实正利率(TPR)的逐点置信区间。

绘制置信区间。figure()errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));

205108890_7_202010210258126_wm

指定阈值计算ROC曲线。然后绘制曲线。figure()errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));

205108890_8_20201021025812272_wm

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

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

相关文章

Xcode8更新约束

Xcode升级之后就会发现约束设置好,想更新一下约束,看看约束是不是刚刚好,习惯性的去点右下角的更新约束的结果却发现没有更新约束的这一项了,好尴尬。 后来发现原来在Xcode8的约束更新换了一个地方,并不是在原来的右下…

open()的模块

对文件操作流程: 1、打开文件,得到文件句柄并赋值给一个变量 2、通过句柄对文件进行操作 3、关闭文件 mode can be: * ‘r’ 只读。 * ‘w’ 写入,如果之前有就覆盖 * ‘a’ 追加。 表格: mode文件不存在文件存在读写…

8250u运行matlab,第8代CPU i5-8250U 电脑安装核显 WIN7X64位驱动 - 小众知识

新拿到手的笔记本HP 66 PRO G1 安装WIN10的版本,对于WIN10在苏菲上使用被虐了之后就没好感了,另外由于这个笔记本是工作用的,有很多软件还是win7版,于是就格式化装了WIN7(64位)。安装完成后找不到WIN7主板驱动就找了驱动精灵&…

php 获取cookieid,Redis实现Session共享详解

Redis实现Session共享这几天在做session共享这么一个小模块,也查了好多资料,给我的感觉,就是太乱了,一直找不到我想要的东西,几乎全部实现方法都与我的想法不一样,在这里,我总结一下自己是如何用…

C# base和this

• 是否可以在静态方法中使用base和this,为什么? • base常用于哪些方面?this常用于哪些方面? • 可以base访问基类的一切成员吗? • 如果有三层或者更多继承,那么最下级派生类的base指向那一层呢&#xff…

asp.net记录错误日志的方法

1、说明 在调试发布后的asp.net项目时有可能会遇到意想不到的错误,而未能及时的显示。这就需要记录日志来跟踪错误信息,所以写了个简单的记录信息的方法,记录简单的文本信息也可以使用。此方法是以生成文本文件的方式记录的,下面贴…

iOS10 UI教程管理层次结构

iOS10 UI教程管理层次结构 iOS10 UI教程管理层次结构,在一个应用程序中,如果存在多个层次结构,就需要对这些层次结构进行管理。在UIView类中提供了可以用来管理层次结构的方法,让开发者可以添加、移动、删除来自层次结构中的元素。…

appium()-The event firing

原文地址:https://github.com/appium/java-client/blob/master/docs/The-event_firing.md since 4.1.0 The purpose This feature allows end user to organize the event logging on the client side. Also this feature may be useful in a binding with standard…

c# oracle datasource,C# 连接Oracle 数据库 示例源码下载

【实例简介】C# 实现 Oracle 数据库的 增删改查 操作【实例截图】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using S…

前端学习(2169):vue-router安装和配置方式

main.js import VueRouter from vue-router import Vue from vue//安装插件 const routers new VueRouter({//配置之间的关系routes })export default router index.js import VueRouter from vue-router import Vue from vue//安装插件 const routers new VueRouter({//配…