本站所有资源均为高质量资源,各种姿势下载。
pre-rec.m是一个用于计算和绘制Precision-Recall(PR)曲线的MATLAB源码。PR曲线是一种用于评估二分类模型性能的常用工具,特别适用于不平衡数据集。
以下是pre-rec.m的源码及其详细说明:
function [precision, recall] = pre_rec(scores, labels, num_thresholds)
% PRE_REC calculates precision and recall values for different thresholds
% scores: the predicted scores or probabilities for positive class
% labels: the ground truth labels (0 or 1)
% num_thresholds: the number of thresholds to use for calculating precision and recall
% Sort the scores in descending order
[sorted_scores, sorted_indices] = sort(scores, 'descend');
sorted_labels = labels(sorted_indices);
% Initialize variables
num_samples = numel(scores);
thresholds = linspace(1, num_samples, num_thresholds);
% Calculate precision and recall for different thresholds
precision = zeros(1, num_thresholds);
recall = zeros(1, num_thresholds);
for i = 1:num_thresholds
threshold = thresholds(i);
predicted_labels = (sorted_scores >= threshold);
tp = sum(predicted_labels & sorted_labels); % True Positives
fp = sum(predicted_labels & ~sorted_labels); % False Positives
fn = sum(~predicted_labels & sorted_labels); % False Negatives
precision(i) = tp / (tp + fp);
recall(i) = tp / (tp + fn);
end
% Plot the PR curve
plot(recall, precision, '-o');
xlabel('Recall');
ylabel('Precision');
title('Precision-Recall Curve');
end
在上述代码中,我们首先将预测分数(或概率)和真实标签按照分数降序排序,并根据提供的阈值数量生成一系列阈值。然后,我们使用不同的阈值计算精确率(precision)和召回率(recall)。
精确率定义为真正例(True Positives)除以真正例和假正例(False Positives)之和,表示分类为正例的样本中真正例的比例。
召回率定义为真正例除以真正例和假反例(False Negatives)之和,表示所有正例中被正确分类的比例。
最后,我们将计算得到的精确率和召回率绘制成PR曲线。
使用pre_rec函数,你可以计算并绘制PR曲线,以评估分类模型的性能。确保在调用pre_rec函数之前,你已经准备好了预测分数和真实标签。
除了PR曲线外,你还可以扩展该代码来计算和绘制ROC曲线。ROC曲线是另一种评估二分类模型性能的常用工具,它以假正例率(False Positive Rate)为横坐标,真正例率(True Positive Rate)为纵坐标。
以下是扩展后的代码,用于计算和绘制ROC曲线:
function [tpr, fpr] = roc_curve(scores, labels, num_thresholds)
% ROC_CURVE calculates true positive rate (TPR) and false positive rate (FPR) values for different thresholds
% scores: the predicted scores or probabilities for positive class
% labels: the ground truth labels (0 or 1)
% num_thresholds: the number of thresholds to use for calculating TPR and FPR
% Sort the scores in descending order
[sorted_scores, sorted_indices] = sort(scores, 'descend');
sorted_labels = labels(sorted_indices);
% Initialize variables
num_samples = numel(scores);
thresholds = linspace(1, num_samples, num_thresholds);
% Calculate TPR and FPR for different thresholds
tpr = zeros(1, num_thresholds);
fpr = zeros(1, num_thresholds);
for i = 1:num_thresholds
threshold = thresholds(i);
predicted_labels = (sorted_scores >= threshold);
tp = sum(predicted_labels & sorted_labels); % True Positives
fp = sum(predicted_labels & ~sorted_labels); % False Positives
tn = sum(~predicted_labels & ~sorted_labels); % True Negatives
fn = sum(~predicted_labels & sorted_labels); % False Negatives
tpr(i) = tp / (tp + fn);
fpr(i) = fp / (fp + tn);
end
% Plot the ROC curve
plot(fpr, tpr, '-o');
xlabel('False Positive Rate');
ylabel('True Positive Rate');
title('ROC Curve');
end
使用roc_curve函数,你可以计算并绘制ROC曲线,以进一步评估分类模型的性能。同样,确保在调用roc_curve函数之前,你已经准备好了预测分数和真实标签。
希望这些代码能帮助你计算和绘制PR曲线和ROC曲线,并更好地评估分类模型的性能。如果有任何疑问,请随时提问。