Mathematica 提供了一个看上去毫无用途的无厘头函数 Rasterize ,它可以以图片的格式输出运算结果。比如,下面这个句子可以打印出 (x+1)^n 的展开式的“倒影”:

今天我突然想到,我们可以利用这个函数很方便地分析汉字在图象上的性质。函数 Binarize 可以把图象转换为单色单通道, ImageData 则可以把图象转换成数组的形式,以便我们定量分析。因此,下面这句话就可以把一个汉字转换成 12*12 的 01 矩阵:

Mathematica 提供了一个看上去毫无用途的无厘头函数 Rasterize ,它可以以图片的格式输出运算结果。比如,下面这个句子可以打印出 (x+1)^n 的展开式的“倒影”:

今天我突然想到,我们可以利用这个函数很方便地分析汉字在图象上的性质。函数 Binarize 可以把图象转换为单色单通道, ImageData 则可以把图象转换成数组的形式,以便我们定量分析。因此,下面这句话就可以把一个汉字转换成 12*12 的 01 矩阵:

从小老师就教导我们,不会做的题就选C,因为选择题选C的概率是最高的。事实上真是如此吗?今天我突发奇想,利用Google做了一个小实验。统计显示,答案选C的题果然是最多的!
Results 1 - 10 of about 364,000 for "这道题选A".
Results 1 - 10 of about 352,000 for "这道题选B".
Results 1 - 10 of about 521,000 for "这道题选C".
Results 1 - 10 of about 254,000 for "这道题选D".
Results 1 - 10 of about 2,140 for "这道题为什么选A".
Results 1 - 10 of about 2,200 for "这道题为什么选B".
Results 1 - 10 of about 2,580 for "这道题为什么选C".
Results 1 - 10 of about 1,350 for "这道题为什么选D".
昨夜,M同学牵着女朋友的手走出宿舍楼,整夜没有回来;直到今天早晨,大家才见他支着腰回到寝室,样子十分疲惫。我们几个好友似乎已经心领神会,于是一行人走上前去,带着淫邪的笑容拷问他:昨晚干啥了,那么疲惫?本以为M同学会支支吾吾答不上话来,殊不知他义正严词地答道:我和女朋友去看通宵电影去了。几个人不服气,问他,那电影票呢?谁知他说了一句“忘了放哪儿了”后,还真煞有其事地在包里翻来翻去。一群人大笑着说,唉呀,你就别装了吧。两分钟后,我们全都傻了眼——M同学还真摸出两张电影票。一哥们儿猛地拍了一下M同学的肩膀说,唉呀,为了骗过我们真是煞费苦心啊,居然到影院门口找散场观众买了两张票根!
笑过之后,我突然开始想,假如M同学为了掩饰自己的恶劣行径,真的准备好了伪证的话,他的演技可不是一般的高明。试着想象以下两个画面:
1. 几个人不服气,问他,那电影票呢?M同学不急不慢地从口袋里掏出两张电影票说,在这儿呢。
2. 几个人不服气,问他,那电影票呢?M同学假装到处寻找电影票,过了两分钟才翻出来。
显然,第二种做法更令人相信,他真的跑去看通宵电影去了。事实上,M同学还能做得更好:
1973年,统计学家F.J. Anscombe构造出了四组奇特的数据。它告诉人们,在分析数据之前,描绘数据所对应的图像有多么的重要。
| I | II | III | IV | ||||
|---|---|---|---|---|---|---|---|
| x | y | x | y | x | y | x | y |
| 10.0 | 8.04 | 10.0 | 9.14 | 10.0 | 7.46 | 8.0 | 6.58 |
| 8.0 | 6.95 | 8.0 | 8.14 | 8.0 | 6.77 | 8.0 | 5.76 |
| 13.0 | 7.58 | 13.0 | 8.74 | 13.0 | 12.74 | 8.0 | 7.71 |
| 9.0 | 8.81 | 9.0 | 8.77 | 9.0 | 7.11 | 8.0 | 8.84 |
| 11.0 | 8.33 | 11.0 | 9.26 | 11.0 | 7.81 | 8.0 | 8.47 |
| 14.0 | 9.96 | 14.0 | 8.10 | 14.0 | 8.84 | 8.0 | 7.04 |
| 6.0 | 7.24 | 6.0 | 6.13 | 6.0 | 6.08 | 8.0 | 5.25 |
| 4.0 | 4.26 | 4.0 | 3.10 | 4.0 | 5.39 | 19.0 | 12.50 |
| 12.0 | 10.84 | 12.0 | 9.13 | 12.0 | 8.15 | 8.0 | 5.56 |
| 7.0 | 4.82 | 7.0 | 7.26 | 7.0 | 6.42 | 8.0 | 7.91 |
| 5.0 | 5.68 | 5.0 | 4.74 | 5.0 | 5.73 | 8.0 | 6.89 |
不知道大家有没有幻想过,数学中是否存在这样一个牛B的问题,发表出来后十几年硬是没有一个人解开;后来某人惊奇地发现,它有一个极其精妙的解答,整个解决过程只需要几句话就能说清楚,但它实在是太巧妙了,这么多年就没有任何人想到。最近我就遇到了这样的事情。3月份UyHiP的题目非常有趣,整个证明几句话就完了,但想到解法的却只有一人。
题目描述也极其简单。对于哪些n,存在一种生成n个随机变量的算法,使得它们在0和1之间均匀分布,且它们的和是一个常数?更进一步,如果这n个变量中任意k个都相互独立,满足要求的k最大是多少(表示成关于n的函数)?
当然,这道题目我也没想出来。答案公布前,我思考了很久,最后还是放弃了。显然n是偶数时这样的算法是存在的,例如当n=6时,只需要先独立地选取3个随机变量X_1, X_2, X_3,然后令X_4 = 1 - X_1,X_5 = 1 - X_2,X_6 = 1 - X_3即可。这可以保证6个变量之和总为3,且它们均匀地分布在[0,1]区间里。但是当n是奇数时,满足要求的算法就未必存在了。例如当n=3时,不妨让X_1和X_2随机取,X_3等于1.5 - X_1 - X_2。这种算法似乎很和谐,问题就出在X_3有可能不在0和1之间。那么,重复执行该操作直到返回一个落在[0,1]里的X_3呢?这样的话变量又不是均匀分布的了,这将让变量更容易取到中间去,因为X_1和X_2太小或太大往往算不出合法的X_3(下图是Mathematica模拟的结果)。我试图从“n个变量的和的期望值是n/2”出发,证明和为1.5的3个变量不可能均匀分布在0到1之间。不过,最终还是没有找到突破口。
在去年10月份的数学文化节期间,我去听了好几次讲座,其中有一些讲的相当精彩。时间过得好快,转眼间又是一年了,如果不是Wind牛发短信问我去不去听讲座,我估计今年数学文化节过了都还想不起这档子事。于是和Wind牛跑去二教309,听了一场叫做《从数据中挖掘因果关系》的讲座。这个题目是很有趣的:数据本身并不说谎,难就难在我们如何从中挖掘出正确的信息。当我们讨论数据时,我们讲的最多的是数据的相关性,而我们希望得到的则是事件之间的因果联系;但事实往往是复杂的,统计数据有相关性并不意味着两个事件具有因果联系,而具有因果联系的两件事从统计数据上看有时也并不相关。
对于前者,最简单的例子就是公鸡打鸣与太阳升起:公鸡打鸣与太阳升起总是同时发生,但这并不表示把全世界所有的公鸡都杀光了后太阳就升不起来了。统计发现,手指头越黄的人,得肺癌的比例越大。但事实上,手指的颜色和得肺癌的几率之间显然没有直接的因果联系。那么为什么统计数据会显示出相关性呢?这是因为手指黄和肺癌都是由吸烟造成的,由此造成了这两者之间产生了虚假的相关性。我们还可以质疑:根据同样的道理,我们又如何能从统计数据中得出吸烟会致癌的结论呢?要想知道吸烟与癌症之间究竟是否有因果联系的话,方法很简单:找一群人随机分成两组,规定一组抽烟一组不抽烟,过它十几年再把这一拨人找回来,数一数看是不是抽烟的那一组人患肺癌的更多一些。这个实验方法本身是无可挑剔的,但它太不道德了,因此我们只能考虑用自然观察法:选择一些本来都不吸烟的健康人进行跟踪观察,然后呢,过段时间这一拨人里总会出现一些失意了堕落了犯上烟瘾的人,于是随着时间的流逝这帮人自然而然地分成了可供统计观察的两组人。注意,这里“是否吸烟”这一变量并不是随机化得来的,它并没有经过人为的干预,而是自然区分出来的。这是一个致命的缺陷!统计结果表明,犯上烟瘾的那些人得肺癌的几率远远高于其他人。这真的能够说明吸烟致癌吗?仔细想想你会发现这当然不能!原因恰似黄手指与肺癌一例:完全有可能是某个第三方变量同时对“爱吸烟”和“患肺癌”产生影响。1957年,Fisher提出了两个备选理论:癌症引起吸烟(烟瘾是癌症早期的一个症状),或者存在某种基因能够同时引起癌症和烟瘾。
有虚假的相关性数据,就有虚假的独立性数据。“健康工人效应”是一个特别有意思的理论。调查发现,在铀矿工作的工人居然与其它人的寿命一样长(有时甚至更长)。这表明在铀矿工作对身体无害么?当然不是!其实,是因为去铀矿工作的工人都是经过精心挑选的身强体壮的人,他们的寿命本来就该长一些,正是因为去了铀矿工作才把他们的寿命拉低到了平均水平。这一有趣的细节导致了数据的伪独立性。类似地,有数据表明打太极拳的人和不打太极拳的人平均寿命相同。事实上呢,太极拳确实可以强身健体、延长寿命,但打太极拳的人往往是体弱多病的人,这一事实也给统计数据带来了虚假的独立性。