信息检索——NB算法的训练及分类过程实现

实验目的: 通过实验,使学生掌握多项式NB文本分类方法。
实验内容: 文本分类是信息检索系统的关键技术,多项式NB文本分类算法是有监督的基于概率的学习方法,优势是速度快,精确率很高。本实验需要编程实现这个训练和应用NB分类器的算法。

例子:

信息检索——NB算法的训练及分类过程实现_第1张图片
1.估计朴素贝叶斯分类器的参数
2.对测试文档进行分类
参数估计:
信息检索——NB算法的训练及分类过程实现_第2张图片
(上述计算中的分母分别是 (8 + 6) 和 (3 + 6),这是因为textc 和 ,的大小分别是8和3,词汇表大小是6)

分类:
在这里插入图片描述因此, 分类器将测试文档分到c = China类,这是因为d5中起正向作用的CHINESE出现3次的权重高于起反向作用的 JAPAN和TOKYO的权重之和。

实验要求:
输入:训练集的属于类的文档和不属于类的文档,以及文档的内容;测试文档的内容。
输出:测试文档的属于类和不属于类的结果
编程语言:python
信息检索——NB算法的训练及分类过程实现_第3张图片信息检索——NB算法的训练及分类过程实现_第4张图片

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

这是程序结果截图:
信息检索——NB算法的训练及分类过程实现_第5张图片

你可能感兴趣的:(python)