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


《信息检索导论》部分实验python实现汇总请进入此博客查看。

1.实验目的

通过实验,使学生掌握多项式NB文本分类方法。

2.实验任务与要求

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

3.实验说明书

⑴功能描述

用户输入训练集中的属于类的文档和不属于类的文档,以及文档的内容;测试文档的内容。系统计算并输出测试文档的属于类和不属于类的结果。

⑵概要设计

通过概率计算模块实现NB算法的训练及分类过程。

⑶详细设计

  • 总体流程图

图1 总体流程图

  • 概率计算模块

图2概率计算模块

⑷代码实现

  • 示例输入
d:document
c:class
请输入文档:Chinese Beijing Chinese
属于China类输入1,不属于输入01
要继续输入吗?[y|n]:y
请输入文档:Chinese Chinese Shanghai
属于China类输入1,不属于输入01
要继续输入吗?[y|n]:y
请输入文档:Chinese Macao
属于China类输入1,不属于输入01
要继续输入吗?[y|n]:y
请输入文档:Tokyo Japan Chinese
属于China类输入1,不属于输入00
要继续输入吗?[y|n]:n
请输入测试文档:Chinese Chinese Chinese Tokyo Japan
  • 主程序

程序中while下语句用于获取用户输入的训练文档,cn用于记录属于C类的训练文档个数,lcn记录训练文档总个数。testd 所在语句获取用户输入的测试文档。
for引导的循环用于计算概率,其中PctestdPc为属于C类的概率,FPctestdFPc为不属于C类的概率,Pc为总文档中属于C类文档的概率,FPc为不属于C类文档的概率。

cn, lcn, df = 0, 0, {1: [], 0: []}
while(1):
    d = input('请输入训练文档:').split(' ')
    c = eval(input('属于China类输入1,不属于输入0:'))
    if c == 1:
        cn += 1
    lcn += 1    
    df[c] = df[c] + d
    flag = input('要继续输入吗?[y|n]:')
    if flag == 'n':
        break

testd = input('请输入测试文档:').split()

#df = {1: ['Chinese', 'Beijing', 'Chinese', 'Chinese', 'Chinese', 'Shanghai', 'Chinese', 'Macao'], 0: ['Tokyo', 'Japan', 'Chinese']}
#testd = ['Chinese', 'Chinese', 'Chinese', 'Tokyo', 'Japan']

testdin = set(testd)
Pc = cn/lcn
FPc = 1 - Pc

Pctestd, FPctestd = 1, 1
lc, Flc, l = len(df[1]), len(df[0]), len(set(df[1] + df[0]))
tt, Ftt = '', ''
for i in testdin:
    mi = testd.count(i)
    Pctestd *= ((df[1].count(i) + 1)/(lc + l))**mi
    FPctestd *= ((df[0].count(i) + 1)/(Flc + l))**mi
 
Pctestd = round(Pctestd*Pc, 4)
FPctestd = round(FPctestd*FPc, 4)
flag = 'China' if Pctestd > FPctestd else '非China'
print('\n计算属于China的概率为{},不属于China类的概率为{},\n所以分类器将测试文档分到{}类。'.format(Pctestd, FPctestd, flag))   

4.实验成果

运行程序,根据提示进行输入,得到结果如下图。

图3 实验成果

5.程序调试过程

在程序调试过程中,预设训练文档与测试文档,得到结果如下图。

图4 调试过程

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lazyn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值