错误出现在计算 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 了。

MATLAB 错误解决:trapz 函数输入问题及修正

原文地址: https://www.cveoy.top/t/topic/nh8L 著作权归作者所有。请勿转载和采集!

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