用MATLAB计算和绘制五个子集的AUROC和AUPR
以下是用MATLAB编写的代码,用于计算五个子集的AUROC和AUPR,并绘制图形:
% 计算AUROC和AUPR
function [auroc, aupr] = calculateMetrics(labels, predictions)
% 按照预测值降序排序
[~, sortedIndices] = sort(predictions, 'descend');
sortedLabels = labels(sortedIndices);
% 计算正负例的总数
numPositives = sum(labels == 1);
numNegatives = sum(labels == 0);
% 初始化计算指标
tp = 0; % 真正例数
fp = 0; % 假正例数
auroc = 0; % AUROC
aupr = 0; % AUPR
% 计算AUROC
for i = 1:length(sortedLabels)
if sortedLabels(i) == 1
tp = tp + 1;
else
fp = fp + 1;
auroc = auroc + tp; % 累加真正例数
end
end
auroc = auroc / (tp * fp); % 归一化
% 计算AUPR
recall = tp / numPositives;
precision = tp / (tp + fp);
aupr = precision * recall;
end
% 读取五个子集的数据并计算指标
filenames = {'hw2_fold_0.csv', 'hw2_fold_1.csv', 'hw2_fold_2.csv', 'hw2_fold_3.csv', 'hw2_fold_4.csv'};
aurocValues = zeros(1, 5);
auprValues = zeros(1, 5);
for i = 1:5
data = csvread(filenames{i});
labels = data(:, 1);
predictions = data(:, 2);
[auroc, aupr] = calculateMetrics(labels, predictions);
aurocValues(i) = auroc;
auprValues(i) = aupr;
end
% 绘制AUROC和AUPR的图形
figure;
subplot(2, 1, 1);
bar(aurocValues);
xlabel('Fold');
ylabel('AUROC');
title('AUROC for Each Fold');
subplot(2, 1, 2);
bar(auprValues);
xlabel('Fold');
ylabel('AUPR');
title('AUPR for Each Fold');
% 计算五个子集的AUROC和AUPR的均值
meanAuroc = mean(aurocValues);
meanAupr = mean(auprValues);
% 合并五个文件并计算整个数据集的指标
combinedData = [];
for i = 1:5
data = csvread(filenames{i});
combinedData = [combinedData; data];
end
combinedLabels = combinedData(:, 1);
combinedPredictions = combinedData(:, 2);
[combinedAuroc, combinedAupr] = calculateMetrics(combinedLabels, combinedPredictions);
% 输出结果
disp('AUROC for each fold:');
disp(aurocValues);
disp('AUPR for each fold:');
disp(auprValues);
disp('Mean AUROC:');
disp(meanAuroc);
disp('Mean AUPR:');
disp(meanAupr);
disp('AUROC for combined data:');
disp(combinedAuroc);
disp('AUPR for combined data:');
disp(combinedAupr);
请注意,此代码假设每个文件都是以CSV格式存储的,其中第一列是真实标签,第二列是预测值。您需要将代码中的文件名替换为实际的文件名。
在运行代码后,您将获得每个子集的AUROC和AUPR值,并绘制出相应的图形。此外,代码还计算了这五个子集的AUROC和AUPR的均值,并将这五个文件合并为一个数据集,计算整个数据集的AUROC和AUPR。
最后,代码将输出每个子集的AUROC和AUPR值,以及均值和整个数据集的AUROC和AUPR值。您可以将这些值与之前计算的均值进行比较,以验证它们是否相等。
原文地址: https://www.cveoy.top/t/topic/nhvL 著作权归作者所有。请勿转载和采集!