精确率和召回率

以下以二分类为例子进行说明

在了解精确率和召回率之前,我们先了解几个概念

TP(True Positive):实际为正,分类器预测为正
FP(False Positive):实际为负,分类器预测为正
TN(True Negative):实际为负,分类器预测为负
FN(False Negative):实际为正,分类器预测为负

精确率

P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP

其表示分类器预测为正确的分类中究竟有多少是正确的

召回率

R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP

其表示实际为正确的有多少是真正分类正确的

F1值

F 1 = 2 T P 2 T P + F P + F N F_1=\frac{2TP}{2TP+FP+FN} F1=2TP+FP+FN2TP

其是精确率和召回率的调和均值,由 2 F 1 = 1 P + 1 R \frac{2}{F_1}=\frac{1}{P}+\frac{1}{R} F12=P1+R1推导而来

### 如何在 Python 中计算优化机器学习中的精确召回率 #### 计算精确召回率 为了评估分类模型的效果,除了准确之外,还需要关注精确召回率。这两个度量能够更细致地反映模型的表现。 精确衡量的是预测为正类的结果中有多少是真的正类;而召回率则表示所有真实正类中被正确识别的比例[^1]。 ```python from sklearn.metrics import precision_score, recall_score import numpy as np # 假设 y_true 是真实的标签列表,y_pred 是对应的预测结果 y_true = [0, 1, 1, 0, 1] y_pred = [0, 1, 0, 0, 1] precision = precision_score(y_true, y_pred) recall = recall_score(y_true, y_pred) print(f'Precision: {precision}') print(f'Recall: {recall}') ``` 这段代码展示了如何利用 `sklearn` 库来快速获取给定数据集上的精确召回率得分。 #### 优化精确召回率 由于精确召回率之间存在权衡关系,在某些应用场景下可能需要优先提升其中一个指标,而在其他场景下又希望能够找到两者的最佳平衡点——即最大化F1分数[^2]。 一种常见的做法是在调整决策边界时观察不同阈下的性能变化: ```python from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.datasets import make_classification X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42) model = LogisticRegression() X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3, random_state=42) model.fit(X_train, y_train) probs = model.predict_proba(X_test)[:, 1] thresholds = np.arange(0.0, 1.0, 0.05) precisions = [] recalls = [] for threshold in thresholds: preds = (probs >= threshold).astype('int') precisions.append(precision_score(y_test, preds)) recalls.append(recall_score(y_test, preds)) best_f1_index = np.argmax([2 * p * r / (p + r) for p, r in zip(precisions, recalls)]) optimal_threshold = thresholds[best_f1_index] print(f"Optimal Threshold: {optimal_threshold}") ``` 通过遍历不同的概并记录相应的精确召回率,最终选取使得F1分数最大的那个作为最优阈[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值