Skip to main content
推荐文章:寒假向大四女神表白的成功率最高?贝叶斯算法助你科学撩妹
本站微文频道仅收录微信文章列表索引
点击这里去看文章全文

本文来自微信公众号:大数据 | 发布时间:2018-09-28 21:00:00

点击查看原文
寒假向大四女神表白的成功率最高?贝叶斯算法助你科学撩妹

寒假向大四女神表白的成功率最高?贝叶斯算法助你科学撩妹

大数据


导读:这一段时间看到我周围的小伙伴在跟很多的妹子聊天后总是无疾而终,过程虽然有所不同,但是起点和终点大致相同,联想到以前看过的炮灰模型(前半部分是炮灰模型),所以我想能不能可以用一些统计学的方法去概述这个现象并且发现这其中的规律,以便让广大的男屌丝们找到自己合适的另一半。


作者:云时之间
原文链接:

https://www.jianshu.com/p/b413129e369d

经作者授权发布



众所周知生活中涉及到感情的事情是很复杂的,把所有可能影响的因素都考虑到几乎是不可能的。为此我们先对现实进行简化,并做出一些合理的假设,考虑比较简单的一种情况。


为了将实际复杂的问题进行简化,我们做出下面几条合理的假设:


  1. 假设一个女生愿意在一段时间中和一位男生开始一段感情,并且在这段时间中有N个男生追求这位女生。N个男生以不同的先后顺序向女生表白,即在任一时刻不存在两个或两个以上的男生向这位女生表白的情况的发生,而且任何一种顺序都是完全等概率的。

  2. 面对表白后的男生,女生只能做出接受和拒绝两种选择,不存在暧昧或者其它选择。

  3. 任一时刻,女生最多只能和一位男生谈恋爱,不存在脚踏多船的情况。

  4. 已经被拒绝的男生不会再次追求这位女生。


基于上述假设,我们想要找到这样一种策略,使得女生以最大的概率在第一次选择接受的那个男生就是N。


先考虑最简单的一种策略,如果一旦有男生向女生表白,女生就选择接受。这种策略下显然女生以1/N的概率找到自己的Mr. Right。当N比较大的时候,这个概率就很小了,显然这种策略不是最优的。


基于上面这些假设和模型,我们提出这样一种策略:对于最先表白的M个人,无论女生感觉如何都选择拒绝;以后遇到男生向女生表白的情况,只要这个男生的编号比前面M个男生的编号都大,即这个男生比前面M个男生更适合女生,那么女生选择接受,否则选择拒绝。


下面以N=3为例说明:


三个男生追求女生,共有六种排列方式:


1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1


如果女生采用上述最简单的策略,那么只有最后两种排列方式选择到Mr. Right,概率为2/3!=1/3。


如果女生采用上面我们提出的策略,这里我们取M=1,即无论第一个人是否优秀,女生都选择拒绝。然后对于之后的追求者,只要他比第一个男生更适合女生就选择接受,否则拒绝。基于这种策略,“1 3 2”、“2 1 3”、“2 3 1”这三种排列顺序下女生都会在第一次做出接受的选择时遇到“3”,这样我们就把这种概率增大到3/3!=1/2。


现在我们的问题就归结为,对于一般的N,什么样的M才会使这种概率达到最大值呢?(在这种模型中,前面M个男生就被称为“炮灰”,无论他们有多么优秀都要被拒绝)




01 模型建立


在这一部分中,根据上面的模型假设,我们先找到对于给定的M和N(1


1到N个数字进行排列共有N!种可能。当数字N出现在第P位置(M


  1. N在第P位置

  2. 从M+1到P-1位置的数字要比前M位置的最大数字要小


运用数学中排列组合的知识,不难知道符合上面两个条件的排列共有



这样对于给定的M和N,P可以从M+1到N变化,求和化简后得到给定M和N共有



种序列符合要求。


由此得到女生选择接受时遇到Mr. Right的概率为




02 模型求解


(不感兴趣的话可以直接跳过这部分推导)


这一部分中我们求解使这个表达式取得最大值时M的值。


记函数



且设自变量取值为M时,函数取得最大值。


因此:



所以M应满足



我们知道,


当x>0, In(1+x)< x ;

当x-->0, In(1+x) ~ x。


所以由左不等式



所以:



当N比较大时,同理由右不等式可得M≈N/e,以上e为自然对数。


若记[x]为不大于x的最大整数,由以上推导我们可猜测当M取[N/e]或[N/e]+1时,该表达式取得最大值。


用MATLAB仿真,上述结论正确。




03 结果分析


由上述分析可以得到如下结论:为了使一个女生以最大的概率在第一次选择接受男生时遇到的正是Mr. Right,女生应该采用以下的策略:


拒绝前M=[N/e]或者[N/e]+1个追求者,当其后的追求者比前M个追求者更适合则接受,否则拒绝。


现在到结婚的问题上:


现在给我们的问题是,如果一对男女朋友,男生向女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?



这是一个典型的分类问题,转为数学问题就是比较p(嫁|(不帅、性格不好、身高矮、不上进))与p(不嫁|(不帅、性格不好、身高矮、不上进))的概率,谁的概率大,我就能给出嫁或者不嫁的答案!


我们需要求p(嫁|(不帅、性格不好、身高矮、不上进),这是我们不知道的,但是通过朴素贝叶斯公式可以转化为好求的三个量。


p(不帅、性格不好、身高矮、不上进|嫁)、p(不帅、性格不好、身高矮、不上进)、p(嫁)


(至于为什么能求,后面会讲,那么就太好了,将待求的量转化为其它可求的值,这就相当于解决了我们的问题!)


那么这三个量是如何求得?


是根据已知训练数据统计得来,下面详细给出该例子的求解过程。


回忆一下我们要求的公式如下:



那么我只要求得p(不帅、性格不好、身高矮、不上进|嫁)、p(不帅、性格不好、身高矮、不上进)、p(嫁)即可,好的,下面我分别求出这几个概率,最后一比,就得到最终结果。


p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁),那么我就要分别统计后面几个概率,也就得到了左边的概率!


等等,为什么这个成立呢?学过概率论的同学可能有感觉了,这个等式成立的条件需要特征之间相互独立吧!


但是为什么需要假设特征之间相互独立呢?


1. 我们这么想,假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2*3*3*2=36个。


36个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。


2. 假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁),我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。


好的,上面我解释了为什么可以拆成分开连乘形式。那么下面我们就开始求解!


我们将上面公式整理一下如下:



下面我将一个一个的进行统计计算(在数据量很大的时候,根据中心极限定理,频率是等于概率的,这里只是一个例子,所以我就进行统计即可)。


p(嫁)=?


首先我们整理训练数据中,嫁的样本数如下:



则p(嫁) = 6/12(总样本数)= 1/2


p(不帅|嫁)=?统计满足样本数如下:



则p(不帅|嫁) = 3/6 = 1/2在嫁的条件下,看不帅有多少


p(性格不好|嫁)=?统计满足样本数如下:



则p(性格不好|嫁)= 1/6


p(矮|嫁)= ?统计满足样本数如下:


则p(矮|嫁) = 1/6


p(不上进|嫁) = ?统计满足样本数如下:



则p(不上进|嫁) = 1/6


下面开始求分母,p(不帅),p(性格不好),p(矮),p(不上进)


统计样本如下:



不帅统计如上红色所示,占4个,那么p(不帅)= 4/12 = 1/3



性格不好统计如上红色所示,占4个,那么p(性格不好)= 4/12 = 1/3



身高矮统计如上红色所示,占7个,那么p(身高矮)= 7/12



不上进统计如上红色所示,占4个,那么p(不上进)= 4/12 = 1/3


到这里,要求p(不帅、性格不好、身高矮、不上进|嫁)的所需项全部求出来了,下面我带入进去即可,



= (1/2*1/6*1/6*1/6*1/2)/(1/3*1/3*7/12*1/3)


下面我们根据同样的方法来求p(不嫁|不帅,性格不好,身高矮,不上进),完全一样的做法,为了方便理解,我这里也走一遍帮助理解。首先公式如下:



下面我也一个一个来进行统计计算,这里与上面公式中,分母是一样的,于是我们分母不需要重新统计计算!


p(不嫁)=?根据统计计算如下(红色为满足条件):



则p(不嫁)=6/12 = 1/2


p(不帅|不嫁) =?统计满足条件的样本如下(红色为满足条件):



则p(不帅|不嫁)= 1/6


p(性格不好|不嫁)=?据统计计算如下(红色为满足条件):



则p(性格不好|不嫁)=3/6 = 1/2


p(矮|不嫁)=?据统计计算如下(红色为满足条件):



则p(矮|不嫁)= 6/6 = 1


p(不上进|不嫁)=?据统计计算如下(红色为满足条件):


则p(不上进|不嫁)= 3/6 = 1/2


那么根据公式:



p (不嫁|不帅、性格不好、身高矮、不上进) = ((1/6*1/2*1*1/2)*1/2)/(1/3*1/3*7/12*1/3)


很显然(1/6*1/2*1*1/2) > (1/2*1/6*1/6*1/6*1/2)


于是有p (不嫁|不帅、性格不好、身高矮、不上进)>p (嫁|不帅、性格不好、身高矮、不上进)


所以我们根据贝叶斯算法可以给这个女生答案,是不嫁!!!!


看完之后,我又简单想了一下,在炮灰模型中,前M个男生就成了炮灰的角色,无论其有多么优秀,都会被拒绝。


设女性最为灿烂的青春为18-28岁,在这段时间中将会遇到一生中几乎全部的追求者(之前之后的忽略不计),且追求者均匀分布,则女性从18+10/e=21.7即22岁左右开始接受追求……这告诉我们,想谈恋爱找大四的……


在文章中只考虑了N个男生表白的先后顺序是完全随机的,并没有考虑相邻两次之间的时间隔。如果把时间因素也考虑进去的话,在一个相对较短的时间中,可以近似的假设为齐次泊松过程,这样不仅可以得出女生应该选择上面的第M个男生的结论,而且找到男生表白的最佳时间在t=T/e时刻。 例如如果取时间段为大学四年的话,则T/e=1.4715。 也就是说,在大学四年里,男生表白的最佳时刻在第三个学期的期末或寒假。


如果这个时间段较长的话,那么男生追求可近似假设为了一个非齐次泊松过程,或者分段齐次泊松过程,具体建模中对各段参数lamma的估计就比较困难了,而且每个人以后的经历都会不同,不太可能找到一个统一的参数集。


朋友,如果你追求一个女生而遭到拒绝,看完这篇文章后你会突然发现,也许这不是你的的错,也许你真的很优秀,只是很不幸,你成了“炮灰”。


希望上面这些看似复杂的推导和模型对你能有所启发。不要因为一次的拒绝而伤心、失落,振作起来!


例子来源于公众号自然语言处理与机器学习贝叶斯部分例子一话



更多精彩


在公众号后台对话框输入以下关键词

查看更多优质内容!


PPT | 报告 | 读书 | 书单

Python | 机器学习 | 深度学习 | 神经网络

区块链 | 揭秘 | 干货 | 数学


猜你想看




Q: 你当年是炮灰还是Mr. Right

欢迎留言与大家分享

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

    点击查看原文
    本文来自微信公众号:大数据
    发布时间:2018-09-28 21:00:00

    微信号:hzdashuju
    简 介:大数据蕴藏着丰富的信息和价值,如何处理好大数据并发掘其潜藏的商业价值,这是大数据时代的新挑战。我们将为大家提供与大数据相关的最新技术和资讯。



    本站文章为自动抓取,如有相关转载权限问题
    请邮件:admin@caup.net
    其他推荐
     

    用微信扫一扫