实验目的: 通过实验,使学生掌握多项式NB文本分类方法。
实验内容: 文本分类是信息检索系统的关键技术,多项式NB文本分类算法是有监督的基于概率的学习方法,优势是速度快,精确率很高。本实验需要编程实现这个训练和应用NB分类器的算法。
1.估计朴素贝叶斯分类器的参数
2.对测试文档进行分类
参数估计:
(上述计算中的分母分别是 (8 + 6) 和 (3 + 6),这是因为textc 和 ,的大小分别是8和3,词汇表大小是6)
分类:
因此, 分类器将测试文档分到c = China类,这是因为d5中起正向作用的CHINESE出现3次的权重高于起反向作用的 JAPAN和TOKYO的权重之和。
实验要求:
输入:训练集的属于类的文档和不属于类的文档,以及文档的内容;测试文档的内容。
输出:测试文档的属于类和不属于类的结果
编程语言:python
def getdata():
data={}
k={"#lof#":0}
l=[]
while 1:
t=input("请输入文本:").split()
cl=input("请输入该文本的类别:")
k["#lof#"]+=1
k[cl]=k.get(cl,0)+1
l+=t
if cl in data:
data[cl]+=t
else:
data[cl]=t
flag = input('要继续输入吗[y/n]:')
if flag == 'n':
break
return data,k,len(list(set(l)))
def train_stup(data,k,l):
p={}
pv={}
for c in data.keys():
N=len(data[c])
pc={}
num={}
for mi in data.values():
for m in mi:
num[m]=data[c].count(m)
pc[m]=(num[m]+1)/(N+l)
p[c]=pc
pv[c]=k[c]/k["#lof#"]
print(p)
return pv,p
def test_stup(pv,p,test):
sear={}
for cc in data.keys():
sear[cc]=pv[cc]
for s in test:
sear[cc]=round(sear[cc]*p[cc][s],4)
return sear
data,k,l=getdata()
pv,p=train_stup(data,k,l)
txt=input("请输入测试文档:")
test=txt.split()
clas=test_stup(pv,p,test)
tem=list(clas.items())
for k,v in tem:
print("测试文档{}属于{}类的概率为{}".format(txt,k,v))
tem.sort(key=lambda x:x[1],reverse=True)
print("nNB分类器判定测试文档{}属于{}类".format(txt,tem[0][0]))
这是程序结果截图:



