上一节讲了当遇到偏斜类的时候,如何对算法效果进行评价,使用查准率和召回率。在很多实际应用中,我们还希望能在查准率和召回率间进行权衡,使得两个指标都取得不错的结果。 权衡查准率和召回率的例子 还是用逻辑回归来进行癌症分类的例子,如下图。图中右上角框起来的是上节讲的“查准率”和“召回率”的定义公式,忘了的可以翻翻上一节的内容。 ? 我们就搞两个模型,一个是高查准率、低召回率的;一个是高召回率、低查准率的。 ? 对于大多数回归模型,你更改这个临界值(threshold)会改变查准率、召回率。 一种办法,算查准率P和召回率R的均值,如下图。 而到底怎样的查准率、召回率的取值比较好,可以使用F1值进行权衡。 又或者,可以同时两个模型并存:(1)高查准率、低召回率;(2)高召回率,低查准率。
对于λ选取,通常可以先从0开始,然后0.01、0.02、0.04…逐渐2倍的增大,直到确定一个最优的值。 2、高偏差(欠拟合) 高偏差情况下,即x的次数太低,此时很快就无法用假设函数来表达训练集了,而训练集的数量再增加也没有很大的意义。 2、正例与反例 为了明确查准率和召回率,需要先说正例和反例的概念,一共有四个名词:真正例(true positive,简称TP)、真反例(true negative,TN)、假正例(false positive 2、查准率 查准率,表示的是真正例占所有预测结果是正例的比例,即查准率=TP/(TP+FP),其衡量的是算法的正确性。 当若干算法,在同一个样本下,有不同的查准率和召回率时,通常有一个标准来确定哪个算法最优:F1=2PR/(P+R)。F1越大的表示算法越优秀。
P(Precision) 查准率:就是上面说的"准"。字面意思好理解呀,就是在预测当中查找准确个数的比例。 真正预测准确的数量/所有真正好的数量 = 4 / 5 F值是: F(k) = ( 1 + k ) * P * R / ( ( k*k ) * P + R ) 注释:k>0 度量了 查全率 对 查准率 k>1查全率有更大影响;k<1查准率有更大影响。 在这个实例中可以表示为:k>1就是查全率有更大影响,就是好的香蕉最好都预测出来,因为你觉得不想把好的当成坏的扔点( 真可惜,我爱吃啊 ) ;k<1查准率有更大影响,就是一定要准确,省时间,省力更重要,不在乎好的香蕉当坏的扔点 此时: F(1) = 2 * P * R / ( P + R ) 代码实现: 背景:用evalList的长度是我需要求的P,R,F1的个数,比如我的实验是立场检测,分类为FAVOR(支持),AGAINST
尝试更大的神经网络或者更小的神经网络 尝试 dropout 尝试 L2 正则化 改变神经网络的结构: 如果你使用了错误的方向,不仅会浪费大量的时间,而且不会有所改善. 查准率,查全率,F1 分数 假设现在你需要识别猫的图片,并且你已经开发出了 A 和 B 两个分类器.评估你的分类器的方式是观察他的查准率(precesion)和查全率(recall) ? Precision 查准率 在你的分类器标记为猫的例子中,有多少真的是猫.95% 的机会表示当你的分类器认为这是一只猫时,95%的机会分类正确. 事实证明,虽然使用查准率和查全率来评估一个分类器是十分合理的,但是查准率和查重率之间往往需要一个折衷. 例如如果出现 A 分类器在查全率上表现得更好,但是 B 分类器在查准率上表现得更好. F1 分数 在机器学习的文献中,权衡查准率 P 和查全率 R 的方法是计算 P 和 R 的调和平均值(harmonic mean)即 F1 分数. ?
这样,对于总是预测病人肿瘤为良性的算法,其查全率是 0 ---- 11.4 查准率和查全率之间的权衡 Trading Off Precision and Recall 首先回顾 查准率(Precision ) 和 查全率(Recall) 的定义,其中 查准率(Precision)=TP/(TP+FP) 例,在所有预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。 如果 希望只在非常确信的情况下预测为真(肿瘤为恶性) ,即希望 更高的查准率 ,可以使用比 0.5 更大的阀值,如 0.7,0.9。 对于同一个机器学习系统不同的阈值往往对应 不同的查准率和查全率 ,那如何选择阈值才能平衡查准率和查全率,使其都有较好的结果呢? ? F1 值 使用 F1 值: 其中 P 表示 查准率 ,R 表示 查全率 。选择 F1 值最高的阈值。
from sklearn.metrics import mean_squared_error y_true = [3, -0.5, 2, 7] y_pred = [2.5, 0.0, 2, 8] mean_squared_error pipe_svc.predict(X_test) confmat = confusion_matrix(y_true=y_test, y_pred=y_pred) print(confmat) [[71 1] [ 2 综合考虑查准率,查全率的度量 当 查准率=查全率 时的点,谁大谁比较优。 F1 度量: 也是综合考虑查准率,查全率的度量,比 BEP 更常用: ? 则查全率有更大影响,β < 1 则查准率有更大影响,β = 1 则为 F1。 All (OvA) 分类问题 这时会在 n 个二分类问题上综合考虑查准率,查全率。 宏~ :先在每个混淆矩阵上计算率,再求平均 宏查准率 ? 宏查全率 ? 宏 F1 ?
可以这么理解,假如我用某种方法得到样本是正例的概率(如用模型对所有样本进行预测),然后把样本按概率排序,从高到低 如果模型把第一个预测为正,其余预测为负,此时查准率为1,查全率接近于0, 如果模型把前2 或者固定查全率,比较查准率。 β>0,β度量了查全率对查准率的重要性,β=1时即为F1 β>1,查全率更重要,β<1,查准率更重要 多分类的F1 多分类没有正例负例之说,那么可以转化为多个二分类,即多个混淆矩阵,在这多个混淆矩阵上综合考虑查准率和查全率 ,即多分类的F1 方法1 直接在每个混淆矩阵上计算出查准率和查全率,再求平均,这样得到“宏查准率”,“宏查全率”和“宏F1” ? 方法2 把混淆矩阵中对应元素相加求平均,即 TP 的平均,TN 的平均,等,再计算查准率、查全率、F1,这样得到“微查准率”,“微查全率”和“微F1” ? ?
02 查准率与查全率 在讨论查准查全的数学公式之前,我们先来探讨:针对二元分类问题,应该如何正确评估一份预测结果的效果。 沿用上面的数学记号。如图2所示,图中标记为1的方块表示 ? ,但 ? 的数据;标记为2的方块表示 ? ,且 ? 的数据。而且这些图形的面积与对应数据的数据量成正比,比如, ? ,且 ? 的数据个数越多,标记2的面积越大。 这表现在图形上,就是标记2的面积很大,而标记3的面积很小。 另一方面也希望它能做到“全面”:对于几乎所有的 ? ,对应的预测值 ? 也等于1。在图形上,这表示标记2的面积很大,而标记1的面积很小。 于是,对应地定义查准率(precision)和查全率(recall)这两个技术指标(有的文献里,将查准率翻译为精确率;将查全率翻译为召回率)来评估一份预测结果的效果。比较直观的定义如图2所示。 ? 公式(1) 经过进一步的推导,可以得到这两个技术指标的概率定义,如公式(2)。从概率上来讲:预测值等于1时,真实值等于1的概率为查准率;真实值等于1时,预测值等于1的概率为查全率。 ?
一般来说,查准率高时,召回率往往偏低;召回率高时,查准率往往偏低。 通常只有在一些简单任务中,才能同时获得较高查准率和召回率。 查准率和召回率在不同应用中重要性也不同。 7个样本;预测结果中,A类别有3个样本预测准确,另外各有1个被预测成了B和C;B类别有4个预测准确,另外2个被预测成了C类别;C类别7个全部预测准确,但有1个本属于A类别、2个本属于B类别的被预测成了C 根据混淆矩阵,查准率、召回率也可表示为: 查准率 = 主对角线上的值 / 该值所在列的和 召回率 = 主对角线上的值 / 该值所在行的和 ④ 实验 利用sklearn提供的朴素贝叶斯分类器分类,并打印查准率 常用的训练集、测试集比例有:9:1, 8:2, 7:3等. 训练集和测试的划分,尽量保持均衡、随机,不能集中于某个或少量类别. 有些公共数据集在创建时,已经进行了划分.
其中用到了评估度量值:查准率(precision)和召回率(recall)。如下图: ? 我们将算法预测的结果分为 4 中情况: 1.正确肯定(True Positive): 预测为真,结果为真 2.正确否定(True Negative): 预测为假,结果为假 3.错误肯定(False Positive 可以知道,查准率是在所有我们预测结果为真的情况下,预测成功的概率;召回率是在所有实际结果为真的情况下,我们预测成功的概率。 权衡查准率和召回率 回顾逻辑回归算法: ? 当我们把临界值 0.5 增大,查准率就会增大而召回率就会减小,当我们把临界值 0.5 减小,查准率就会减小而召回率就会增大。 ? 根据 F1 值的定义,当查准率和召回率其中有一个为 0 时,F1 值就为 0,因此 F1 值可以作为评估度量值。
介绍 在机器学习中,性能度量主要体现在三个指标: 查准率(P)、查全率(R)、F1 。 def performance(tp, fn, fp, tn): # 查准率 P = tp / float(tp + fp) # 查全率 R = tp / float(tp + fn) # F1 F1 = (2 * P * R) / (P + R) # print P, R, F1 return P, R, F1 ... ... P, R, F1 = performance(white_pixels, red_pixels, green_pixels, black_pixels) print '查准率 P = {:>.3f}, P = tp / float(tp + fp) # 查全率 R = tp / float(tp + fn) # F1 F1 = (2 * P * R) / (P
对于二分类任务,混淆矩阵是2x2矩阵。如果有三个不同的类,它就是3x3矩阵,以此类推。 ? 假设A类是正类,B类是反类。 混淆矩阵的用途是计算查准率和查全率。 查准率与查全率(Precision & Recall) 查准率(又称准确率)和查全率(又称召回率)相比分类精度来说更进一步,使我们对模型评估有了更加具体的了解。 查准率衡量的是我们的分类器预测正类的准确性 ? 查准率的重点在于准确地预测正类,它显示了我们预测的正类中有多少是真正的正类。 我们不可能同时提高查准率与查全率,因为这二者仿佛鱼和熊掌,不可兼得。提高查准率会降低查全率,反之亦然。根据任务的不同,我们可以最大限度地提高查准率或查全率中的某一个。 还有一种指标把查准率与查全率结合了起来,这就是F1度量。 F1度量(F1 Score) F1度量是查准率与查全率的调和平均的倒数。 ?
accuracy = (TP+TN)/(P+N) accuracy = 1-error_rate 错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例; error_rate = 2. 查准率、查全率和F1 查准率(准确率)P = TP/(TP+FP) 查全率(召回率)R = TP/(TP+FN) F1值:F1 = 2/(1/R + 1/P) = 2*P*R/(P+R) 查准率和查全率是一对矛盾的指标 ,一般来说,查准率高时,查全率往往偏低,而查全率高时,查准率往往偏低;平衡点BEP是查准率= 查全率时的取值,当一个学习期的BEP高于另一个学习器的,则可以认为该学习器优于另一个; 但BEP过于简化,更常用的是 F1值;另外再一些应用中可能对查准率和查全率的重视程度不同,可以对它们施加不同的偏好,定义为: 3.ROC和AUC ROC曲线的纵轴是“真正例率”(TPR),横轴是假正例率(FPR), 其中TPR =
(划分比例通常情况下是8:2 或7:3) 留出法(hold-out),即从数据集中分层采样(stratified sampling)出约30%的数据作为测试集。 1.查准率、查全率与F1 A.查准率(precision):被认定为正例的里面,判断正确的比例。 B.查全率(recall):真实正例里,被判断出为正例的比例。 C.F1衡量查准率与查全率 ? .一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低,可以通过P-R曲线来取两者的平衡值 ? "平衡点"是"查准率=查全率"时的取值。 但更常用的使用F1来衡量查准率与查全率; F1基于查准率与查全率的调和平均: ? sum为样例总数,具体应用中可能对P和R有不同的倚重。 2.准确率和错误率 这一般是分类器采用的指标。而且不但二分类可以用,也可以扩充到多分类的情况。
,Recall指标在中卫里常被称为查全率或者是召回率,查准率 P 和查全率 R 分别定义为: 查准率P和查全率R的具体含义如下: 查准率(Precision)是指在所有系统判定的“真”的样本中,确实是真的的占比 ,一般而言,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。 通常只有在一些简单任务中,才可能使查全率和查准率都很高。 再说PRC, 其全称就是Precision Recall Curve,它以查准率为Y轴,、查全率为X轴做的图。它是综合评价整体结果的评估指标。 上图就是一幅 P-R 图,它能直观地显示出学习器在样本总体上的查全率和查准率,显然它是一条总体趋势是递减的曲线。 下图的2,3小图就是目标检测效果比较好的情况。
收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本 2. 基于邮件的路由信息开发一系列复杂的特征 3. 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理 4. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法 2. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择 3. 两种度量:查准率(Precision)和查全率(Recall) 查准率(Precision)和查全率(Recall)我们将算法预测的结果分成四种情况: 1. 正确肯定(True Positive , TP):预测为真,实际为真 2. 正确否定(True Negative , TN):预测为假,实际为假 3. 如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比0.5 更小的阀值,如0.3 一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
from sklearn import metrics print('模型精度:',metrics.accuracy_score(y_test,y_predict)) 二、查准率(precision) 查准率 P与查全率 R 分别定义为 ? 查准率和查全率是一对矛盾的度量.一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。 F1-score,是统计学中用来衡量二分类模型精确度的一种指标。 y_predict,trainY))) print('解释方差分:{}'.format(metrics.explained_variance_score(y_predict,trainY))) print('R2得分 :{}'.format(metrics.r2_score(y_predict,trainY)))
scikit-learn releases 页面:https://github.com/scikit-learn/scikit-learn/releases F1 分数的定义:查准率是指预测结果中,每个类别预测正确的比例 两者的分母不同,查准率的分母是预测结果的样本数,召回率的分母是样本标签的样本数。F1 分数是查准率和召回率的调和平均值。 问题原因:在计算 F1 分数时,如果某个类别的查准率和召回率都为 0,那么根据 zero_division 参数的设定,F1 分数可能被赋值为 1.0 或 np.nan,而非正确的 0.0。 如果存在任何一个类别的查准率和召回率都为 0,而对应的 F1 分数为 1.0 或 nan,那么这个 F1 分数的计算就是错误的。 但要注意了解这一参数变化将如何影响查准率吧、召回率和 F1 分数! ️
2 评估方法 通常,我们可以通过实验测试来对学习器的[泛化误差]进行评估,并进而做出选择。 我们假设测试样本是从样本真实分布中[独立同分布]采样而来。 [查准率]和[查全率]则更适用于此类需求的性能度量。 查准率P与查全率R分别定义为, ? 以查准率作为纵轴,查全率作为横轴作图,就得到了[查准率]-[查全率]曲线,简称"P-R曲线", ? 查准率和查全率是一对矛盾的度量。 人们设计了一些综合考虑查准率、查全率的性能度量。[平衡点](Break-Even Point,简称BEP)就是这样一个度量,它是[查准率]=[查全率]时的取值。 在一些应用中,对查准率和查全率的重视程度有所不同。从而有了F1度量的一般形式, ? 系数β>1时查全率有更大影响;β<1时,查准率有更大影响。
接下来我们介绍查全率与查准率: 查准率: ? (预测为真正例的样本数÷所有预测为正例的样本数) 查全率: ? 第二个数2/2:预测结果为正,样本显示为正,此时有两个正样本且均被预测正确,TP=2,TP+FP=2,则查全率=2/2 …… 第五个数4/5:预测结果为正,样本显示为负,此时预测有五个正样本但只预测准确四个 F1分数认为召回率和准确率同等重要; F2分数认为召回率的重要程度是准确率的2倍; F0.5分数认为召回率的重要程度是准确率的一半。 于是下面我们引入了宏观查准率、查全率、F1 和 微观查准率、查全率、F1。 宏(macro-)查准率、查全率、F1 先在各个混淆矩阵中计算出查准率和查全率(P1,R1)(P2,R2)……(Pn,Rn),再计算平均值 ?