前言:
感谢微信群的各位大牛们和忆臻学长的帮助,让我能够完成这个文章。这个文章的开始是这一段时间看到我周围的小伙伴在跟很多的妹子聊天后总是无疾而终,过程虽然有所不同,但是起点和终点大致相同,联想到以前看过的炮灰模型(前半部分是炮灰模型),所以我想能不能可以用一些统计学的方法去概述这个现象并且发现这其中的规律,以便让广大的男屌丝们找到自己合适的另一半。
众所周知生活中涉及到感情的事情是很复杂的,把所有可能影响的因素都考虑到几乎是不可能的。为此我们先对现实进行简化,并做出一些合理的假设,考虑比较简单的一种情况。
为了将实际复杂的问题进行简化,我们做出下面几条合理的假设:
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个男生就被称为“炮灰”,无论他们有多么优秀都要被拒绝)
模型建立:
在这一部分中,根据上面的模型假设,我们先找到对于给定的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的概率为
模型求解:(不感兴趣的话可以直接跳过这部分推导)
这一部分中我们求解使这个表达式取得最大值时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仿真,上述结论正确。
结果分析:
由上述分析可以得到如下结论:为了使一个女生以最大的概率在第一次选择接受男生时遇到的正是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维空间,总个数为2332=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(不帅、性格不好、身高矮、不上进|嫁)的所需项全部求出来了,下面我带入进去即可,
下面我们根据同样的方法来求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/61/211/2)1/2)/(1/31/37/121/3)
很显然(1/61/211/2) > (1/21/61/61/61/2)
于是有p (不嫁|不帅、性格不好、身高矮、不上进)>p (嫁|不帅、性格不好、身高矮、不上进)
所以我们根据贝叶斯算法可以给这个女生答案,是不嫁!!!!
看完之后,我又简单想了一下,在炮灰模型中,前M个男生就成了炮灰的角色,无论其有多么优秀,都会被拒绝
设女性最为灿烂的青春为18-28岁,在这段时间中将会遇到一生中几乎全部的追求者(之前之后的忽略不计),且追求者均匀分布,则女性从18+10/e=217即22岁左右开始接受追求……这告诉我们,想谈恋爱找大四的……
在文章中只考虑了N个男生表白的先后顺序是完全随机的,并没有考虑相邻两次之间的时间隔。如果把时间因素也考虑进去的话,在一个相对较短的时间中,可以近似的假设为齐次泊松过程,这样不仅可以得出女生应该选择上面的第M个男生的结论,而且找到男生表白的最佳时间在t=T/e时刻。 例如如果取时间段为大学四年的话,则T/e=14715。 也就是说,在大学四年里,男生表白的最佳时刻在第三个学期的期末或寒假
如果这个时间段较长的话,那么男生追求可近似假设为了一个非齐次泊松过程,或者分段齐次泊松过程,具体建模中对各段参数lamma的估计就比较困难了,而且每个人以后的经历都会不同,不太可能找到一个统一的参数集。
朋友,如果你追求一个女生而遭到拒绝,看完这篇文章后你会突然发现,也许这不是你的的错,也许你真的很优秀,只是很不幸,你成了“炮灰”。
希望上面这些看似复杂的推导和模型对你能有所启发。不要因为一次的拒绝而伤心、失落,振作起来
其实最好是上机实验
A(:,[1 4])=[2 7; 3 6; 8 5] %提取第一第四列的全面元素构成子矩阵
A(2,:)=[3 1 4 6] %第二行
A(:,1:3)=[2 7 1; 3 1 4;8 2 1]
x+A 会报错, 矩阵加法行列数须相等
A>2= [ 0 1 0 1
1 0 1 1
1 0 0 1]
z=[x y] 为 [1 4 12 2 -1 5]
B=[x; A] 也不合法, 列数须相等
用纸板剪出同样的图形,重物一个,拴重物细线一条。提起图形任何一角,以细线通过该点,做垂线一条。取另一角提起,再做垂线,两线交点。即为形心。
matlab简单实现:
1 把图形内的点都标为1,之外的=0
2 从图形的左侧以垂直于x轴的线,向右扫过图形,直到找到线两侧的和相等(或小于给定小量),求得y坐标
3 从图形的底部以垂直于y轴的线,向上扫过图形,直到找到线两侧的和相等(或小于给定小量),求得x坐标
基本解答如下:
(1-1):
function [b,y] = by(m,n)
b=lcm(m,n);%最小公倍数
y=gcd(m,n);%最大公约数
end
(1-2):
function t=sushu(n)
m=floor(sqrt(n));
for i=2:m
if mod(n,i)==0
t=0;
break;
else
t=1;
end
end
end
(2):可以一次算出每一项,发现他们都是同一个值,这个值的求法:SUM=sum(1:n^2)/n;%n阶魔幻阵特有的和
function [A,H,L,DJ,SUM]=mag(n)
A=magic(n);%产生一个n阶魔幻阵
H=sum(A);%每行的和
L=sum(A);%每列的和
DJ=sum(diag(A));%对角线和
SUM=sum(1:n^2)/n;%n阶魔幻阵特有的和
end
(3):这题我给出“该数各位数字之和为奇数”的求法,结合上面有判断素数的代码自己可以求出
该数各位数字之和为奇数:
function funct
for i=2:999
%l=floor(log10(i))+1; %提取位数
n1=floor(i/100); %取出百位数字n1
n2=mod(floor(i/10),10); %取出十位数字n2
n3=mod(i,10) ; %取出个位数字n3
nsum=n1+n2+n3;
if rem(nsum,2)~=0%判断是否为奇数
disp (i);
end
end
end
自己可以调试看看,祝你成功!
clc;
%(1)
A=rand(3,4)10; %产生3行4列1到10的随机数
La=size(A) %求大小
Wa=ndims(A) %求维度
Ma=length(A) %求所有维中的最大长度
%(2)
mm=[1 0 54 0 58 2 6 0 9 7 3 0];
hello=find(mm==0);
mm(hello)=521 %因为查不到什么叫机器零,就用521代替了。到时用机器换上即可
%(3)
vector=rand(1,12);
bb=reshape(vector,3,4)
由于a是一个常数,那么a就是一个具体的值!在画图时就用a表示,这个似乎办不到,因为如果不知道a是多少,那么这个作图就不知道怎么画。
所以a必须赋值才可以的!
1楼的画不出图形来,不可以用for语句,你的最终结果是一个y值,是不对的!
这样就可以了!
a=10;
x=0:01:10;
y=2x+a;
plot(x,y)
MATLAB下输入:edit,将下面两行百分号之间的内存复制进去,保存。
%%%%%%%%%%%%%%%%%%%%%%%%%%
function f=F(x,y)
f=x^2+sin(xy)+2y;
%%%%%%%%%%%%%%%%%%%%%%%%%%
返回matlab主界面。
输入
F(1,2)
即可
首先确认一下:符号ε(t)是指单位阶跃函数吧?
这似乎是信号与系统领域的惯例,我是学自动控制的,习惯和这个不一样。
零状态响应,即初始条件为0:
>> y=dsolve('D2y+5Dy+6y=1','y(0)=0,Dy(0)=0')y =
-1/2exp(-2t)+1/3exp(-3t)+1/6
零输入响应,即输入为0:
>> y=dsolve('D2y+5Dy+6y=0','y(0)=0,Dy(0)=1')y =
exp(-2t)-exp(-3t)
全响应:
>> y=dsolve('D2y+5Dy+6y=1','y(0)=0,Dy(0)=1')y =
1/2exp(-2t)-2/3exp(-3t)+1/6
欢迎分享,转载请注明来源:表白网
评论列表(0条)