一、回顾概率论
1、条件概率,这个公式说白了就是不同样本空间下的概率问题!
2、全概率公式,证明不难。
3、贝叶斯公式,这个公式可厉害了,根据原有的数据,由因知果,再执果索因。根据上述公式,推导过程简单的不要不要的。
二、自制文本分类
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 11 07:56:14 2018
@author: Administrator
"""
#创建词汇表
def loadDataSet():
email=[ ['菜鸟','包裹'] , ['邮政','物流','您的','快递','投递','揽投员'],['快件','货号','有效证件','取件','速运'] ,
['您','验证码','本人','操作','请','忽略','短信'],['十分钟','有效'],['验证码','请','完成','验证'],
['尊敬','恭喜','用户','抽奖','机会'],['身份证','贷款','提现'],['您好','您','账户','额度','提现'],
['温馨提醒','您','账户','余额','当前','正常','使用','尽快','交费'],['订单','您','已购']]
label=['快递','验证码','垃圾短信','个人账户']
index=[0,0,0,1,1,1,2,2,2,3,3];
return email,label,index;
#去重获得词汇集,每类词汇集
def vocalTable(dataset,index):
vocaSet=set([]);
vocaClassifier=[] #各类词汇集
typey=set(index)
length=len(typey)
for i in range(0,length): #h创建空集合放对应类型词汇
vocaClassifier.append(set([]));
for i in range(0,len(dataset)):
vocaSet=vocaSet|set(dataset[i]);
vocaClassifier[ index[i] ]= vocaClassifier[ index[i] ] | set(dataset[i]);
vocaSetlist(vocaSet);
for i in range(0,length): #h创建空集合放对应类型词汇
vocaClassifier[i]=list(vocaClassifier[i]);
return list(vocaSet),vocaClassifier,typey
#计算概率
#email,label,index=loadDataSet()
#vocaSet,vocaClassifier,typey=vocalTable(email,index)
def calPossiblity(typey,indexy,vocaClassifier,email): #typey 指 y的类型数值,indexy指数据集
#计算 p(y=Ck)
p_y_k=[];
N=len(typey)
for i in typey:
cnt=0
for j in indexy:
if(j==i):
cnt+=1
p_y_k.append(cnt/N);
#计算 p( x=xij | y=ck )
length=len(typey);
numtype=[]; #每一类的词汇数量
numword=[]; #每类词汇数量
for i in range(0,length):
x=[];
for j in range(0,len(vocaClassifier)):
x.append(0);
numtype.append(0);
numword.append(x);
for i in range(0,len(email)):
for j in email[i]:
for k in range(0,len(vocaClassifier[i])):
if( vocaClassifier[i][k] == j ):
numword[i][j]+=1;
break;
numtype[ indexy[i] ]+=len(email[i])