【问题标题】:Plot ROC curve in Matlab在 Matlab 中绘制 ROC 曲线
【发布时间】:2016-12-26 18:15:39
【问题描述】:

我需要在 matlab 中绘制 ROC 曲线。我有两个数组,一个包含真阳性率,一个包含假阳性率。我已经尝试了plotrocperfcurve 将两个数组作为输入,但它似乎不起作用。还有另一种方法可以用我拥有的数据绘制 ROC 曲线吗?

编辑 为了回答 Tasos Papastylianou,我发布了一张图片:

只是绘制两个数组,它看起来并不像 ROC 曲线:S

EDIT2 上传数组倒置的图像,仍然不像 ROC!

EDIT3 显示我的 ROC 曲线图的图像,在 [0,1] 中归一化 []3

【问题讨论】:

  • ROC 曲线实际上是 FP 与 TP。为什么不直接使用普通的绘图命令?
  • @TasosPapastylianou 嗨,我试过了,但我得到的东西离 ROC 曲线很远。我编辑了这篇文章,这样你就可以看到这个简单的情节会发生什么!
  • 你的意思是形状?不。你并不总是得到教科书般的平滑曲线。这取决于验证次数、阈值影响分类的方式等
  • 另外,你的坐标轴不是从零开始的。将轴从 0 标准化为 1,绘图会更有意义
  • 没问题。是的。我敢肯定,如果您添加更多验证运行,特别是对于更多“极端”阈值((即完全接受或拒绝该类的无用阈值),它看起来会更像您的预期。

标签: matlab roc


【解决方案1】:

我想我会用一个不错的 ROC 曲线示例发布一个正确的答案,展示我们在 cmets 中讨论的内容:

%% Create datasets

[X,Y] = ndgrid(1:100,1:100);

% Ground Truth image
Circle= zeros(100); Circle((X-50).^2 + (Y-50).^2 - 500 <= 0) = 1;

% Test image (parameterised by threshold)
pkg load statistics % if using octave - needed for 'mvnpdf'
pkg load image      % if using octave - needed for 'mat2gray'
Gaussian = mvnpdf([X(:), Y(:)], [45, 45], [500,0;0,500]);
Gaussian = reshape(Gaussian, size(X));
Gaussian = mat2gray(Gaussian);

%% Generate ROC curve for a range of thresholds
ThresholdRange = 0 : 0.025 : 1;
TPs = zeros(size(ThresholdRange));
FPs = zeros(size(ThresholdRange));
Ind = 0;
for Threshold = ThresholdRange 
  Ind = Ind + 1;
  TP = Circle .* (Gaussian > Threshold);
  T  = Circle;
  TPR = sum(TP(:)) / sum(T(:));
  TPs(Ind) = TPR;

  FP = (1 - Circle) .* (Gaussian > Threshold);
  N  = (1 - Circle);
  FPR = sum(FP(:)) / sum(N(:));
  FPs(Ind) = FPR;
end

%% Plotski curvski
plot(FPs, TPs, 'linewidth', 3, 'marker', 'o', 'markersize',10,'markeredgecolor', 'k', 'markerfacecolor', 'g');
hold on; 
plot(ThresholdRange, ThresholdRange, 'r-.', 'linewidth', 3);
axis([0,1,0,1]);
title('Les Curves du ROC! Ooh-la-la!', 'fontsize', 16);
xlabel('Le Rate des Positifs Falses! Oh mon dieu!', 'fontsize', 14);
ylabel('Le Rate des Positifs Vrais! Magnifique!', 'fontsize', 14);
grid on;

【讨论】:

    【解决方案2】:

    感谢@TasosPapastylianou 提供的 cmets,我解决了。为了在绘图中获得更好的结果,我在 x 轴(或误报率)上对两个数组进行排序。再次感谢@TasosPapastylianou !!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2017-09-11
      • 2016-02-05
      • 1970-01-01
      • 2016-02-04
      • 2019-02-27
      • 2021-03-03
      相关资源
      最近更新 更多