|||
张老师科普概率悖论,以王宏血捡为例谈患病的概率【1】。科学网热议时,我正在智利、阿根廷旅游。高同学亢声惊人【2】,被围殴抱头而去【3】。后来多人谈贝叶斯,很是娱乐,高空论剑,云遮雾绕,惘者益惘,不信者仍然不服,待我到家,已是笑渐不闻声渐消了。
科学网博文中贝叶斯科普确实不错。但是高同学咭言,从检查结果得到患病概率不必用贝叶斯公式计算,直接从混淆矩阵统计就可得出,这个知识点被大家忽略了。这既怪他理解模糊,也怪围殴者把混淆打成了糊涂,其实这矩阵表达的是辨识混淆的状态分布,是可以直接从中得到王宏得病概率的。
自从1998年Ron Kohavi和FosterProvost用混淆矩阵(confusion matrix)来说明预测误差与分类辨识的关系,得以厘清识别训练追求的目标,它已成为机器学习以及数据科学的基本知识。以此来解释各种误差指标和预测的效用,远比通过概率和贝叶斯公式来得直观清晰。下面普及混淆矩阵这个知识点,不从主观概率角度,只用统计比例来谈王宏患病的可能性。
混淆矩阵可以用于多类的辨识,最基本的辨识是二值分类,它与实际分类的组合有真阳性(TP),假阳性(FP),假阴性(FN),真阴性(TN),即辨识正确和错误混淆的四种情况。把检验辨识正误结果的样本数量分别放在这四种情况的表中,称为混淆矩阵。通常它是在测试机器辨识功能时,统计结果得到的。
在王宏的故事里,血检对有这病和无这病分别有1%的误判率,有这病只占0.1%的人口,下面是一个模拟符合这分布数据的混淆矩阵例子。它具有100000个测试样本。
实际情况 辨识结论 | 阳性 B | 阴性 ~B |
有病 A | TP =99 | FN = 1 |
无病 ~A | FP = 999 | TN = 98901 |
表1
用此可以统计各种误差指标的比率。有病情况下检查出阳性的比率,称为敏感度(sensitivity),P(B|A) = TP/(TP+FN) = 99%;无病查出阴性的比率,称为特异度(specificity),P(~B|~A) =TN/(FP+TN) = 99%;有病样本的比率P(A) = (TP+FN)/All = 0.1%,All = TP+FN +FP+TN;被检查出阳性被证实有病的比率(准确度 precision)P(A|B) = TP/(TP+FP) = 99/(99+999) = 9%,与讨论中用贝叶斯公式算出来的一样。这些都是直接从混淆矩阵中得到的统计结果。这里P是比率的意思,不涉及到概率的概念,仅是用相同的符号表达矩阵中测试结果统计出的比率值。注意到在检测中样本阳性的比率 P(B) = (TP+FP)/All,不难从它们定义中得出P(A|B)=P(B|A)P(A)/P(B)的关系。
如果这些样本的取样,符合实际人群的分布,那么这些统计的比率就可以解释成概率,个体如果不是自外于统计群体中的芸芸众生,这些概率便是预测的可能性。表中得出的比率关系P(A|B)=P(B|A)P(A)/P(B)便是贝叶斯公式。根据检查出阳性的信息B,可以把王宏患病的估计P(A),改进到P(A|B),贝叶斯公式联系起它们。所谓的先验概率是指在得到B知识之前,对A的估计P(A),后验概率指之后的估计P(A|B)。从表中可以很清晰地看到这后验之于先验估计,其实是限于阳性B,把原来涉及到全表四个变数的估计,排除到只需要阳性B这一列的两个变数。信息改善了估计,这便是贝叶斯公式的哲学含义,如此而已。
为什么不用人们熟悉的精确度来估量预测的功效?因为通常精确度(accuracy)指的是正确辨识的比率Acc = (TP+TN)/All,它用于分类预测中会引起很大的误解。例如这个例子中精确度Acc = 99%,如果机器坏了,血检总是给出阴性平安无事的报告,因为有病的人只占0.1%,它的辨识精确度达到Acc = 99.9%,比机器没坏前还高。人们习惯误用熟悉的指标,所以平庸无为往往比勇于任事有更好的考绩。
混淆矩阵可以让你清晰地了解分类辨识中混淆的可能,以此可以定义不同预测效用的指标,让机器学习在训练中追求,以形成合适的辨识智能。例如保安系统的异常检测,要求敏感度很高,机场检测门,机器宁可误响让人随后搜身,也不希望错过。高同学也属敏感度很高的学术异见者,尽管误报率也很高,对促进科学网讨论还是很有贡献的。分类预测常用的更好指标是F1 = 2/(1/P(A|B)+1/P(B|A)) = 2TP/(2TP+FP+FN) ,它追求有均衡敏感度和准确率。例如上面例子的F1=99%,机器坏了时F1=0. 有兴趣可以阅读【4】及机器学习有关的课文。
对于预测的准确率P(A|B),人们感到不解的是:分类辨识检测的是样本模式,验血查王宏血样的模式,查的就是所有可能模式中的哪一种,这跟世界人民多少得病有毛关系?
比如说王宏故事中血样有200种模式,机器把其中100种归结为阳性,对了99种,又错失了1种,即有1%的假阳性和1%的假阴性,把它们列为混淆矩阵如下:
所有模式 辨识结论 | 阳性 B | 阴性 ~B |
有病模式 A | TP =99 | FN = 1 |
无病模式 ~A | FP = 1 | TN = 99 |
表2
验血查的是王宏不是世界人民,他的阳性指标说明他的血样符合99个真的有病模式和1个误判的模式之一,按此,有病的可能性P(A|B) = 99%,干嘛还要扯上世界人民来个贝叶斯?
这是高同学、黄同学的主张。请不翻书,别往下看,沿着他们的思路认真想一想,这有错吗?
。
。
。
。
。
。
表1计算王宏是9%概率有病,表2是99%,两个混淆矩阵对预测的准确率P(A|B)计算出的数值不同,它们的差异在于,表1是按照人群患病的比例来取样统计的,而表2是按照血样的模式来统计的。到底该用哪一种来计算预测的准确率?
机器检测查的是给定的样本,其敏感度P(B|A)和特异度P(~B|~A)只辨识模式,确实与其他人患病率无关。用这两个表计算结果都是一样的。但计算预测的准确率,却不能将论域中所有的模式的出现视为均等。这准确率指的是,到底有多少个(而不是多少种)真正有病的模式被机器认为是有病的。在表2中,有病和无病模式各有100种,但从统计得知有病只占0.1%,也就是说这100种的无病模式出现个数的频率是有病模式的999倍,检查为假阳性的那个误测模式个数出现的比率也比表2增大了999倍。王宏的患病可能性与其他人无关,但他血样各种模式的出现频率却可以由人群中统计得知。这时就需要用贝叶斯公式的计算来修正。而表1中的样本已经直接反映了这些模式的个数分布,在这例子中血检阳性说明,王宏的血样是99个不同有病模式和999个同一种误判模式之一的情况,所以这时不需要贝叶斯公式,便能直接得出预测的准确率是99/(99+999)=9%.
王宏血检阳性后有9%可能患病,马上再做一次血检,用贝叶斯公式有助于改进概率估计吗?不必深究条件概率的理解,模式辨识的混淆矩阵告诉你这不可能。两次概率完全是一样的,除非你考究人为和噪音的误差。
检测报告讲概率找抽吗?你落后了。我每次做检查都要一份报告自己看,美国血检报告异常项的确有时附上统计患何病的比率,提醒进一步检查。它贴心告诉的是预测准确率,而不是给出敏感度,让你纠结怎么去计算。
【参考资料】
张天蓉博文,概率论悖论http://blog.sciencenet.cn/blog-677221-1042909.html
高山博文,我用公式说明科学网一个概率问题的错误http://blog.sciencenet.cn/blog-907017-1043262.html
杨正瓴博文,概率论-统计学学派:袁贤讯、高山、徐晓、张天蓉…http://blog.sciencenet.cn/blog-107667-1048435.html
Wikipedia,Confusionmatrix https://en.wikipedia.org/wiki/Confusion_matrix
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-21 22:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社