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

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

绘制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 将阈值存储在数组中。

显示曲线下的面积。



AUC
AUC = 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')

 

使用ROC曲线比较分类方法

 

加载样本数据


load ionosphere
X 是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曲线绘制在同一张图上。

 

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

比较所有三个分类器的曲线下面积。



AUClog
AUClog = 0.9659
AUCsvm
AUCsvm = 0.9489
AUCnb
AUCnb = 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 on
plot(x2,y2)
hold off


title('ROC for classification by SVM');

 

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

比较AUC度量。



auc1
auc2
auc1 =


0.9518




auc2 =


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×2


0         0
0.1800    0.1800
0.4800    0.4800
0.5800    0.5800
0.6200    0.6200
0.8000    0.8000
0.8800    0.8800
0.9200    0.9200
0.9600    0.9600
0.9800    0.9800




subnames = 1x2 cell
{'setosa'}    {'virginica'}

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

 

找到与最佳工作点相对应的阈值。



T((X==OPTROCPT(1))&(Y==OPTROCPT(2)))
ans = 0.2857

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

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

 

计算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));

 

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

绘制置信区间。

figure()errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));

 

指定阈值计算ROC曲线。然后绘制曲线。





figure()
errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));

相关文章
|
3月前
|
机器学习/深度学习 资源调度 算法
基于入侵野草算法的KNN分类优化matlab仿真
本程序基于入侵野草算法(IWO)优化KNN分类器,通过模拟自然界中野草的扩散与竞争过程,寻找最优特征组合和超参数。核心步骤包括初始化、繁殖、变异和选择,以提升KNN分类效果。程序在MATLAB2022A上运行,展示了优化后的分类性能。该方法适用于高维数据和复杂分类任务,显著提高了分类准确性。
|
3月前
|
算法 数据安全/隐私保护
基于GARCH-Copula-CVaR模型的金融系统性风险溢出效应matlab模拟仿真
本程序基于GARCH-Copula-CVaR模型,使用MATLAB2022A仿真金融系统性风险溢出效应。核心功能包括计算违约点、资产价值波动率、信用溢价及其直方图等指标。GARCH模型用于描述资产收益波动性,Copula捕捉依赖结构,CVaR度量极端风险。完整代码无水印输出。 具体步骤:首先通过GARCH模型估计单个资产的波动性,再利用Copula方法构建多资产联合分布,最后应用CVaR评估系统性风险。程序展示了详细的运行结果和图表分析,适用于金融市场风险量化研究。
|
3月前
|
机器学习/深度学习 数据采集 算法
基于遗传优化SVM的电机参数预测matlab仿真
本项目基于遗传优化支持向量机预测电机性能参数,输入电机结构参数(铁心高度、厚度、绕组匝数、窗口宽度、导线截面积),输出体积及三轴加速度。使用Matlab2022a开发,含详细注释代码与操作视频。算法通过大量样本数据学习结构与性能间的非线性关系,经遗传算法优化SVM参数,提高预测精度和泛化能力。数据预处理包括清洗与归一化,确保模型训练高效稳定。
|
3月前
|
算法 数据挖掘 数据安全/隐私保护
基于CS模型和CV模型的多目标协同滤波跟踪算法matlab仿真
本项目基于CS模型和CV模型的多目标协同滤波跟踪算法,旨在提高复杂场景下多个移动目标的跟踪精度和鲁棒性。通过融合目标间的关系和数据关联性,优化跟踪结果。程序在MATLAB2022A上运行,展示了真实轨迹与滤波轨迹的对比、位置及速度误差均值和均方误差等关键指标。核心代码包括对目标轨迹、速度及误差的详细绘图分析,验证了算法的有效性。该算法结合CS模型的初步聚类和CV模型的投票机制,增强了目标状态估计的准确性,尤其适用于遮挡、重叠和快速运动等复杂场景。
|
4月前
|
算法 图形学 数据安全/隐私保护
基于NURBS曲线的数据拟合算法matlab仿真
本程序基于NURBS曲线实现数据拟合,适用于计算机图形学、CAD/CAM等领域。通过控制顶点和权重,精确表示复杂形状,特别适合真实对象建模和数据点光滑拟合。程序在MATLAB2022A上运行,展示了T1至T7的测试结果,无水印输出。核心算法采用梯度下降等优化技术调整参数,最小化误差函数E,确保迭代收敛,提供高质量的拟合效果。
|
3月前
|
算法 数据处理 数据安全/隐私保护
分别通过LS和RML进行模型参数辨识matlab仿真
本程序通过最小二乘法(LS)和递归最大似然估计(RML)进行模型参数辨识,并在MATLAB2022A中仿真。仿真输出包括参数辨识误差及收敛值。程序展示了两种方法的参数估计值及其误差收敛情况,适用于控制系统设计与分析。最小二乘法适合离线批量处理,而RML则适用于实时在线处理。核心代码实现了LS辨识,并绘制了参数估计值和误差变化图。
|
4月前
|
机器学习/深度学习 算法 数据可视化
基于线性核函数的SVM数据分类算法matlab仿真
本程序基于线性核函数的SVM算法实现数据分类,使用MATLAB2022A版本运行。程序生成随机二维数据并分为两组,通过自定义SVM模型(不依赖MATLAB工具箱)进行训练,展示不同惩罚参数C下的分类结果及决策边界。SVM通过寻找最优超平面最大化类别间隔,实现高效分类。 核心代码包括数据生成、模型训练和结果可视化,最终绘制了两类数据点及对应的决策边界。此实现有助于理解SVM的工作原理及其在实际应用中的表现。
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
本项目展示了用于分析和模拟电磁干扰对数据链系统影响的算法。通过Matlab 2022a运行,提供无水印效果图预览。完整代码包含详细中文注释及操作视频。理论部分涵盖五种常见干扰模型:噪声调频、线性调频、噪声、扫频和灵巧干扰,详细介绍其原理并进行对比分析。灵巧干扰采用智能技术如认知无线电和机器学习,自适应调整干扰策略以优化效果。
|
6月前
|
机器学习/深度学习 人工智能 算法
基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN
该语音情绪识别算法基于MATLAB 2022a开发,可识别如悲伤等情绪,置信度高达0.9559。核心程序含中文注释及操作视频。算法采用MFCC特征提取与GRNN广义回归网络,通过预加重、分帧、加窗、FFT、梅尔滤波器组、对数运算和DCT等步骤处理语音信号,实现高效的情绪分类。
|
10月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
417 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码