第二天,小白和大牛在公司又讨论上了。
大牛,你骗我,昨天我一时没想明白。程序员的特征很多啊。谢顶只是其中一个,咋能就光凭谢顶就来判断是不是程序员,那样太不合理了。
不要急啊。今天咱们就来说用多个特征来判断是不是程序员。比如你昨天说的谢顶,穿格子衬衫,黑眼圈。我们用这三个特征来判断一个人是不是程序员。
快说快说
你还得跑去人力妹子那帮我统计下数据,咱公司有多少程序员穿格子衬衫,多少非程序员穿格子衬衫,多少程序员黑眼圈,多少非程序员黑眼圈。
好的。
过了一会,小白气喘吁吁的回来了
咱们公司程序员里有20个穿格子衬衫,10个黑眼圈。
非程序员里有30个穿格子衬衫,10个黑眼圈。
加上昨天的咱们公司总共有100个人,45个是程序员,55个非程序员,程序员里15个谢顶,非程序员里15个谢顶
根据贝叶斯公式:你在公司遇到一个穿格子衬衫,谢顶,黑眼圈的人是程序员的概率=A*B/C;
A=所有程序员中谢顶,穿格子衬衫,黑眼圈的比例
B=公司100个人中程序员的比例=45/100
C=公司所有人中谢顶,穿格子衬衫,黑眼圈的比例
所有程序员中谢顶,穿格子衬衫,黑眼圈的比例咋算啊?还有,公司所有人中谢顶,穿格子衬衫,黑眼圈的概率咋算啊?我统计不出来这样的数据啊。
你一下子问到要害了。
这两个比例统计不出来。得算,很麻烦。为了简化运算,假定谢顶,穿格子衬衫,黑眼圈之间的比例没有任何关联,也就是互不影响的情况下,比如谢顶的比例和穿格子衬衫的比例就没有任何关联,如果加个程序员已婚的概率,那估计就和谢顶的概率有很大的关联了,毕竟谢顶的人是很难找到对象的,就不能这样算了。
所有程序员中谢顶,穿格子衬衫,黑眼圈的比例=C*D*E
C=程序员中谢顶的比例=15/45=1/3
D=程序员中穿格子衬衫的比例=20/45=4/9
E=程序员中黑眼圈的比例=10/45=2/9。
这样就把一个复杂的问题简化成几个简单问题的乘积。这就是朴素贝叶斯。
这样啊。那公司所有人中谢顶,穿格子衬衫,黑眼圈的比例怎么算那?也用上面的方法么?
那不能,公司所有人中谢顶,穿格子衬衫,黑眼圈的比例叫全概率(全概率的概念这里就不说了,感兴趣的同学自行百度),它等与:B*C*D*E+W*X*Y*Z。
W=非程序员在公司中的比例=55/100
X=非程序员中谢顶的比例=15/55
Y=非程序员中穿格子衬衫的比例=30/55
Z=非程序员中黑眼圈的比例=10/55
我在咱们公司遇到一个谢顶,穿格子衬衫,黑眼圈的哥们,我根据朴素贝叶斯公司来算。
他是程序员的概率
= B*C*D*E/(B*C*D*E+W*X*Y*Z)
=(1/3*4/9*2/9*0.45)/
(1/3*4/9*2/9*0.45+11/20*3/11*6/11*2/11)
=242/(242*243)
=242/485
对。算的很对。再强调一边,这样的前提是这三个特征之间没有关联。不然就不能这么算了。
朴素贝叶斯公式就如下:
P(C1|F1,F2,F3)
= P(F1,F2,F3|C1)*P(C1) / P(F1,F2,F3)
=P(F1|C1)*P(F2|C1)*P(F3|C1)*P(C1)/
P(C1)*P(F1|C1)*P(F2|C1)*P(F3|C1)+P(C2)*P(F1|C2)*P(F2|C2)*P(F3|C2)
P(F1,F2,F3|C1)= P(F1|C1)*P(F2|C1)*P(F3|C1) 因为F1,F2,F3没有任何关联,所以可以等。
P(F1,F2,F3)=P(C1)*P(F1|C1)*P(F2|C1)*P(F3|C1)+ P(C2)*P(F1|C2)*P(F2|C2)*P(F3|C2)
这就是全概率
C1表示是程序员
C2表示非程序员
F1表示谢顶
F2表示穿格子衬衫
F3表示黑眼圈
P(F1|C1) 表示程序员的谢顶概率
P(F1|C2)表示非程序员的谢顶概率
P(C1)表示公司所有人中程序员的比例
P(C2)表示公司所有人中非程序员的比例