机器学习(8)-朴素贝叶斯

1. 条件概率与贝叶斯定理

对于事件A和B,当B发生的情况下,A发生的条件概率为:
P(A|B)=P(AB) / P(B)
如果把 P(AB) 表示为 P(B|A)P(A),那么:

这里写图片描述

2. 朴素贝叶斯

朴素贝叶斯是一个基于贝叶斯定理的分类算法,其基本假设是所有特征是相互独立的。
**

3. 根据名字判断性别

**
读取训练集和测试集

'''

训练集:120000
预测集:32040 

变量说明: 
变量名 解释
id  编号
name    名字 无姓氏
gender :0表示女生,1表示男生。

准确度=预测正确数/总数

'''
train = pd.read_csv('train.txt')
test = pd.read_csv('test.txt')

# 把数据分为男女两部分
names_female = train[train['gender'] == 0]
names_male = train[train['gender'] == 1]

# totals用来存放训练集中女生、男生的总数
totals = {'f': len(names_female),
          'm': len(names_male)}

分别计算在所有女生(男生)的名字当中,某个字出现的频率。
相当于是计算 P(Xi|女生)和P(Xi|男生)

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']

实现预测函数

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']

result = []
for name in test['name']:
    LogProbs = ComputeLogProb(name, bases, totals, frequency_list_m, frequency_list_f)
    gender = GetGender(LogProbs)
    result.append(int(gender))

看看结果:
这里写图片描述

**

*源码与数据集下载地址:下载RAR 没有积分的也可以免费向我索要哈,评论区留下邮箱地址。我看见的时候就打包发送喽~*

**

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值