栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

实验目的: 通过实验,使学生掌握多项式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]))

这是程序结果截图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991097.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号