在MATLAB中绘制接收者操作特征(ROC)曲线是评估分类器性能的常用方法,特别是在小目标检测任务中。ROC曲线展示了在不同阈值下,分类器的真正例率(True Positive Rate, TPR)与假正例率(False Positive Rate, FPR)之间的关系。MATLAB代码用于计算和绘制ROC曲线。
1. 数据准备
假设你已经有一个分类器的输出结果,包括每个测试样本的预测概率(或分数)以及它们的真实标签。以下是一个示例数据的生成方法:
% 示例数据
num_samples = 1000; % 样本数量
scores = rand(num_samples, 1); % 分类器输出的预测概率
true_labels = randi([0, 1], num_samples, 1); % 真实标签(0或1)
2. 计算ROC曲线
使用MATLAB的perfcurve
函数可以方便地计算ROC曲线。该函数返回真正例率(TPR)、假正例率(FPR)和阈值。
% 计算ROC曲线
[X, Y, T, AUC] = perfcurve(true_labels, scores, 1);
% X: 假正例率 (FPR)
% Y: 真正例率 (TPR)
% T: 阈值
% AUC: 曲线下面积 (Area Under the Curve)
3. 绘制ROC曲线
使用plot
函数绘制ROC曲线,并添加必要的标签和标题。
% 绘制ROC曲线
figure;
plot(X, Y, 'LineWidth', 2);
hold on;
plot([0, 1], [0, 1], 'k--', 'LineWidth', 1.5); % 绘制随机分类器的对角线
hold off;
% 添加标题和标签
title('ROC Curve for Small Object Detection');
xlabel('False Positive Rate (FPR)');
ylabel('True Positive Rate (TPR)');
legend('Classifier', 'Random', 'Location', 'southeast');
grid on;
% 显示AUC值
disp(['AUC: ', num2str(AUC)]);
4. 代码
将上述步骤合并为一个完整的MATLAB脚本:
% 示例数据
num_samples = 1000; % 样本数量
scores = rand(num_samples, 1); % 分类器输出的预测概率
true_labels = randi([0, 1], num_samples, 1); % 真实标签(0或1)
% 计算ROC曲线
[X, Y, T, AUC] = perfcurve(true_labels, scores, 1);
% 绘制ROC曲线
figure;
plot(X, Y, 'LineWidth', 2);
hold on;
plot([0, 1], [0, 1], 'k--', 'LineWidth', 1.5); % 绘制随机分类器的对角线
hold off;
% 添加标题和标签
title('ROC Curve for Small Object Detection');
xlabel('False Positive Rate (FPR)');
ylabel('True Positive Rate (TPR)');
legend('Classifier', 'Random', 'Location', 'southeast');
grid on;
% 显示AUC值
disp(['AUC: ', num2str(AUC)]);
参考源码 MATLAB 对于小目标检测,绘制roc曲线 youwenfan.com/contentcnb/79358.html
5. 结果分析
- ROC曲线:曲线越接近左上角,分类器性能越好。
- AUC值:AUC值越接近1,表示分类器性能越好。AUC值为0.5表示分类器性能与随机猜测相当。