matlab 分类学习工具箱 Classification Learner的使用及导出其生成的图,混淆矩阵confusion matrix的画法

2023-11-19

声明:转自https://blog.csdn.net/qq_27914913/article/details/71436838

https://blog.csdn.net/evil_xue/article/details/89765890

在matlab中,既有各种分类器的训练函数,比如“fitcsvm”,也有图形界面的分类学习工具箱,里面包含SVM、决策树、Knn等各类分类器,使用非常方便。接下来讲讲如何使用。

一、使用

1、启动:

点击“应用程序”,在面板中找到“Classification Learner”图标点击即启动,也可以在命令行输入“classificationLearner”,回车,也可启动。如下图:
在这里插入图片描述

2、导入数据:

点击“New Session”,可以从工作空间或文件中导入数据。
(默认数组中最后一列为标签)
选择数据后,导入分为三步:
在这里插入图片描述
第一步,确定你的数据格式,这里导入的数据是一个矩阵,既有样本输入也有对应的输出。比如,我导入的数据data是33000的矩阵,3000个样本,每个样本两个特征值,第三行是每个样本对应的输出。这时我应该选择“Use row as variables”,如果数据格式为30003,则选择“Use column as variables”。
第二步,指定哪一行为“response”即输出响应,在本数据中,第三行为输出,其余为“predictor”。
第三步,是否需要验证,一般都选择交叉验证“Cross Validation”,folds表示几次,自己选择即可。
在这里插入图片描述
确定后,点击“start session”。

3、选择分类器:

如下图,原始数据的散点图会显示出来,由于这数据只有两维,因此可以全部显示在二维坐标中。如果你的数据多于两维,二维坐标系不能完全显示每一维,你可以在右边红圈的X、Y下拉条中选择显示哪两维。
在这里插入图片描述
训练前可以选择训练的模型,点击红圈中的下拉箭头,可以看到各类训练模型,选择一个即可,也可以选择某一类的“ALL”,该类所有模型都会训练一遍。
选好模型后,点击“train”,开始训练。

4、训练结果:

训练结果显示在左边,每个模型训练后的准确率都会显示出来,最高准确率会被标注,下面即为模型的信息。
在这里插入图片描述
点击“Advance”可以设置模型的具体参数。点击“Confusion Matrix”可以查看混淆矩阵等。

点击“Export Model”可以将模型导出到工作空间,这样就可以利用模型来测试新的数据。也可以导出为代码,方便研究。

当后续需要处理的数据量比较大或者需要重复使用时,建议导出代码。

5、样本预测

模型导出到workespace中,命令窗口会显示一下提示信息

这里的T应该值得是一个类,需要自己定义,如果不需要立即保存,可以用另外一种方式进行样本分类预测。

[LABEL,SCORE]=predict(SVM,X)

X是大小为N*P的数字矩阵,其中P是用于训练此模型的预测变量的数量。SCORE代表各个样本的各个特征对此分类的权值,LABEL为预测分类。
——————
样本预测转自:
https://blog.csdn.net/weixin_38645024/article/details/80010714

 

二、导出 Classification Learner生成的图

画出的图有时需要导出放到论文里,但是里面并没有相关按钮。

这时可以使用

hFigs = findall(groot,'type','figure');

 导出图像句柄,再生成图,可以使用saveas来导出pdf或者eps等格式的图片,

saveas(hFigs,'Confusion Matrix.pdf');
  • 注意:如果在工作区出现了一个2X1或者3X1的figure hfigs,是因为界面中同时打开了2张或者3张图,需要将其余不需要的图关闭,仅保留需要处理的一张图即可。对于生成的roc曲线图、Confusion Matrix图处理方式相同。
  • 另外,saveas后出现这种情况:图形对于页面而言太大,将被剪切,是因为:
  • saveas默认是以a4的大小输出的,可以调整图为a3,或者a2,a1,a0,即在saveas之前,输入
  • set(hFigs,'PaperType','a3');

感谢https://blog.csdn.net/yq_forever/article/details/85264920#comments的分享。

但现在仍有一个问题,对于39×39的大型矩阵,只有颜色显示,无法显示具体的结果,是否可以将混淆矩阵中计算得到的具体结果导出?如果直接使用工具箱生成的code来计算结果,得到是所有结果的平均值,也无法获取中间过程结果。

1、以下是matlab中给出的混淆矩阵计算方式

%Compute the confusion matrix using stratified 10-fold cross validation:

clear;
load('fisheriris');
y = species;
X = meas;
order = unique(y); % Order of the group labels
cp = cvpartition(y,'k',10); % Stratified cross-validation

f = @(xtr,ytr,xte,yte)confusionmat(yte,...
classify(xte,xtr,ytr),'order',order);

cfMat = crossval(f,X,y,'partition',cp);
cfMat = reshape(sum(cfMat),3,3)

2、常规混淆矩阵的画法,可以,- 保存混淆矩阵文本文件 - matlab中使用imagesc命令

例如:[mat,order] = confusionmat(actual,predicted);%生成混淆矩阵,或者rand(10,10) %以一个随机生成的矩阵为例

  imagesc(mat);%生成图查看矩阵的结果,可以添加colorbar给出图例
colormap(flipud(gray)); %或者将彩色的图转化为黑白灰的图,higher values are black and lower values are white

but无法获得predicted

注:还可以直接使用plotconfusion函数绘制混淆矩阵,函数的3种用法

plotconfusion(targets,outputs)
plotconfusion(targets,outputs,name)
plotconfusion(targets1,outputs1,name1,targets2,outputs2,name2,...,targetsn,outputsn,namen)

详细参考官方解释https://ww2.mathworks.cn/help/deeplearning/ref/plotconfusion.html?tdsourcetag=s_pcqq_aiomsg

关于混淆矩阵画法的有很多,具体参考:

https://blog.csdn.net/dujiahei/article/details/80789945

https://blog.csdn.net/dujiahei/article/details/80789945

https://blog.csdn.net/xuyingjie125/article/details/78417760

(7.26补充:上述问题在耐心看完全部程序之后解决了,可以在工具箱generate code后输出参数添加response,validationPredictions,或者直接修改导出的模型code)

% Perform cross-validation
partitionedModel = crossval(trainedClassifier.ClassificationKNN, 'KFold', 10);

% Compute validation accuracy
validationAccuracy = 1 - kfoldLoss(partitionedModel, 'LossFun', 'ClassifError');

% Compute validation predictions and scores
[validationPredictions, validationScores] = kfoldPredict(partitionedModel);

%plot confusion matrix
[cfmat,order] = confusionmat(response,validationPredictions);
imagesc(cfmat);
colormap(flipud(gray)); 

另外,在https://www.mathworks.com/matlabcentral/answers/280897-exporting-roc-curve-and-confusion-matrix-computation-code-from-the-classification-learner-app?s_tid=answers_rc1-1_p1_Topic也验证了想法

  • CONFUSION MATRIX

C = confusionmat(response,validationPredictions);
CP = classperf(response,validationPredictions);

  • ROC CURVE:

[X,Y,T,AUC,OPTROCPT,SUBY,SUBYNAMES] = perfcurve(response,validationScores(:,1),'PositiveClass');
figure, plot(X,Y,OPTROCPT(1),OPTROCPT(2),'r*');

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab 分类学习工具箱 Classification Learner的使用及导出其生成的图,混淆矩阵confusion matrix的画法 的相关文章

  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾
  • 通过多次合并相同的行向量来构建矩阵

    有没有一个matlab函数可以让我执行以下操作 x 1 2 2 3 然后基于x我想建立矩阵m 1 2 2 3 1 2 2 3 1 2 2 3 1 2 2 3 您正在寻找REPMAT http www mathworks com help t
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • MATLAB:将当前文件夹设置为脚本位置

    我在不同的文件夹中有一些脚本和数据 我使用addpath和相对路径经常 我的问题是 只有当我的当前文件夹是我执行的脚本所在的位置时 这才有效 例如 如果我执行添加路径 X 的脚本 A 然后执行位于路径 X 中的脚本 B 则 Matlab 不
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • MATLAB:图像角坐标和引用元胞数组

    我在比较不同元胞数组中的元素时遇到一些问题 这个问题的背景是我正在使用bwboundariesMATLAB 中的函数可追踪图像的轮廓 该图像是结构横截面 我试图找出整个部分是否具有连续性 即 只有一个轮廓由bwboundaries命令 完成
  • 在 Python 上显示 Matlab mat 文件中的图像

    我目前正在尝试显示从此下载的 Mat 文件中的图像site http www rctn org bruno sparsenet 这是一个 mat 文件 所以我尝试使用 scipy io loadmat 函数加载它 但我似乎无法绘制图像 我究
  • 在 MATLAB 图中用值标记点

    以下命令确实用正方形标记了点 但没有在其中放入值 例如 21 0 X 21 8 2 1 0 Y 0 1 2 3 4 plot X Y k s 我应该添加哪个参数以便全部5点值出现在图上吗 这些值不能一一键入 因为它们是随机数 因此它们可能会
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 将值从 C++ MEX 文件返回到 MATLAB

    我正在编写一个从 C 代码中检索数据的 MATLAB 程序 为此 我在 MATLAB 中创建了一个 MEX 文件和一个网关 mexFunction 虽然可以在 MATLAB 中读取读取值 但我无法检索它来使用它 如果不清楚 我有与这里完全相
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • MATLAB 符号替换

    我知道在 MATLAB 中如果声明了 syms x y f x 2 y 2 grad gradient f 然后grad会存储值 2 x 2 y 如果我想评估梯度 2 2 I use subs f x y 2 2 这返回 4 4 我正在编写
  • Matlab的uicontrol在Octave中的实现?

    我正在尝试在 Octave 中运行我们实验室中使用的图形程序的 m Matlab 代码 Octave 告诉我代码中使用的函数 uicontrol 没有定义 经过一番搜索 我发现 JHandles 包有一个 uicontrol GUI 功能的

随机推荐