简介

贝叶斯定理是18世纪英国数学家托马斯·贝叶斯(Thomas Bayes)提出得重要概率论理论。以下摘一段 wikipedia 上的简介:

所谓的贝叶斯定理源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出
来的。在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有 N 个白球,M 个黑球,你伸手
进去摸一把,摸出黑球的概率是多大”。而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球
的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里
面的黑白球的比例作出什么样的推测”。这个问题,就是所谓的逆向概率问题。

概率复习

在正式介绍公式前,先通过几道简单的概率题来复习概率相关的知识

职业 体型 女神是否喜欢
程序员 超重 不喜欢
产品 匀称 喜欢
程序员 匀称 喜欢
程序员 超重 喜欢
美工 匀称 不喜欢
美工 超重 不喜欢
产品 匀称 喜欢

1.女神喜欢的概率?
2.职业是程序员并且体型匀称的概率?
3.在女神喜欢的条件下,职业是程序员的概率?
4.在女神喜欢的条件下,职业是产品,体重是超重的概率?

在解答前先引入几个概念
事件A发生的概率记作P(A)
联合概率:事件A与事件B同时成立的概率
记作:P(A,B)=P(A)P(B)
条件概率:事件A在另一个事件B已经发生条件下的成立概率
记作:P(A|B)
特性:P(A1,A2|B)=P(A1|B)P(A2|B)

代入公式分别为
1.P(女神喜欢)
2.P(程序员,体型匀称)
3.P(程序员|女神喜欢)
4.P(产品,超重|女神喜欢)

公式定义

贝叶斯定理是关于随机事件 A 和 B 的条件概率:

先根据上面的例子核对公式
3.P(程序员|女神喜欢)=P(女神喜欢|程序员)P(程序员)/P(女神喜欢)=?
2/3*3/7 / 4/7

其中P(A|B)是在 B 发生的情况下 A 发生的可能性。
在贝叶斯定理中,每个名词都有约定俗成的名称:

P(A)是 A 的先验概率,之所以称为“先验”是因为它不考虑任何 B 方面的因素。
P(A|B)是已知 B 发生后 A 的条件概率,也由于得自 B 的取值而被称作 A 的后验概率。
P(B|A)是已知 A 发生后 B 的条件概率,也由于得自 A 的取值而被称作 B 的后验概率。
P(B)是 B 的先验概率,也作标淮化常量(normalizing constant)。

按这些术语,贝叶斯定理可表述为:
后验概率 = (相似度 * 先验概率)/标淮化常量
也就是说,后验概率与先验概率和相似度的乘积成正比。
另外,比例P(B|A)/P(B)也有时被称作标淮相似度(standardised likelihood),Bayes定理可表述为:
后验概率 = 标淮相似度 * 先验概率
条件概率就是事件 A 在另外一个事件 B 已经发生条件下的发生概率。条件概率表示为P(A|B),
读作“在 B 发生的条件下 A 发生的概率”。

联合概率表示两个事件共同发生(数学概念上的交集)的概率。A 与 B 的联合概率表示为

推导

我们可以从条件概率的定义推导出贝叶斯定理。

根据条件概率的定义,在事件 B 发生的条件下事件 A 发生的概率为:

同样地,在事件 A 发生的条件下事件 B 发生的概率为:

结合这两个方程式,我们可以得到:

这个引理有时称作概率乘法规则。上式两边同除以 P(A),若P(A)是非零的,我们可以得到贝叶斯定理:

实际应用

问题替换
P(科技|文档)=P(科技|词1,词2,词3)=P(词1,词2,词3|科技)*P(科技) / P(词1,词2,词3)
P(水果税收编码|商品名称)=P(水果税收编码|词1,词2,词3)


现有一篇被预测文档:出现了影院,支付宝,云计算,计算属于科技、娱乐的类别概率?

思考:属于某个类别为0,合适吗?

根据名称判断男女

所需要训练集下载地址
http://sofasofa.io/competition.php?id=3#c1

import pandas as pd
from collections import defaultdict
import math# 处理名称中的空格和特殊字符
def handleName(name):name.strip()name = ''.join(name.split())name.replace(' ', '')name = name[1:]first = name.find("(")last = name.find(")")if first != -1 and last != -1:name = name[0:first]return nametest = pd.read_csv("name.csv")
test['chuLiNmae'] = test['name'].apply(handleName)# 读取train.txt
train = pd.read_csv('train.txt')# 把数据分为男女两部分
names_female = train[train['gender'] == 0]
names_male = train[train['gender'] == 1]# 统计男女的人数
totals = {'f': len(names_female),'m': len(names_male)}# 女性词汇累积发生概率
frequency_list_f = defaultdict(int)
for name in names_female['name']:for char in name:frequency_list_f[char] += 1. / totals['f']# 男性词汇累积发生概率
frequency_list_m = defaultdict(int)
for name in names_male['name']:for char in name:frequency_list_m[char] += 1. / totals['m']# 计算时增加默认拉普拉斯平滑系数alpha
def LaplaceSmooth(char, frequency_list, total, alpha=1.0):count = frequency_list[char] * totaldistinct_chars = len(frequency_list)freq_smooth = (count + alpha) / (total + distinct_chars * alpha)return freq_smooth# 运用贝叶斯公式计算其某种性别的概率
def GetLogProb(char, frequency_list, total):freq_smooth = LaplaceSmooth(char, frequency_list, total)return math.log(freq_smooth) - math.log(1 - freq_smooth)# 累积每个词汇对应性别的概率
def ComputeLogProb(name, bases, totals, frequency_list_m, frequency_list_f):logprob_m = bases['m']logprob_f = bases['f']for char in name:logprob_m += GetLogProb(char, frequency_list_m, totals['m'])logprob_f += GetLogProb(char, frequency_list_f, totals['f'])return {'male': logprob_m, 'female': logprob_f}# 得到最终答案
def GetGender(LogProbs):return LogProbs['male'] > LogProbs['female']# 求女生的概率的自然对数
base_f = math.log(1 - train['gender'].mean())
# 求女生所有词汇发生概率之和
base_f += sum([math.log(1 - frequency_list_f[char]) for char in frequency_list_f])# 求男的概率的自然对数
base_m = math.log(train['gender'].mean())
# 求男生所有词汇发生概率之和
base_m += sum([math.log(1 - frequency_list_m[char]) for char in frequency_list_m])# 得到男女所有词汇发生的概率值的自然对数
bases = {'f': base_f, 'm': base_m}
result = []
for name in test['chuLiNmae']:# 得到一个名字准备预测性别LogProbs = ComputeLogProb(name, bases, totals, frequency_list_m, frequency_list_f)gender = GetGender(LogProbs)result.append(int(gender))test['gender'] = resulttest.to_csv('MyXingBie.csv', index=False)

最终结果

一平,1
昶胜,1
馨,0
星驰,1
梦媛,0
陈,1
忠良,1
浪,1
建,1
小惠,0

贝叶斯公式简单解释及其运用相关推荐

  1. javascript迭代器_JavaScript符号,迭代器,生成器,异步/等待和异步迭代器-全部简单解释...

    javascript迭代器 by rajaraodv 通过rajaraodv JavaScript符号,迭代器,生成器,异步/等待和异步迭代器-全部简单解释 (JavaScript Symbols, ...

  2. Lucene的评分(score)机制的简单解释

     Lucene的评分(score)机制的简单解释 博客分类: Lucene lucene编程Apachethread  通过Searcher.explain(Query query, int do ...

  3. 常用CSS元素div ul dl dt ol的简单解释

    几个css元素的简单解释 div ul dl dt oldiv,这个很常见,块级元素,div尽量少用,和table一样,嵌套越少越好 ol 有序列表. <ol> <li>--& ...

  4. python的objectproperty,python中property(lambda self: object())简单解释,,最后4行lambda

    python中property(lambda self: object())简单解释,,最后4行lambda 最后4行lambda.问题是:如何运作?它们的含义和结果是什么?您能否以简单的方式显示该声 ...

  5. 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释

    二叉树顾名思义,最多两个孩子. 一般规定一个二叉树,因为节点间有相互连接的原因,所以只要给定根节点,那么顺着寻找左孩子和右孩子便可以遍历到所有的节点,这就是遍历的直观解释. 而遍历分为深度遍历和广度遍 ...

  6. 简单解释什么是 依赖注入 和 控制反转

    简单解释什么是 依赖注入 和 控制反转 2017-07-09 关于 依赖注入 与 控制反转 的概念有些人觉得很难理解,最近在给别人讲这个概念的时候梳理了一个比较好理解的解释,而且我认为非技术人员也应该 ...

  7. resultset不支持循环遍历_二叉树的各种遍历方法的简单解释

    二叉树顾名思义,最多两个孩子. 一般规定一个二叉树,因为节点间有相互连接的原因,所以只要给定根节点,那么顺着寻找左孩子和右孩子便可以遍历到所有的节点,这就是遍历的直观解释. 而遍历分为深度遍历和广度遍 ...

  8. 如何简单解释 MapReduce算法

    原文地址:如何简单解释 MapReduce 算法 在Hackbright做导师期间,我被要求向技术背景有限的学生解释MapReduce算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ...

  9. 教ai玩游戏_简单解释:DeepMind如何教AI玩视频游戏

    教ai玩游戏 by Aman Agarwal 通过阿曼·阿加瓦尔(Aman Agarwal) 简单解释:DeepMind如何教AI玩视频游戏 (Explained Simply: How DeepMi ...

最新文章

  1. Vue实现左右菜单联动实现
  2. mysql online ddl和pt_MySQL的onlineDDL及pt-osc
  3. 高精度人脸表情识别 开源代码
  4. C++ 数组在内存中的分配
  5. 经验分享 | 二本直博浙大?我只是写了篇论文而已
  6. Java中static作用及用法详解
  7. php在函数中定义全局变量,PHP 全局变量在用户自定义函数内部不足见
  8. SQL DATEADD函数
  9. ADBAppium常见问题梳理
  10. echarts5.0 动态柱状图 不用调接口 不用jQuery舒适应用
  11. Android下载文件提示文件不存在。。。 java.io.FileNotFoundException
  12. 大病保险试点6月底前覆盖全国
  13. 飞塔防火墙之ACL配置
  14. ajax提交表单序列化不进请求,表单序列化+ajax跨域提交
  15. 基于pikachu漏洞平台的 --SQL注入攻击学习与总结
  16. 家用计算机的辐射,电脑的辐射有多大?
  17. synaptic No protocol specified issue
  18. flutter Container设置渐变色
  19. 车贷乱象横生,修炼好内功方为易鑫车贷上上之策
  20. vue2.0创建项目步骤

热门文章

  1. .target 属性详解
  2. 捡垃圾:HP 800G1 USDT M2000M独立显卡折腾记
  3. redis 命令 释放连接_Redis连接数需有效地释放
  4. 制作微信小程序 第三天(轮播图 导航栏 按钮 框)
  5. 机器人小车的运动模型
  6. Linux服务器扩容
  7. 怎么用计算机名字链接打印机,4个步骤,教会你快速学会电脑如何连接打印机的安装使用方法...
  8. 门禁系统原理及其组成模块电路分析
  9. vue中报错 fns.apply is not a function
  10. 区块链十年丨公链的成长与演变——BB财经