资阳抖音搜索优化,上海外贸seo公司,wordpress会员注册,友情链接seo文章目录 前言一、混淆矩阵二、准确率三、精确率召回率四、F1分数五、ROC 曲线六、AUC#xff08;曲线下面积#xff09;七、P-R曲线类别不平衡问题中如何选择PR与ROC 八、 Python 实现代码混淆矩阵、命中率、覆盖率、F1值ROC曲线、AUC面积 指标 公式 意义 真正例 (TP)被… 文章目录 前言一、混淆矩阵二、准确率三、精确率召回率四、F1分数五、ROC 曲线六、AUC曲线下面积七、P-R曲线类别不平衡问题中如何选择PR与ROC 八、 Python 实现代码混淆矩阵、命中率、覆盖率、F1值ROC曲线、AUC面积 指标 公式 意义 真正例 (TP)被模型预测为正的正样本即预测为正样本且预测结果为真假正例 (FP)被模型预测为正的负样本即预测为正样本且预测结果为假真负例 (TN)被模型预测为负的正样本即预测为负样本且预测结果为假假负例 (FN)被模型预测为负的负样本即预测为负样本且预测结果为真准确率Accuracy A c c u r a c y T P T N T P T N F P F N Accuracy\frac{TPTN}{TPTNFPFN} AccuracyTPTNFPFNTPTN模型正确分类的样本占总样本数的比例精确率Precision P r e c i s i o n T P T P F P Precision\frac{TP}{TPFP} PrecisionTPFPTP模型预测为正类别的样本中有多少是真正的正类别召回率(Recall) /真正率TPR R e c a l l / T P R T P T P F N Recall/TPR\frac{TP}{TPFN} Recall/TPRTPFNTP召回率也称为 True Positive Rate (TPR) 或灵敏度是指在所有实际为正类别的样本中模型能够正确预测为正类别的比例特异度 (TNR) T N P T N T N F P TNP\frac{TN}{TNFP} TNPTNFPTN特异度(True Negative Rate)是指在所有实际为负类别的样本中模型能够正确预测为负类别的比例高特异度意味着模型能够有效地将实际为负类别的样本正确分类。假正率FPR F P F P T N \frac{FP}{FPTN} FPTNFPFalse Positive Rate (FPR) 是指在所有实际为负类别的样本中模型错误预测为正类别的比例 FPR 与特异度有关是衡量模型在负类别样本中的误判程度。假负率FNR F N F N T P \frac{FN}{FNTP} FNTPFNFalse Negative Rate (FNR) 是指在所有实际为正类别的样本中模型错误预测为负类别的比例FNR 表示模型在正类别样本中的遗漏程度即未能正确识别的正类别样本比例F1 分数(F1-score) F 1 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n R e c a l l F1\frac{2 \cdot Precision \cdot Recall }{Precision Recall } F1PrecisionRecall2⋅Precision⋅RecallF1 分数是精确率和召回率的调和平均数它综合了两者的性能 前言 根据分类模型和回归模型的不同相应的评价标准也不尽相同例如在分类模型中就有以下 8 种不同的评价标准。 一、混淆矩阵 混淆矩阵是评价分类模型性能的基础它展示了模型的预测结果核真实标签之间的对应关系。混淆矩阵由4个指标构成分别是 记忆小窍门第一个字母 T / F 代表是否分类正确。第二个字母 P / N 代表预测结果
真正例 (True PositiveTP)假正例 (False PositiveFP)真负例 (True NegativeTN)假负例 (False NegativeFN)
通过计算这4个指标可以得到模型的准确率、精确率、召回率和F1得分。 真正例 (True PositiveTP)被模型预测为正的正样本即预测为正样本且预测结果为真所以样本实际是正样本假正例 (False PositiveFP)被模型预测为正的负样本即预测为正样本且预测结果为假所以样本实际是负样本真负例 (True NegativeTN)被模型预测为负的正样本即预测为负样本且预测结果为假所以样本实际是正样本假负例 (False NegativeFN)被模型预测为负的负样本即预测为负样本且预测结果为真所以样本实际是负样本 混淆矩阵的指标预测性分类模型肯定是希望越准越好。那么对应到混淆矩阵中那肯定是希望TP与TN的数量大而FP与FN的数量小。混淆矩阵里面统计的是个数有时候面对大量的数据光凭算个数很难衡量模型的优劣。 混混淆矩阵是评估分类模型性能的基础目的是帮助理解分类模型在不同类别上的表现。通过将模型的分类结果分成真正类别True和错误类别False帮助计算多种重要的性能指标以量化模型在不同类别上的表现例如准确率、精确率、召回率和F1分数。这些指标帮助我们量化模型的分类准确性、可靠性和全面性。 二、准确率 准确率ACC是衡量分类模型性能最直观的指标之一它表示模型正确分类的样本数与总样本数之间比。准确率越高表示模型的分类结果月准确。然而准确率不能完全反映模型的性能因为在样本不均衡的情况下准确率可能会出现较高的偏差。此时需要借助其他指标来综合评价模型。 A C C T P T N T P F P T N F N ACC\frac{TPTN}{TPFPTNFN} ACCTPFPTNFNTPTN 三、精确率召回率
精确率 精确率 (Precision) 是指模型预测为正例的样本中真正为正例的比例。精确率越高表示模型将负例预测为正例的能力越强即假正例的数量越少。精确率可以帮助我们评估模型的分类准确性特别是在关注假正例数量的应用场景中 P r e c i s i o n T P T P F P Precision\frac{TP}{TPFP} PrecisionTPFPTP召回率 召回率 (Recall) 是指真正为正例的样本中被预测为正例的比例。召回率越高表示模型将真正为正例的样本正确检测出来的能力越强即假负例的数量越少。召回率可以帮助我们评估模型的分类完整性特别是在关注假正例数量的应用场景中。 R e c a l l T P T P F N Recall\frac{TP}{TPFN} RecallTPFNTP 可以发现当假正即预测为正样本且预测结果为假FP的样本数越少准确率就越高。相应的对应 FN 就越大召回率就越小。 如果我们只预测最可能为正的那一个样本为正其余的都为负那么这时候我们的查准率很可能为 100%同样的道理预测为正的样本越多即 FP 越大相应的对应 FN 就越小召回率就越大准确率也就越小 如果我们把所有的样本都预测为正其余的都为负那么此时的召回率必然为 100% 上面这句话也就说明了我们分别用准确率或召回率对模型的预测结果进行评价会有片面性。所以基于上面的片面性引出了一个新的标准F1度量F-Score 精确率和召回率两个概念但在实际建模过程中这两个指标往往是此消彼长的召回率越高准确率越低反之亦然。所以想要找到二者之间的一个平衡点就需要一个新的指标F1分数。F1分数同时考虑了查准率和查全率让二者同时达到最高取一个平衡。 四、F1分数 F1分数是精确率和召回率的调和平均值它综合考虑了分类模型的准确性和完整性。 F 1 2 T P 2 T P F N F P 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n R e c a l l F1\frac{2TP}{2TPFNFP}\frac{2 \cdot Precision \cdot Recall }{Precision Recall } F12TPFNFP2TPPrecisionRecall2⋅Precision⋅Recall F1 分数的取值范围是 [0, 1]越接近 1 表示模型的性能越好同时考虑到了模型在查准率和查全率之间的平衡。F1 分数对于二元分类问题非常有用特别是当我们希望在精确率和召回率之间取得平衡时。在样本不均衡的情况下F1分数比准确率更能反映模型的性能。 五、ROC 曲线 接受者操作特性曲线receiver operating characteristic curve简称ROC曲线。该曲线最早应用于雷达信号检测领域用于区分信号与噪声。后来人们将其用于评价模型的预测能力ROC曲线是基于混淆矩阵得出的。它反映了模型在不同阈值下的分类性能。 逻辑回归里面对于正负例的界定通常会设一个阈值大于阈值的为正类小于阈值为负类。 如果我们减小这个阀值更多的样本会被识别为正类提高正类的识别率但同时也会使得更多的负类被错误识别为正类。 举个例子逻辑回归对正负结果的判定默认是 0.5模型预测的结果如果超过 0.5 则确定样本预测结果为正否则样本预测为负但是当我们将0.5 提高到 0.8则 0.8 以下的就都预测为负了。 为了直观表示这一现象引入 ROC 曲线根据分类结果计算得到空间中相应的点连接这些点就形成 ROC curve ROC曲线中的主要两个指标就是真正率和假正率其中横坐标为假正率FPR纵坐标为真正率TPR当二者相等时表示的意义则是对于不论真实类别是1还是0的样本分类器预测为1的概率是相等的此时AUC为0.5。 ROC曲线绘制 ROC曲线的横坐标为FPR纵坐标为TPR 将预测结果按照预测为正类概率值排序 将阈值由1开始逐渐降低按此顺序逐个把样本作为正例进行预测每次可以计算出当前的FPRTPR值 以TPR为纵坐标FPR为横坐标绘制图像 ROC 曲线中有四个点需要注意分别是 点(0,1)即 FPR0, TPR1意味着 FN0 且 FP0将所有的样本都正确分类。点(1,0)即 FPR1TPR0最差分类器避开了所有正确答案。点(0,0)即FPRTPR0FPTP0分类器把每个实例都预测为负类。点(1,1)分类器把每个实例都预测为正类。 ROC 曲线越接近左上角该分类器的性能越好其泛化性能就越好。最靠近左上角的ROC曲线上的点是分类错误最少的最好阈值其假正例和假反例总数最少。而且一般来说如果ROC是光滑的那么基本可以判断没有太大的过拟合。 总结: ROC曲线ROC曲线(receiver operating characteristic curve) 是反映灵敏性和特效性连续变量的综合指标是用构图法揭示敏感性和特异性的相互关系它通过将连续变量设定出多个不同的临界值从而计算出一系列敏感性和特异性ROC曲线是根据一系列不同的二分类方式分界值或决定阈以真正例率True Positive Rate,TPR 也就是灵敏度为纵坐标假正例率False Positive Rate,FPR1-特效性为横坐标绘制的曲线。 ROC曲线优缺点 优点 : 1、兼顾正例和负例的权衡。因为TPR聚焦于正例FPR聚焦于与负例使其成为一个比较均衡的评估方法。适用于评估分类器的整体性能。2、ROC曲线的两个指标 TPR的分母是所有正例FPR的分母是所有负例故都不依赖于具体的类别分布。 缺点 在类别不平衡的背景下当负例N的数量远超正例P时FP的大幅增长只能换来FPR的增长不明显导致ROC曲线呈现一个过分乐观的效果估计。如果主要关心正例的预测准确性的话这就不太可接受了。 六、AUC曲线下面积 如果两条ROC曲线没有相交我们可以根据哪条曲线最靠近左上角哪条曲线代表的学习器性能就最好。但是实际任务中情况很复杂如果两条ROC曲线发生了交叉则很难一般性地断言谁优谁劣。在很多实际应用中我们往往希望把学习器性能分出个高低来。在此引入AUC面积。 AUC(Area Under Curve) 被定义为 ROC 曲线下的面积( ROC 的积分)通常大于0.5小于1。 随机挑选一个正样本以及一个负样本分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器性能越好如图 上图中 AUC1 当然是最好的 这代表着将所有的样本都正确分类但是实际 AUC 是达不到 1 的这种极端情况下只能说明样本数据是存在问题需要再次筛选模型入模特征。
AUC只能用来评价二分类。AUC非常适合评价样本不平衡中的分类器性能 AUC的一般判断标准 AUC的范围在[0, 1]之间并且越接近1越好 0.5-0.7 效果较低但用于预测股票已经很不错了0.7-0.85 效果一般0.85-0.95 效果很好0.95-1 效果非常好但一般不太可能 AUC的概率意义: 随机取一对正负样本正样本得分大于负样本得分的概率 AUC的物理意义: 曲线下面积对所有可能的分类阈值的效果进行综合衡量。曲线下面积的一种解读方式是看作模型将某个随机正类别样本排列在某个随机负类别样本之上的概率。以下面的样本为例逻辑回归预测从左到右以升序排列 AUC的优点和缺点 优点 AUC衡量的是一种排序能力因此特别适合排序类业务AUC对正负样本均衡并不敏感在样本不均衡的情况下也可以做出合理的评估。其他指标比如precisionrecallF1根据区分正负样本阈值的变化会有不同的结果而AUC不需要手动设定阈值是一种整体上的衡量方法。 缺点 忽略了预测的概率值和模型的拟合程度AUC反映了太过笼统的信息无法反映召回率、精确率等在实际业务中经常关心的指标它没有给出模型误差的空间分布信息AUC只关注正负样本之间的排序并不关心正样本内部或者负样本内部的排序这样我们也无法衡量样本对于好坏客户的好坏程度的刻画能力 AUC计算 AUC如果按照原始定义ROC曲线下的面积来计算非常之麻烦。 可以转换一下思路按照上述给出的常用的AUC定义即随机选出一对正负样本分类器对于正样本打分大于负样本打分的概率。咱们就来算算这个概率到底是多少那么也就算出AUC是多少了。 假设数据集一共有M个正样本N个负样本预测值也就是MN个。我们将所有样本按照预测值进行从小到大排序并排序编号由1到MN。 对于正样本概率最大的假设排序编号为 r a n k 1 rank_1 rank1 比它概率小的负样本个数 r a n k 1 − M rank_1-M rank1−M 仔细体会一下对于正样本概率第二大的 r a n k 2 rank_2 rank2 假设排序编号为 比它概率小的负样本个数 r a n k 2 − ( M − 1 ) rank_2-(M-1) rank2−(M−1) ;以此类推…对于正样本概率最小的假设排序编号为 r a n k M rank_M rankM 比它概率小的负样本个数 r a n k M − 1 rank_M-1 rankM−1 那么在所有情况下正样本打分大于负样本的个数 r a n k 1 r a n k 2 ⋯ r a n k M − ( 1 2 ⋯ M ) rank_1rank_2\cdotsrank_M-(12\cdotsM) rank1rank2⋯rankM−(12⋯M) 。 所以AUC的正式计算公式也就有了如下需要牢记 A U C ∑ i ∈ 正样本 r a n k ( i ) − M × ( 1 M ) 2 M × N AUC\frac{\sum_{i \in 正样本}rank(i)-\frac{M \times(1M)}{2}}{M \times N} AUCM×N∑i∈正样本rank(i)−2M×(1M) r a n k ( i ) rank(i) rank(i)表示正样本 i i i 的排序编号 M × N M \times N M×N表示随机从正负样本各取一个的所有情况数。一般考代码题比如用python写个AUC计算也是用上述公式原理。 但是还没有完有一个小问题可能大家没注意到。那就是如果有预测值是一样的那么怎么进行排序编号呢 其实很简单对于预测值一样的样本我们将这些样本原先的排号平均一下作为新的排序编号就完事了。仔细理解可看下图 上图中正样本个数M5黄底样本负样本个数N3白底样本预测值相同有4个ID为CDEF。我们将预测值pred相等的情况上图红色字体对其进行新的排序编号变成(3456)/4 4.5。
那么根据公式就可以算出上图的 A U C ( 2 4.5 5.5 7 8 ) − 5 × ( 5 1 ) 2 5 × 3 0.7333 AUC \frac{(24.55.578)-\frac{5 \times (51)}{2}}{5 \times 3}0.7333 AUC5×3(24.55.578)−25×(51)0.7333
用sklearn的auc计算验证一下一样。 七、P-R曲线 精确率和召回率是互相影响的有时会相互矛盾理想情况下肯定是做到两者都高但是一般情况下精确率高、召回率就低召回率低、精确率高当然如果两者都低那就是有地方出问题了。 对于分类器来说本质上是给一个概率此时我们再选择一个 CutOff 阈值点高于这个点的判正低于的判负其中这个点的选择需要结合你的具体场景去选择。
用不同的阀值统计出一组不同阀值下的精确率和召回率如下图 PR曲线绘制 PR曲线的横坐标为召回率R纵坐标为查准率P绘制步骤如下 将预测结果按照预测为正类概率值排序 将概率阈值由1开始逐渐降低按此顺序逐个把样本作为正例进行预测每次可以计算出当前的PR值 以P为纵坐标R为横坐标绘制点将所有点连成曲线后构成PR曲线。 如何利用PR曲线对比算法的优劣 如果一条曲线完全“包住”另一条曲线则前者性能优于另一条曲线P和R越高代表算法分类能力越强。 PR曲线发生了交叉时以PR曲线下的面积作为衡量指标但这个指标通常难以计算 使用 “平衡点”Break-Even Point他是查准率查全率时的取值值越大代表效果越优 BEP过于简化更常用的是F1度量 曲线越靠近右上边性能越好描述曲线下方面积叫 AP 分数Average Precision ScoreAP 分数越高表示模型性能越好。 但是有时候模型没有单纯的谁比谁好和文章开头的例子一样需要结合具体的使用场景。下面是两个场景 地震的预测我们希望的是 Recall 非常高也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲 Precision。情愿发出 1000次 警报把 10次 地震都预测正确了也不要预测 100次 对了 8次 漏了 2次。嫌疑人定罪基于不错怪一个好人的原则对于嫌疑人的定罪我们希望是非常准确的。即时有时候放过了一些罪犯Recall 低但也是值得的。 所以针对场景如果是做搜索那就是保证召回的情况下提升精确率如果做 疾病监测、反垃圾则是保证精确率的条件下提升召回在两者都要求高的情况下可以用 F1 来衡量。 反过来场景会决定训练模型时的标准比如第一个场景中我们就只看Recall99.9999%地震全中时的 Precision其他指标就变得没有了意义。 注意一下PR 和 ROC 是两个不同的评价指标和计算方式一般情况下检索用 PR分类、识别等用 ROC。 类别不平衡问题中如何选择PR与ROC 这里特指负样本数量远大于正样本时在这类问题中我们往往更关注正样本是否被正确分类即TP的值。PR曲线更适合度量类别不平衡问题 因为在PR曲线中TPR和FPR的计算都会关注TPPR曲线对正样本更敏感。 而ROC曲线正样本和负样本一视同仁在类别不平衡时ROC曲线往往会给出一个乐观的结果。 八、 Python 实现代码
混淆矩阵、命中率、覆盖率、F1值
#随机森林模型
model RandomForestClassifier(random_state12,n_estimators 300,class_weight{0:1,1:8},min_samples_split8, min_samples_leaf5,max_depth6)
model.fit(x_train, y_train)输出混淆矩阵
#混淆矩阵中会给出命中率、覆盖率、F1值
import sklearn.metrics as metrics
pre_test model.predict(x_test) #predict 默认阈值0.5 predict_proba 是没有默认阈值
print(metrics.confusion_matrix(y_test, pre_test, labels[0, 1])) # 混淆矩阵集的f1值
print(metrics.classification_report(y_test, pre_test))ROC曲线、AUC面积
from sklearn import metrics
import matplotlib.pyplot as pltfpr, tpr, _ metrics.roc_curve(labels, preds)
roc_auc metrics.auc(fpr, tpr)plt.figure(figsize(8, 7), dpi80, facecolorw) # dpi:每英寸长度的像素点数facecolor 背景颜色
plt.plot(fpr, tpr, colordarkorange, lw2, labelROC curve (area %0.2f) % roc_auc) # 绘制AUC面积
plt.plot([0, 1], [0, 1], colornavy, lw2, linestyle--)
plt.xlim([0.0, 1.05])
plt.ylim([0.0, 1.05])
plt.xlabel(False Positive Rate)
plt.ylabel(True Positive Rate)
plt.title(Receiver operating characteristic)
plt.legend(loclower right) # 设置显示标签的位置
plt.grid(bTrue, ls:) # 绘制网格作为底板;b是否显示网格线ls表示line style
plt.show()from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt将多个模型的ROC曲线绘制在一张图
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt##计算ROC值
fpr1, tpr1, thresholds1 roc_curve(y_test, y_prob1)
roc_auc1 roc_auc_score(y_test, y_prob1)fpr2, tpr2, thresholds2 roc_curve(y_test, y_prob2)
roc_auc2 roc_auc_score(y_test, y_prob2)# 绘制ROC曲线
plt.plot(fpr1, tpr1, colordarkorange, labelLR ROC curve (area %0.2f) % roc_auc1)
plt.plot(fpr2, tpr2, colorblue, labelSVM ROC curve (area %0.2f) % roc_auc2)plt.plot([0, 1], [0, 1], colornavy, linestyle--)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel(False Positive Rate)
plt.ylabel(True Positive Rate)
plt.title(Receiver operating characteristic (ROC) curve)
plt.legend(loclower right)
plt.show()参考 分类模型评估方法 分类问题的 8 种评估方法全 精确率、召回率、F1值、ROC、AUC各自的优缺点