使用Matlab计算五折交叉验证数据集的AUROC和AUPR并画图
本文将指导你使用Matlab编程计算五折交叉验证数据集的AUROC和AUPR,并画图展示结果。代码中不使用现成的AUROC和AUPR计算函数,并计算五个子集的AUROC和AUPR的均值。此外,还将五个文件合并到一起,计算整个大数据集的AUROC和AUPR,并与均值进行比较。
假设你的五个子集数据分别存储在 hw2_fold_0.csv, hw2_fold_1.csv, hw2_fold_2.csv, hw2_fold_3.csv, hw2_fold_4.csv 文件中,每个文件的第一列是真实标签,第二列是预测值。
以下是计算五个子集的AUROC和AUPR并画图的Matlab代码:
% 读取五个子集的数据
data = zeros(0, 2);
for i = 0:4
filename = sprintf('hw2_fold_%d.csv', i);
fold_data = csvread(filename);
data = [data; fold_data];
end
% 计算AUROC
thresholds = unique([data(:, 1); data(:, 2)]);
thresholds = sort(thresholds, 'descend');
tpr = zeros(length(thresholds), 1);
fpr = zeros(length(thresholds), 1);
for i = 1:length(thresholds)
threshold = thresholds(i);
tp = sum(data(:, 1) >= threshold);
fn = sum(data(:, 1) < threshold);
tpr(i) = tp / (tp + fn);
fp = sum(data(:, 2) >= threshold);
tn = sum(data(:, 2) < threshold);
fpr(i) = fp / (fp + tn);
end
auroc = trapz(fpr, tpr);
% 计算AUPR
precision = zeros(length(thresholds), 1);
recall = zeros(length(thresholds), 1);
for i = 1:length(thresholds)
threshold = thresholds(i);
tp = sum(data(:, 1) >= threshold);
fn = sum(data(:, 1) < threshold);
precision(i) = tp / (tp + fp);
recall(i) = tp / (tp + fn);
end
aupr = trapz(recall, precision);
% 画AUROC曲线
figure;
plot(fpr, tpr);
xlabel('False Positive Rate (FPR)');
ylabel('True Positive Rate (TPR)');
title('Receiver Operating Characteristic (ROC) Curve');
% 画AUPR曲线
figure;
plot(recall, precision);
xlabel('Recall');
ylabel('Precision');
title('Precision-Recall (PR) Curve');
% 输出AUROC和AUPR的均值
mean_auroc = mean(auroc);
mean_aupr = mean(aupr);
% 计算整个大数据集的AUROC和AUPR
tp = sum(data(:, 1) >= 0);
fn = sum(data(:, 1) < 0);
fp = sum(data(:, 2) >= 0);
tn = sum(data(:, 2) < 0);
tpr = tp / (tp + fn);
fpr = fp / (fp + tn);
auroc_total = trapz(fpr, tpr);
precision = tp / (tp + fp);
recall = tp / (tp + fn);
aupr_total = trapz(recall, precision);
disp(['AUROC的均值: ', num2str(mean_auroc)]);
disp(['AUPR的均值: ', num2str(mean_aupr)]);
disp(['整个大数据集的AUROC: ', num2str(auroc_total)]);
disp(['整个大数据集的AUPR: ', num2str(aupr_total)]);
注意:
- 以上代码假设数据文件中的第一列是真实标签,第二列是预测值。如果数据文件的格式不同,请根据实际情况进行修改。
- 代码中使用了
trapz函数来计算曲线下面积,它是一种数值积分方法。 - 代码最后使用
disp函数输出结果,以便你方便地查看结果。
希望这份代码能够帮助你计算和分析你的五折交叉验证数据集。
更多参考:
原文地址: https://www.cveoy.top/t/topic/nhAA 著作权归作者所有。请勿转载和采集!