Matlab 代码计算五折交叉验证的 AUROC 和 AUPR
以下是计算五个子集的 AUROC 和 AUPR 的 Matlab 代码:
% 设置参数
num_folds = 5; % 子集数量
num_samples = 1000; % 样本数量
% 初始化变量
labels = zeros(num_samples, num_folds); % 存储真实标签
scores = zeros(num_samples, num_folds); % 存储预测值
auroc_values = zeros(num_folds, 1); % 存储每个子集的 AUROC
aupr_values = zeros(num_folds, 1); % 存储每个子集的 AUPR
% 读取数据
for fold = 0:num_folds-1
filename = sprintf('hw2_fold_%d.csv', fold);
data = csvread(filename);
labels(:, fold+1) = data(:, 1);
scores(:, fold+1) = data(:, 2);
end
% 计算每个子集的 AUROC 和 AUPR
for fold = 1:num_folds
labels_fold = labels(:, fold);
scores_fold = scores(:, fold);
[X,Y,T,auroc_values(fold)] = perfcurve(labels_fold, scores_fold, 1);
aupr_values(fold) = trapz(X, Y);
% 绘制 ROC 曲线
figure(fold);
plot(X,Y);
xlabel('False Positive Rate');
ylabel('True Positive Rate');
title(sprintf('ROC Curve - Fold %d', fold));
% 绘制 PR 曲线
figure(fold+num_folds);
plot(Y, X);
xlabel('Recall');
ylabel('Precision');
title(sprintf('PR Curve - Fold %d', fold));
end
% 计算五个子集的 AUROC 和 AUPR 的均值
mean_auroc = mean(auroc_values);
mean_aupr = mean(aupr_values);
% 合并数据并计算整个大数据集的 AUROC 和 AUPR
labels_all = reshape(labels, [], 1);
scores_all = reshape(scores, [], 1);
[X_all,Y_all,T_all,auroc_all] = perfcurve(labels_all, scores_all, 1);
aupr_all = trapz(X_all, Y_all);
% 绘制整个大数据集的 ROC 曲线
figure(num_folds+1);
plot(X_all, Y_all);
xlabel('False Positive Rate');
ylabel('True Positive Rate');
title('ROC Curve - All Folds');
% 绘制整个大数据集的 PR 曲线
figure(num_folds+2);
plot(Y_all, X_all);
xlabel('Recall');
ylabel('Precision');
title('PR Curve - All Folds');
请注意,上述代码中使用了perfcurve函数来计算 AUROC,并使用trapz函数来计算 AUPR。最后,通过计算五个子集的 AUROC 和 AUPR 的均值,可以与整个大数据集的 AUROC 和 AUPR 进行比较。
原文地址: https://www.cveoy.top/t/topic/nhQx 著作权归作者所有。请勿转载和采集!