首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

遇见真爱的概率,可以用概率求得

找到一个爱的人已经很困难,过年回家天天被催着相亲怎么办?概率模型可以来帮你。对你找到真爱更可行的的建议是:如果你确定在生命中会遇到 100 个对象,那么前 7 个就略过,判定其中最优秀的那位 M,然后再去寻找比 M 更优秀的,如果真的遇到就立刻行动,不要再犹豫,因为她/他很可能就是 Mr. Right. 今天和你分享肖凯老师的理解。

肖凯:数据科学家与机器学习专家。资深 R 语言用户,R 语言领域的实战专家,历年中国 R 语言社区大会演讲者。「数据科学中的 R 和 Python」博客博主,周周坚持写,多年积累。造福了中国广大数据科学爱好者。 著有《数据科学与 R 语言》、《 R 语言与 Bioconductor 生物信息学应用》以及《数据科学中的 R 语言》。微博: @xccds ,博客:数据科学中的 R 和 Python苏格拉底问题

谈到相亲就不得不提到著名的麦穗问题。说有一天,苏格拉底带领几个弟子来到一块成熟的麦地边。他对弟子们说:

你们去麦地里摘一个最大的麦穗,但要求只能摘一次,只许进不许退,我在麦地的尽头等你们。

可以看得出,相亲这种活动就有点类似于摘麦穗,在等待和决断之间达成平衡是解决问题的重点。

将上述的麦穗问题进一步抽象就是一个经典的概率问题。

一个袋子里有 100 个不同的球。每个球上标明了其尺寸大小。

我们每次随机无放回的从袋中取一个球出来,观察其大小属性之后需决定要或是不要。

如果要,取球就此停止。如果不要, 再继续取球,但不准再回头要原先的球。

这样下去,直到 100 个球取完为止。目的就是取到那个最大的球。

相亲 37 次以内最合适

对于这个概率问题,一种思路就是取 1 到 100 之间的某个数字 n,以它作为分割点将整袋球划分为两组,

第一组即从第 1 个到第 n 个球,

第二组即从第 n+1 个到第 100 个球。

我们以第一组为观察对象,找到第一组中最大的球 M,记录其大小但并不行动。然后从第二组中寻找大于 M 的第一个球,取该球为最终选择。

那么 n 应该设为多少,才能使取到最大球的概率尽可能的高呢?

Ross 在其《概率论基础教程》中已经给出了精确的解析(英文版第 8 版 P345;或者陈木法的《随机过程导论》 P105),最优的 n 公式表达为:

在 N 充分大时,n 应该取在 1/e 的比例处,也就是所有球数目的 37% 处。

在解的过程中先运用条件概率得到全概率表达式,再用连续化的积分来近似离散化的概率,将积分求出后进行求导得到最终答案。看到这里各位是否有些惊讶,这个 e 可是无所不在啊。

换句话说,如果你确定在生命中会遇到 100 个对象,那么对前 37 个就请按捺住你的热情,判定其中最优秀的那位 M,然后再去寻找比 M 更优秀的,如果真的遇到就立刻行动,不要再犹豫。因为她/他很可能就是 Mr. Right。

数学验证

口说无凭,我们用 R 语言来检测一下上面的结论。

先构造一个用于选择的函数,输入参数 n 是数据的分割点,输出即为选取得到的结果,

如果得到 100 表明选取得到最优秀的对象,如果得到 0 则表明一无所获。

然后设置 n 取值范围从 1 到100,对每个 n 的值模拟 10000 次选取行为,计算出给定 n 条件下得到最大值的频次。

从下图可以看到最大值的确取在 37 附近,符合理论结果。

横轴表示了不同的划分参数 n,纵轴表示给定 n 条件下,能得到最优值的频数

前 7 人不是你的真命君子

这里还有一个问题,最优解不一定是令人满意的。根据最优解来行动,会有 36% 的可能得到最佳的对象,但也有接近 38% 的可能会一无所获。

实际上,有时候我们宁可得到一个次优的结果(例如 99)也不希望孤独的生活。

所以在选择 n 这个参数的时候,目标应该着重于结果的期望值大小。重新编程运行后,从下图可以观察到最优值取在 7 附近

也就是说,如果你确定在生命中会遇到 100 个对象,那么前 7 个就略过,判定其中最优秀的那位 M,然后再去寻找比M更优秀的,这样有最大的可能得到靠谱的对象。

横轴为不同的划分参数 n,纵轴表示 10000 次模拟的期望值

小结

好了,我们知道了应该在观察 7 个对象后就开始行动,那么需要多少次相亲才能碰上 Mr. Right 呢?

我们先构造一个函数来记录在第二组中进行尝试的次数。然后模拟 10000 次后绘制直方图如下,

可以看到:

仍然有 7% 左右的人未能找到合适的对象

50% 的人在 10 次尝试之内即能选取到合适的对象(未加上第一组的 7 次观察活动);

80% 的人在 30 次尝试之内即能找到合适的对象

所以说,只要你人品不是太差,在 37 次相亲尝试之内,应该就可以找到靠谱的对象。但愿你不会掉入离群点中去。

进行对象选取的一万次模拟,每次模拟返回选取对象所需要的尝试次数,0 表示未能得到任何对象,1 表示在观察七个对象后,只需要一次尝试就得到较优的对象。

完整的 R 代码如下:http://t.cn/RAVckVm ;相关维基百科讨论请参考「Secretary problem」条目。

注:本文结论有很多隐藏前提,其推理亦可能有失误之处,仅供娱乐。若读者完全以本文为指导进行相亲活动,后果概不负责^_^

开智好文

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180108A0T92600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券