MATLAB 错误解决:trapz 函数输入问题及修正
错误出现在计算 AUROC 和 AUPR 时的 trapz 函数的使用上。根据错误提示,trapz 函数的输入应该是向量,但在这里 fpr 和 tpr 不是向量,而是矩阵。
要解决这个错误,需要将 fpr 和 tpr 转换为向量。可以使用矩阵的 (:) 操作符将矩阵展开为列向量。
修改后的代码如下:
function [auroc, aupr] = calculate_metrics(groundtruth, predictions)
% 根据预测值进行降序排列
[~, idx] = sort(predictions, 'descend');
groundtruth = groundtruth(idx);
n = length(groundtruth);
tp = cumsum(groundtruth == 1);
fp = (1:n) - tp;
tn = sum(groundtruth == 0) - cumsum(groundtruth == 0);
fn = sum(groundtruth == 1) - tp;
tpr = tp ./ (tp + fn);
fpr = fp ./ (fp + tn);
precision = tp ./ (tp + fp);
auroc = trapz(fpr(:), tpr(:)); % 将 fpr 和 tpr 转换为向量
aupr = trapz(tpr(:), precision(:)); % 将 tpr 和 precision 转换为向量
end
这样修改后,应该就能正确计算 AUROC 和 AUPR 了。
原文地址: https://www.cveoy.top/t/topic/nh8L 著作权归作者所有。请勿转载和采集!