本文将指导你使用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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录