课程名称:Artificial Intelligence

人工智能:  中山大学  本科生实验报告

实验题目

  朴素贝叶斯法完成文本信息情感分类训练,要求使用拉普拉斯平滑技巧:
  在给定文本数据集完成文本情感分类训练,在测试集完成测试,计算准确率。(提示:可借助 sklearn 机器学习库完成文本特征(tf-idf)提取)
  思考:在前面的文本分类算法中,如果测试文本中的单词没有在训练文本中出现会造成什么结果?
  会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法是采用贝叶斯估计。具体地,方法为:

实验内容

算法原理

(1)使用read_data()函数分别读取train.txttest.txt文件。
(2)将读取内容的每一行进行加工并打包成node类,方便以后提取使用。
(3)对test.txt文件里的每一行,通过bayes()函数找到在训练集条件下的最大可能的情感。
(4)将得到的情感与test.txt文件里的情感对比,得到正确个数,并求出正确率。

关键代码展示(带注释)

(1)将每一行文本打包

# 打包每一句话的信息
class node:def __init__(self,word_set,dic,emotion,word):self.word_set = word_set # 词集self.dic = dic # 词频self.emotion = emotion # 情感self.word = word # 内容

(2)读取数据

# 读取数据
def read_data(file):with open(file,'r') as f:lines = f.readlines()line_num = len(lines) - 1# line_num = 5 # 先读5行试验data = []for i in range(1,line_num+1):dic = {}word_set = set([])word = lines[i].split()[3:]emotion = (int)(lines[i].split()[1])for w in word:if w in word_set:dic[w] += 1else:word_set.add(w)dic[w] = 1for w in dic:dic[w] = dic[w]/len(word)    data.append(node(word_set,dic,emotion,word))
return datatrain_data = read_data('train.txt')
test_data = read_data('test.txt')
# for i in range(len(test_data)):
#     print(test_data[i].word_set)
#     print(test_data[i].dic)
#     print(test_data[i].emotion)
#     print()

(3)贝叶斯函数

# 贝叶斯估计
def bayes(x,train_set):lemd = 1 # 拉普拉斯平滑p = [0]*7for line in train_set:px = 1 # 该句情感下的贝叶斯估计p_k = [0]*len(x) # x(k):第k个元素在train中出现的概率p_k_sum = 0 # x(k)之和for k in range(len(x)):if x[k] in line.word_set:p_k[k] = line.dic[x[k]]else:p_k[k] = 0p_k_sum += p_k[k]for k in range(len(x)):px = px * (p_k[k]+lemd)/(p_k_sum+len(x)*lemd)       p[line.emotion] += px / len(train_set) # 默认每个句子的概率都是1/nemo = 0for i in range(7):if p[i]>p[emo]:emo = ireturn emo

(4)计算正确率

# 计算正确率
correct_num = 0 # 正确个数
correct_rate = 0 # 正确率
for test in test_data:emo = bayes(test.word,train_data)if emo == test.emotion:correct_num += 1# print("pre",emo)# print("fact",test.emotion)# print(emo==test.emotion)
correct_rate = correct_num/len(test_data)
print(correct_rate)

实验结果及分析
输入:无
输出:

贝叶斯算法-情感分类相关推荐

  1. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  2. 朴素贝叶斯算法实现分类以及Matlab实现

    开始 其实在学习机器学习的一些算法,最近也一直在看这方面的东西,并且尝试着使用Matlab进行一些算法的实现.这几天一直在看得就是贝叶斯算法实现一个分类问题.大概经过了一下这个过程: 看书→\righ ...

  3. 朴素贝叶斯算法——文本分类(离散型)

    朴素贝叶斯算法:按照概率分类的算法. 我们在豆瓣上经常能看到一些书籍和电影评价,有好的评价,也有差评. 关于影评好坏的结果是怎么来的呢?后台小姐姐一条条的看,然后进行分类吗?利用我们的朴素贝叶斯算法, ...

  4. 自然语言处理(NLP)编程实战-1.2 使用朴素贝叶斯实现情感分类

    内容汇总:https://blog.csdn.net/weixin_43093481/article/details/114989382?spm=1001.2014.3001.5501 课程笔记:1. ...

  5. 机器学习:朴素贝叶斯算法+中文情感分类+python

    朴素贝叶斯中文情感分类 1.写在前面 朴素贝叶斯算法理论在很多博客上已经解释的很详细了,本文就不再叙述,本文注重于算法的应用以及编程实现,在读取前人的博客以及他们的项目应用,本人结合书本<机器学 ...

  6. 朴素贝叶斯算法实现对邮件的分类

    通过朴素贝叶斯算法来分类垃圾邮件的PYTHON实现(超易懂) 文章目录 通过朴素贝叶斯算法来分类垃圾邮件的PYTHON实现(超易懂) 前言 一.朴素贝叶斯算法分类垃圾邮件原理 二.python实现 1 ...

  7. 贝叶斯文本分类python_scikit_learn 中朴素贝叶斯算法做文本分类的 实践总结

    朴素贝叶斯算法对于分类非常高效 想了解的可以参考这篇博文:贝叶斯从浅入深详细解析,详细例子解释 - zwan0518的专栏 - 博客频道 - CSDN.NET贝叶斯从浅入深 先来做个小小总结说明 在这 ...

  8. 贝叶斯算法(3)新闻分类任务实战:jieba中文分词、tfidf特征词提取、wordcloud词云展示、LDA主题建模、朴素贝叶斯算法分析预测

    1 加载数据 import pandas as pd import jieba # 数据源:http://www.sogou.com/labs/resource/ca.phpval_path = '/ ...

  9. 详解基于朴素贝叶斯的情感分析及 Python 实现

    相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) ╮(╯-╰ ...

最新文章

  1. winhttp get 实例_实例|CASS的绘制的航道断面,怎么多了两个边沟? 135
  2. wds和dhcp分开做需要注意问题
  3. 一道拉普拉斯逆变换练习题和对应的数值计算方法
  4. runtime 关联对象objc_setAssociatedObject
  5. 文远知行核武器曝光:无人车量产都靠它
  6. A. 本地DNS服务器的位置
  7. 计算机网络 校园网规划,计算机网络课程校园网规划设计
  8. JS 浏览器关闭事件
  9. 根据文件路径打开文件所在文件夹,并且默认选中该文件
  10. 中国高性能计算服务器排名,2007中国高性能计算100强出炉
  11. C语言基础知识(期末喽)
  12. oracle 定时备份数据库脚本
  13. 《数据结构教程(第五版) 李春葆主编》判断题(第一章-第十章)
  14. 漏洞库:爬取CNVD-国家信息安全漏洞共享平台漏洞库
  15. PLC无线通讯方案详解GRM110
  16. Golang验证身份证号码是否有效
  17. Springboot启动提示:com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILAB
  18. python数据分析与挖掘建模:交叉分析
  19. 梳理STM32F429之通信传输部分---NO.8 硬件SPI
  20. c语言函数任意个数参数的实现

热门文章

  1. 《PUBG》大动作封锁3百万玩家 作弊问题严重
  2. 《算法导论3rd第一章》算法在计算中的作用
  3. C++STL之初识容器和迭代器
  4. python点图_Python | 点图
  5. 基于4G工业路由器的智慧厕所管理方案
  6. 令人敬畏的泰格伍兹 万维钢_5个令人敬畏的全新高级jQuery插件,2013年10月
  7. 使用c语言解析gprmc数据
  8. 【Android】kotlin语法学习
  9. 保护眼睛的颜色和各种背景颜色设置方法
  10. Dolphinscheduler/海豚调度器的安装