Advertisement

白话 贝叶斯公式_贝叶斯定理能干点啥

阅读量:

微博上有人贴这么个问题,跟贴讨论的不少:

有一种病的患病几率是

1%,有一种仪器能用来检测这种病,检测的正确率是99%。如果一个人被仪器判断得了这种病,事实上患病的几率是多大。

(原文有语病。我给修正了一下。)

有人在跟贴里指出,这个问题其实最好的解题方法就是用贝叶斯定理。因为,这个问题本来是一本概率论教材里的问题,是在讲贝叶斯定理的时候出的示范题,只不过那位微博博主把原题里的零件故障率换成了患病率。

通常我是看到数学就绕着走。但是看到有这么热烈的讨论,然后说有个贝叶斯定理能轻松解答这个题目,我就想看看这个贝叶斯定理是何方神圣。

既然看了,就把我的理解写下来吧,算是强化自己的记忆。然后,谁有兴趣知道的,我这篇白话级别的东西或许也能有点帮助。

先简单介绍一下这位贝叶斯大爷。他全名托马斯-贝叶斯,英国人,1701年出生,活了59岁,本行是个神父。您听说“神父”俩字大概就觉得这些人神神叨叨的跟科学不搭界。其实未必。文艺复兴期间,欧洲不少神父致力于研究科学,而且颇有贡献。比如这位贝叶斯,特喜欢琢磨数学,然后就因为这个贝叶斯定理名垂千古了。

贝叶斯定理能管的事,如果要用一句话形容,就是:有附带条件的概率。

这话怎么讲?

啥叫“概率”您应该不是太生疏。比如您今天出门会遇到下雨吗?这就是个概率问题。这话如果说得文气一点,就可以说成“您如果今天出门,遇到下雨的概率有多高?”

然后咱假设有人把这话加了个变数:如果您一大早看到天色是阴天,那么如果您今天出门会遇到下雨吗?

这个“如果……”,就是附带条件。

附带条件很可能会让事件的发生率有改变。比如您如果一到早看到满天红霞,多半就信心满满,穿上小褂迈步就出门。可是如果抬头一看是阴天,您这心里可能就要犯嘀咕:咱是不是该带把伞?

这个时候,如果您熟记贝叶斯定理,手头又有往年的一些数据,比如“本地下雨之前先见到阴天的概率有多大?”,“本月份通常一个月里有几天会下雨?”,那么您就可以用贝叶斯定理迅速推算出今天下雨的概率到底有多大。

注意:贝叶斯定理计算的是“可能性”,也就是说,如果阴天,可能下雨——但是未必下雨。这种时候,可以查一下相关因素的”可能性“有多高,然后用贝叶斯定理来算出精确的发生概率。如果两个事件的因果关系不是“可能”而是确定的,比如“人如果砍头必定会死”,这就不需要劳动贝叶斯他老人家了。

贝叶斯定理是个数学公式。这个公式其实不算特别恐怖,写出来是这样:

不算太高端吧?别说西格玛(Σ)这样的大杀器,人家连平方都没用,就是个乘法和除法。

不过,这些符号都啥意思呢?

这里的P(),意思是“发生……的可能性”。写成P是因为英文里“可能性”是

probability,就取了这个词的头一个字母做代表了。

然后,A是主要事件,比如上面那个问题里的“下雨”。B是附加条件,就是上面说的“一大早看到阴天”。我们也可以把它当作另一个事件,叫做B事件。

知道了P,A,和B的意思,那么,再来看贝叶斯的那些花花肠子是表示什么:

P(A) 比较直截了当,意思就是“发生A的可能性”。

P(B) 自然就是“发生B的可能性”了。

P(A|B) 稍微有点花哨,这意思是“假设有B这样的前提,于是发生A的可能性”。

P(B|A) 也类似,倒过来说而已:“假设有A这样的前提,于是发生B的可能性”。

用数学语言解说一下贝叶斯公式,就是:有B事件的情况下,A事件出现的概率,等于有A事件的情况下,B事件出现的概率,乘以A事件的总体出现概率,除以B事件的总体出现概率。

注意一个规律:贝叶斯公式找线索的时候,走了个逆反路线:如果想知道B事件预示A事件的概率,就先要知道A事件预示B事件的概率。

如果能找到这个反向概率的数据,再加上A事件自己的总体概率和B事件自己的总体概率。有这几个数据,就能玩玩贝叶斯定理了。

把这个意思套进下雨问题里,就是:在看到阴天的情况下,真正下雨的概率,等于以往下雨之前,先有阴天的概率,乘以平日下雨的总体概率,除以平日阴天的总体概率。

咱用前面说的下雨概率来试试看怎么玩。为了打字方便,后面的公式就用网络格式了,就是用“/”表示除号。那么,上面那个公式,现在写出来是这样是:

P(A|B) = P(B|A) * P(A)

/ P(B)

咱就说A事件表示的是下雨,B事件表示的是阴天。那么这个公式就可以这么写:

P(下雨 | 阴天) = P(阴天 | 下雨) * P(下雨) /

P(阴天)

用口语来说:

P(下雨 | 阴天):如果阴天,接着会下雨的概率

P(阴天 | 下雨):下雨之前出现阴天的概率

P(下雨):平日里下雨的概率

P(阴天):平日里阴天的概率

注意第一行和第二行并不是同一个意思换一种说法。这两句话说的是不一样的内容。用一个比较容易想清楚的例子来说明:喝酒之后开车出事故的可能性可以是90%,但是开车出事故之前喝酒的可能性却可以是10%——还有很多别的因素可以导致事故,比如疲劳驾驶,不遵守交规。

关于阴天和下雨的这些概率,我们现在不知道。不过,通常这都可以在气象局网站上查到。我们假设查到的数字是这样:

有50%的雨天,之前都出现早上阴天。

平日里有40%的时候早上都是阴天。

平日里,一个月30天里有3天会下雨,也就是说平日里下雨的概率是10%。

您看到第一行,或许会觉得,糟了,一半的雨天,之前都有阴天。那么我今天一早看到阴天,就是说有一半的机会要下雨了。

真是这样吗?

咱用贝叶斯的公式给算算看。

先用贝叶斯的符号,把上面那几个数字给写得高端大气一点:

P(下雨 | 阴天):如果阴天,下雨的概率 —— 待计算

P(阴天 | 下雨):下雨之前出现阴天的概率 = 50%

P(下雨):平日里下雨的概率 = 10%

P(阴天):平日里阴天的概率 = 40%

符号表达有了,公式就好写了:

P(下雨 | 阴天) = P(阴天 | 下雨) * P(下雨) /

P(阴天)

把具体数字代进去:

P(下雨 | 阴天) = 0.5 * 0.1 / 0.4 = 0.125 =

12.5%

也就是说,虽然一早看到阴天,但是根据以往的气象数据,今天下雨的可能其实只有12.5%。还不算太糟糕。出门踏青可能还是应该带伞,如果只是上班,可以考虑空手出门。

贝叶斯是把一种计算概率的过程给凝练成了这么个公式。这里面的意思,如果用日常语言来理解,大致是这样:除号之前的那两个数相乘,就是说,“下雨之前有阴天的概率”乘以“平日里下雨的概率”,得出的是“阴天之后真的下雨的概率”。

但是我们知道,不是每个阴天接下来都必定下雨的。有些阴天随后有雨,这样的阴天是真警报。有些阴天随后放晴,这样的阴天是假警报。一年里,可能有过100天是一大早出现阴天,但是其中可能只有若干天随后下雨。我们想知道的是这个“若干”到底是多少。

这其实就是说要算一下,在“所有的阴天里,真的随后会下雨的阴天占多大比例”。

这就是为什么上面的公式里,除号右边是P(阴天)。这个P(阴天)就是推测“所有的阴天”的概率。

我们再走一个类似的例子,熟悉一下套路:

比如,如果我们看到树林里冒烟,这是不是说明树林里起了野火呢?假设根据林业部数据,我们知道:

90%的情况下,野火导致林中冒烟

平日里野火发生率:1%(就是说每100天里有1天可能发生野火)

平日里林中冒烟发生率:10%

用贝叶斯的符号来表示,A事件是野火,B事件是冒烟:

P(野火 | 冒烟):看到冒烟,有多大可能是野火?(待计算)

P(冒烟 | 野火):有野火的时候,有多大可能从树林外面看到冒烟?(90%)

P(野火):平时发生野火的概率有多高?(1%)

P(冒烟):平时看到树林冒烟的概率有多大?(10%)

那么,代入公式:

P(野火 | 冒烟)= P(冒烟 | 野火) * P(野火)/ P(冒烟)= 90% * 1% / 10% =

9%

就是说,根据以往的数据推算,如果从树林外看到有冒烟,那么有9%的可能是真的林中起火了。

跟下雨的计算一样,除号前面那两个概率相乘,是算出“真表示起火的冒烟”的概率。然后,这个数字应该除以“总共有多少冒烟的可能”。这个“总共有多少冒烟的可能”,包括了那些真的起火的冒烟,也包括只冒烟其实没起火的假冒烟(比如,或许有人在露营烧篝火)。用“真表示起火的冒烟”除以“所有的冒烟”,得到的就是“各种冒烟里面有多少是真的意味着起火的”,也就是P(野火

| 冒烟)这个符号表示的意思。

上面两个例子里,A事件都是个单一事件:下雨,或者起火。

有时候,情况比这要复杂一点,这个A事件,有两种可能的情况,比如做医疗检查,我们知道绝大多数的检查方法都不能保证100%的准确。检查结果说有异常的时候,实际情况可能是真有病,但也可能是误判,其实人没病。这种情况,也可以用贝叶斯定理去除误判,算出真正有病的可能性是多大。

比如,有一种测试,能检查一个人是不是对花粉过敏。不过,我们已经这个测试不是100%准确的。它的准确率是这样:

对于真的有花粉过敏的人,80%的时候它能测出来。(真阳性)

对于没有花粉过敏的人,有10%的时候它也会说有过敏。(假阳性)

总体来说,人群里1%的人对花粉过敏。

这里,“A事件”就是过敏。“B事件”就是检查阳性。

如果您不知道您是不是对花粉过敏,然后去做了这个测试,结果是阳性,那么,您有多大可能是真的对花粉过敏?80%?10%?

用贝叶斯公式来算,这个公式现在是这么写:

P(过敏 | 阳性) = P(阳性 | 过敏)* P(过敏) /

P(阳性)

稍微解释一下:

P(过敏 | 阳性)表示检查阳性的话,真有过敏的概率有多高。这需要算。

P(阳性 | 过敏)表示真有过敏的人,测试阳性的几率:80%

P(过敏)表示一般人群对花粉过敏的概率:1%

P(阳性)是一般人做这种测试的话出现阳性的概率:??%

第二行和第三行的两个数字相乘,得出的就是这个世界上,真的对花粉过敏的人,去做这个测试,真的出现阳性的概率。真的过敏,还真的测出来了。这个是真阳性。

但是我们还知道,这个测试不完美,有假阳性。我们必须知道,在真阳性和假阳性混在一起的“总阳性”里,有多少是真阳性。

上面的第四行,P(阳性),说的就是这个“总阳性”。

不过,这里有点小问题:好像第三个数据没提供?

没事。这能推算出来。

我们知道人群里有1%的人会对花粉过敏,然后,对于这1%的人,过敏测试有80%的机会能测出阳性。这个是真阳性。1% * 80%

算出的就是真阳性。

我们还知道,对于那99%没有花粉过敏的人,有10%的时候,这个测试也会说人家是阳性。这个是假阳性。99% * 10%

算出的就是假阳性。

这两种阳性,真阳性和假阳性,加起来就是“总阳性”,也就是P(阳性)了。

那么:

P(阳性) = 1% * 80% + 99% * 10% = 10.7%

就是说,一般人群,不管是不是有过敏的,去做这个测试,会有10.7%的人测出个阳性来。

好。这个数字有了,咱就可以套进贝叶斯公式里了:

P(过敏 | 阳性) = [ P(阳性 | 过敏)* P(过敏)] /

P(阳性)

= ( 80% * 1% ) / 10.7%

= 7.47%

就是说,您冷不丁去做这么个测试,然后它说您是阳性。那么您真有过敏的可能,不是80%,不是10%,而是7.47%

贝叶斯作为神父,心肠挺好。咱上面多出来的那一步计算,就是算“总阳性”的那个步骤,贝叶斯早就遇到过,所以他给了个变通公式是这样的:

P(A1|B) = [ P(B|A1) * P(A1) ] / [ P(B|A1) * P(A1)

+ P(B|A2) * P( A2) ]

看起来很晕,但还是可以理顺的。这里的关键是A事件的拆分。A本来对应于上面的“过敏”。不过,因为现在检查阳性分成“过敏查出阳性”和不过敏也查出阳性“两种情况,所以就用A1和A2来表示。A1是”过敏“。A2是”不过敏“。而B则对应于“阳性”。

把这些意思带进去,就可以写成这样(分行写,可以加个注解):

P(过敏 | 阳性) =

P(阳性 | 过敏) * P(过敏) /

P(阳性 | 过敏)* P(过敏) +

过敏的人查出阳性的概率,真阳性

P(阳性 | 不过敏)* P(不过敏)

不过敏的人查出阳性的概率,假阳性

看起来很庞杂,其实仔细看看就会发现,这个公式只不过是把我们刚才做的“总阳性”的计算过程给直接放到了除号的后面而已。而且这么做很有道理。因为,原来的公式是假设我们知道这种“总体概率”,比如在下雨的例子里,我们知道平时阴天的总概率是40%。在野火的例子里,我们知道平时林中冒烟的总概率是10%。如果我们不知道这种“总体概率”,但是知道“分事件”的概率,比如在这个过敏例子里,我们知道过敏的人有多大概率测出阳性(真阳性),不过敏的人有多大可能测出阳性(假阳性),我们就可以把这两个“分概率”加起来——这就是贝叶斯的这个变通公式的意思。除号的后面,其实就是把这两种“分概率”分别计算,然后加起来。

就是说,原来的公式是:

P(过敏 | 阳性) = ( 80% * 1% ) / 10.7%

现在写成:

P(过敏 | 阳性) = ( 80% * 1% ) / ( 80% * 1% + 99%

  • 10% )

除号后面的那部分,就是我们早先计算“总阳性”的式子。我们知道这个“总阳性”的计算结果是10.7%,所以最后结果还是一回事:7.47%

如果不用贝叶斯公式,凭直觉,不少人会觉得,如果随便一个人去做这种测试,结果是阳性的话,那么有过敏的可能性是很高的。不是说正确率80%吗?就算知道不这么准确,可是也不能比80%差太远吧?怎么这一算下来,真正有过敏的可能性才7.47%?

这是因为假阳性太多,真阳性又太少。

假阳性来自误判。本来呢,这个测试,没病误判有病的概率也不算太高,只有10%。问题是,假阳性是从哪儿来的?是从正常人那儿来的。就是说,正常人去做这种测试,结果被误诊为有过敏,这就是假阳性。而在这个例子里,正常人占多大比例?

99%!

这个基数实在太大了。所以,即使只有10%的误诊率,产生的假阳性还是太多。

真阳性呢?那是在真有过敏的人身上查出来的。可是真有过敏的人只有1%。所以,即使测试准确率有80%,作用到这1%上,产生的数字还是不大。

贝叶斯公式里,分子是真阳性,分母是真阳性加上假阳性。假阳性多了,分母就大了。分母大了,最终数字就小了。

这个是从数学概念去理解。用口语来说,假阳性多了,总体数据就严重“掺水”。结果,真阳性的的比重就被“稀释”了。

不信我们把这个有病和没病的基数调整一下,变成50%有病,50%没病,重新算一下,看看是什么结果:

P(过敏 | 阳性) =(80% * 50%) / (80% * 50% + 50% *

10% )

= 40% / ( 40% + 5% )

= 89%

这就跟那个80%的正确检出率比较接近了。因为,现在有病和没病的基数一样。真阳性来自真过敏患者。真过敏患者比例从1%提高到50%,真阳性的比例就大增。没过敏的人,比例从99%下降到50%,结果呢,假阳性的比例大减。这样一来,假阳性冲淡真阳性的作用就小多了,所以计算的结果就比较接近直觉了。

所以,看这样的数字,不光要看那个概率,比如10%的误诊率,还要看它作用的基数,比如99%的无病人群。如果概率不高,可是作用对象是个巨大的群体,那它就会严重扭曲最终的判断。

您如果到这时候还记得开篇提到的那个题目,您可能会注意到,这个过敏测试的例子,其实跟那个题目很相似。

我把题目搬过来,看着方便一点:

有一种病的患病几率是

1%,有一种仪器能用来检测这种病,检测的正确率是99%。如果一个人被仪器判断得了这种病,事实上患病的几率是多大。

跟我们上面的过敏问题类似,这个问题里,"一般人群的阳性率"没给:

P(阳性 | 患病),也就是真的患病的人,测试阳性的几率:99%

P(过敏),也就是一般人群患这种病的概率:1%

P(阳性)也就是一般人做这种测试的话出现阳性的概率:??%

我们先参照过敏问题的第一种解题办法,自己计算一下一般人群去做检测的话,出现阳性的有多少。

注意题目里这句话:"检测的正确率是99%"。

这句话的意思是说:如果有病,它正确判断有病的概率是99%。这99%得出的是真阳性。

如果没病,它正确判断没病的概率是99%——有1%的时候它会误判有病。这是假阳性。

真阳性和假阳性加起来,就是一般人群做这种检查的的阳性概率。

真阳性的概率是真有病的人(1%,就是0.01)乘以正确检出的概率(99%,就是0.99):

0.01 * 0.99 = 0.0099

假阳性的概率是没病的人(99%)乘以误判阳性的概率(1%):

0.99 * 0.01 = 0.0099

真阳性 + 假阳性 = 0.0099 + 0.0099 = 0.0198

这个就是“总阳性”,就是P(阳性)。

带进贝叶斯公式里:

P(患病 | 阳性) = [ P(阳性 | 患病)* P(患病)] /

P(阳性)

= (0.99 * 0.01) / 0.0198

= 0.5

就是说,随便抓个人去做检查,如果查出阳性,他真的有病的可能性,不是99%,不是1%,而是50%

用日常思维来理解这里面的关系,其实就是说,我们知道这个检查不完美,说是阳性,其实有真阳性,有假阳性。我们想知道的就是真阳性占“总阳性”的多少。

前面说过,贝叶斯的变通公式,其实就是把计算那两个“分概率”的步骤直接放到除号后面。这里也可以这么做:

P(A1|B) =[ P(B|A1) * P(A1) ] / [ P(B|A1) * P(A1)

+ P(B|A2) * P( A2) ]

也就是:

P(患病 | 阳性)=

P(阳性 | 患病) * P(患病) /

P(阳性 | 患病)* P(患病) +

患病的人查出阳性的概率,真阳性

P(阳性 | 没病)* P(没病)

没病的人查出阳性的概率,假阳性

= ( 0.99 * 0.01 ) / (0.99 * 0.01 + 0.01 *

0.99 )

= 0.0099 / ( 0.0099 + 0.0099 )

= 0.5

一样的结果。

跟过敏的那个例子一样,这个例子里,如果您凭直觉判断,得到的数字跟50%差距比较远,这也是因为有病的和没病的这两个群体基数差异巨大:1%有病,99%没病。结果,那1%有病的人产生的真阳性不多,那99%没病的人产生的假阳性倒是很多,多得严重扭曲了判断的准确性。

如果把有病和没病的人数改成各占50%,咱看看会怎么样:

( 0.99 * 0.5 ) / ( 0.99 * 0.5 + 0.01 * 0.5

)

= 0.495 / ( 0.495 + 0.005 )

= 0.99

就是说,如果有一种病,世界上得这种病的人和没这种病的人各占一半,现在随便抓一个人去做这个测试,测试说有病,那就是99%的有病——跟这测试自己保证的准确率一模一样。

原因跟过敏测试的那个情况类似。真有病的人基数增加,真阳性的数量就大增。而没病的人基数大减,而在这个例子里,给没病的人做检查,误诊率只有1%,(在过敏那个例子里,误诊率是10%)结果现在假阳性的数量就少到几乎可以忽略不计,于是对真阳性率的“冲淡”作用也就少到看不出来了。

在过敏的例子里,A事件拆分成了两项:过敏和不过敏。这个玩法可以无限扩展,就是说,A事件可以拆成更多项。不管拆成多少项,贝叶斯公式都可以计算,只要把上面公式里的A2那一项的模式不断重复就可以了。就是说:

P(A1|B) = [ P(B|A1) * P(A1) ] / [ P(A1) * P(B|A1) + P( A2) *

P(B|A2) + P( A3) * P(B|A3) + …… ]

核心概念就是要找到除号后面的那个“总概率”。而这个“总概率”,其实也就是把各个“分事件”的“分概率”分别计算出来,然后加起来。

比如,张三,李四和王五参加一个绘画作品竞赛,一比高低。张三拿出参赛作品15幅。李四5幅。王五10幅。然后,这种比赛他们三人以前参加过多次。张三过去拿到头奖的概率是4%。李四是6%。王五是3%。那么这次张三拿到头奖的概率是多大?

这里的关键就是要分别计算张三、李四和王五各自获奖的“分概率”,然后给加起来,得出“总概率”。

从题目里,我们不知道在所有参赛者里,这三个人参赛作品占多大比例,但是我们知道这三个人本次参赛作品数量。那么我们根据这个数据,算一下这三个人各自有多少获头奖的概率,然后把这作为总概率。用这个总概率做除数,就可以推算在这三个人里面,张三本次参赛获头奖的概率。

用公式表达,是这样的:

P(张三|头奖) =

P(张三参赛份额)* P(头奖|张三)/

P(张三参赛份额)* P(头奖|张三) +

这个“分概率”表示张三获奖的可能性

P(李四参赛份额)* P(头奖|李四) +

这个“分概率”表示李四获奖的可能性

P(王五参赛份额)* P(头奖|王五)

这个“分概率”表示王五获奖的可能性

= [(15/30)* 4% ] / [ (15/30) ×

4% + (5/30) * 6% + (10/30) * 3% ] =

50%

就是说,张三这次有50%的机会能拿头奖。

他以往拿奖的概率没李四高,为啥这次他那头奖的概率这么高?

因为他参赛作品多。

这就叫倚多为胜。

道理前面说过:哪个“分概率”的基数大,它就占便宜。

总结起来,贝叶斯定理干的就是把假阳性的干扰考虑进来,算出阳性结果“可以当真”的概率。说得数学一点,它算的是“如果B事件为真,那么A事件也确实为真的概率”。

贝叶斯定理不是就用来玩玩数字游戏的。这公式非常有实用价值。我们看一个最典型的应用实例:垃圾邮件过滤。

您如果打开自己的邮箱,里面哪些是垃圾邮件,对您来说很容易区分:不是朋友发来的,也不是自己订购的,最近也没打过交道的公司,看看邮件内容,跟自己八杆子打不着。这自然就是垃圾邮件了。

可是电子邮件服务商要写个程序来过滤垃圾邮件的话,就没您这么方便。因为,它不知道谁是您的朋友,不知道您跟哪个公司打过交道。

所以,它只能根据垃圾邮件常出现的特征来猜测那些是垃圾邮件。

比如,在中文网络,最典型的垃圾邮件就是兜售发票的邮件(可悲的天朝。不知道多少公款从这里被侵吞了)。

所以,看到一封电子邮件里有”发票“二字,程序就可以开始怀疑这是个垃圾邮件。

可是,单凭这一点就做结论,还是太冒失。毕竟人有时候给朋友写邮件也会提到”发票“两个字的。尤其是业务邮件就更可能了。

所以,过滤程序必须考虑两种可能:

邮件里含有“发票”一词,而且真是垃圾邮件。这个是真阳性。

邮件里有“发票”一词,但是不是垃圾邮件。这个是假阳性。

贝叶斯大爷如果看到这局面,肯定就要开腔了:这不就可以用我的公式给算出来吗?你这儿有事件A,就是这个“鉴定属于垃圾邮件”;有事件B,就是“发现嫌疑词汇”。然后,两个事件之间“可能”有关系。

贝大爷这么说了,那咱就试着把公式给写出来吧:

P(垃圾 | 发票) =

意思是“看到‘发票’字样,能判断为垃圾邮件的概率”

P(发票 | 垃圾) * P(垃圾) /

P(发票 | 垃圾) * P(垃圾) +

P(发票 | 非垃圾) * P(非垃圾)

非垃圾邮件里出现“发票”字样的概率。假阳性。

这么用贝叶斯公式过滤一下,程序误判的可能性就大大降低了。

声明一下:我对贝叶斯定理的理解,大大受惠于下面这篇数学科普文章(英文)。我所有实例都是从这篇文章实例里脱胎而来的:

原文附有引用链接,允许直接引用。不过我主要是引用它的实例,文字是我啃了十来篇文章之后自己写的。

这个网站的域名是“数学很好玩”(mathisfun.com)。我通常不觉得数学好玩。我数学颟顸得很。但是看完这篇文章,我承认这位作者有资格说数学很好玩——能把数学问题说得我这样的人都看得懂,他捣鼓数学肯定就跟玩儿似的。

全部评论 (0)

还没有任何评论哟~