朴素贝叶斯算法

理论:

P(X|Y) = P(X,Y)/P(Y)

P(X,Y) = P(X|Y)P(Y)
P(X,Y) = P(Y|X)P(X)

由此推导出朴素贝叶斯公式:
P(X|Y) = P(Y|X)P(X)/P(Y)

由此推导:

p(yi|X) = P(yi)p(X|yi)/P(X)

Y = 表示类别集合{军事0、财经1、体育2}
yi = 表示第i个类别
X = 一篇文章
xi = 文章中的某一个词.

X={x1,x2,x3...}
分析:

1.P(yi)是先验概率,可以提前算出来的概率,举例

假设有100篇文章(训练集),其中50篇是军事,30篇是财经,20篇体育
P(y=军事) = 50/100
P(y=财经) = 30/100
P(y=体育) =20/100

2.P(X) = 常数,所以接下来计算,公式缩减为

p(yi|X) = P(yi)p(X|yi)

p(X|yi)=p(xj)p(yi)=p(x=词一|y=类别1)p(x=词2|y=类别1)...

举例:

X={军舰、大炮、航母}, y=军事

p(X|y=军事)=p(x=军舰|y=军事)*p(x=大炮|y=军事)*p(x=航母|y=军事)

而p(xj|yi) 的统计2种方法:

第一种:
        分子:军事类文章中包含“谷歌”这词的文章个数
        分母:军事类文章个数
        P(x=谷歌|y=军事) = 分子 / 分母
第二种(实践代码):
        分子:军事类文章中包含“谷歌”这个词的个数
        分母:军事类文章中所有词的个数
        P(x=谷歌|y=军事) = 分子 / 分母

举例:{军事0、财经1、体育2}
p(y=0|X)  = 90%
p(y=1|X)  = 1%
p(y=2|X)  = 9%

实践:朴素贝叶斯

第一步:格式转换,生成训练集和测试集
python DataConvert.py data/ nb_data

1.数据:3607篇文章,各种类别,文件名有标识,分词已经分好的:

直接用词做计算不方便,于是把每一个词变成一个数字,数字和词一一对应,如下:

第一条命令做数据转换,分为(80%)训练集和(20%)测试集,输出:

实现代码  DataConvert.py:

import sys
import os
import random

WordList = []
WordIDDic = {}
TrainingPercent = 0.8

inpath = sys.argv[1]
OutFileName = sys.argv[2]
trainOutFile = file(OutFileName+".train", "w")
testOutFile = file(OutFileName+".test", "w")

def ConvertData():
    i = 0
    tag = 0
    for filename in os.listdir(inpath):
        if filename.find("business") != -1:
            tag = 1
        elif filename.find("auto") != -1:
            tag = 2
        elif filename.find("sport") != -1:
            tag = 3
        i +&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值