机器学习之贝叶斯和Python实现垃圾邮件分类

贝叶斯原理

1、其最根本的原理同样是利用统计学知识进行推导的,实际就是计算某些特征的组合为某一类的概率,根据概率大的来判断属于哪一类别,这样解释是不是有点抽象,没关系,下面举一个小小的例子就能很快理解了

2、假设有这样一组数据

现在问题为:一个打喷嚏的建筑工人,请问他患上感冒的概率有多大,用公式表示就是求P(感冒/打喷嚏*建筑工人),此时就可以根据我们的概率公式有

P(感冒/打喷嚏*建筑工人)=P(感冒)P(打喷嚏*建筑工人/感冒)/P(打喷*嚏建筑工人)

其中P(感冒)表示在所有类别中感冒概率,接下来需要求的即为P(打喷嚏*建筑工人/感冒)和P(打喷*嚏建筑工人),为了求出这两项的值,需要利用朴素贝叶斯理论即(这里假设各个特征之间相互独立)

P(打喷嚏*建筑工人/感冒)=P(打喷嚏/感冒)P(建筑工人/感冒)

P(打喷嚏*建筑工人)=P(打喷嚏)P(建筑工人)

最后计算得到P(感冒/打喷嚏*建筑工人)=0.66*0.33*0.5/(0.5*0.33)=0.66

这里我们在实际进行分类时,是通过比较各个类别所占概率大小判断所属类别,因此不需要计算P(打喷嚏)和P(建筑工人)

3、总结优缺点优点:可以处理多分类问题,算法简单

缺点:朴素贝叶斯理论有条件限制,需要计算先验概率

Python编程实战——邮件分类

1、在分类之前需要对邮件进行预处理,即将邮件中的单词提取出来,组成词汇列表,并用数字划分此词条对应所属类别

def textParse(filename):
    listop=re.split(r'\W*', filename)   
    listword=[]
    for op in listop:
	    if len(op)>2:
		    op.lower()
	    listword.append(op)
    return listword

2、抽取词条,我们的训练过程是需要计算某一类别邮件中每一词汇的概率,然后利用公式计算测试数据为某一类别概率以此分类,因此我们需要将已有词汇集合起来进行分析

def creatset(dataset):
voca=set([])
for word in dataset:
	voca=set(word)|voca
return list(voca)

3、根据词汇列表和词条,将我们的词汇列表转化为可计算的和分析向量化词条,一条词汇表代表一种训练数据,其中我们的词汇列表中出现位置记1,未出现的位置记0

def wordToVec(wordlist,dataset):
vec=[0]*(len(wordlist))
for i in dataset:
	if i in wordlist:
		vec[wordlist.index(i)]=1
return vec

4、接下来我们就需要计算每个单词在某一类别中出现的概率

def trainbayes(dataset,cate):numdata=len(dataset)
words=len(dataset[0])
p0=np.ones(words)
p1=np.ones(words)
pab=sum(cate)/float(numdata)
p0base=2.0
p1base=2.0
for i in range(numdata):
	if cate[i]==1:
		p1+=dataset[i]
		p1base+=sum(dataset[i])
	else:
		p0+=dataset[i]
		p0base+=sum(dataset[i])
pv1=np.log(p1/p1base)
pv0=np.log(p0/p0base)
return pv1,pv0,pab

这里p0,p1,p0base,p1base的基数应该为0,但是为了避免求测试数据的最终概率时,0和任何数相乘为0会使得结果失误,这里做了平滑处理,另外,对计算概率数据取对数以免数据值过小而损失精度

5、分类处理

def classif(testve,pv1,pv0,pclass):
p1=sum(testve*pv1)+np.log(pclass)
p0=sum(testve*pv0)+np.log(1.0-pclass)
if p1>p0:
	return 1
else:
	return 0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值