以下是用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 著作权归作者所有。请勿转载和采集!

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