返回顶部
首页 > 资讯 > 精选 >web算法中朴素贝叶斯如何实现文档分类
  • 309
分享到

web算法中朴素贝叶斯如何实现文档分类

2023-06-02 02:06:51 309人浏览 薄情痞子
摘要

本篇内容主要讲解“WEB算法中朴素贝叶斯如何实现文档分类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web算法中朴素贝叶斯如何实现文档分类”吧!  作业要求:  实验数据在bayes_data

本篇内容主要讲解“WEB算法中朴素贝叶斯如何实现文档分类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web算法中朴素贝叶斯如何实现文档分类”吧!

  作业要求:

  实验数据在bayes_datasets文件夹中。其中,

   train为训练数据集,包含hotel和travel两个中文文本集,文本为txt格式。hotel文本集中全部都是介绍酒店信息的文档,travel文本集中全部都是介绍景点信息的文档;

   Bayes_datasets/test为测试数据集,包含若干hotel类文档和travel类文档。

  用朴素贝叶斯算法对上述两类文档进行分类。要求输出测试数据集的文档分类结果,即每类文档的数量。

  (例:hotel:XX,travel:XX)

  贝叶斯公式:

  朴素贝叶斯算法的核心,贝叶斯公式如下:

web算法中朴素贝叶斯如何实现文档分类

  代码实现:

  第一部分:读取数据

  f_path = os.path.abspath('.')+'/bayes_datasets/train/hotel'

  f1_path = os.path.abspath('.')+'/bayes_datasets/train/travel'

  f2_path = os.path.abspath('.')+'/bayes_datasets/test'

  ls = os.listdir(f_path)

  ls1 = os.listdir(f1_path)

  ls2 = os.listdir(f2_path)

  #去掉网址的正则表达式

  pattern = r"(Http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*,]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)|([a-zA-Z]+.\w+\.+[a-zA-Z0-9\/_]+)"

  res = []

  for i in ls:

  with open(str(f_path+'\\'+i),encoding='UTF-8') as f:

  lines = f.readlines()

  tmp = ''.join(str(i.replace('\n','')) for i in lines)

  tmp = re.sub(pattern,'',tmp)

  remove_digits = str.maketrans('', '', digits)

  tmp = tmp.translate(remove_digits)

  # print(tmp)

  res.append(tmp)

  print("hotel总计:",len(res))

  for i in ls1:

  with open(str(f1_path + '\\' + i), encoding='UTF-8') as f:

  lines = f.readlines()

  tmp = ''.join(str(i.replace('\n', '')) for i in lines)

  tmp = re.sub(pattern, '', tmp)

  remove_digits = str.maketrans('', '', digits)

  tmp = tmp.translate(remove_digits)

  # print(tmp)

  res.append(tmp)

  print("travel总计:",len(res)-308)

  #print(ls2)

  for i in ls2:

  with open(str(f2_path + '\\' + i), encoding='UTF-8') as f:

  lines = f.readlines()

  tmp = ''.join(str(i.replace('\n', '')) for i in lines)

  tmp = re.sub(pattern, '', tmp)

  remove_digits = str.maketrans('', '', digits)

  tmp = tmp.translate(remove_digits)

  # print(tmp)

  res.append(tmp)

  print("test总计:",len(res)-616)

  print("数据总计:",len(res))

  这一部分的任务是将放在各个文件夹下的txt文档读入程序,并将数据按照需要的形式存放。数据分为训练集和测试集,而训练集又包括景点和酒店两类,故数据总共分为三类,分三次分别读取。在训练集的每一个txt文件中最前端都有一串网址信息,我用正则表达式将其过滤掉,后来发现此部分并不会影响最终的结果。之后将三类文档依次读取,将读取的结果存放入一个结果list中。list的每一项为一个字符串,存放的是一个txt文件的去除掉要过滤的数据之后的全部信息。最终得到travel文件夹下共有308个文档,hotel文件夹下也有308个文档,测试集共有22个文档。

  第二部分:分词,去除停用词

  stop_Word = {}.fromkeys([',','。','!','这','我','非常','是','、',':',';'])

  print("中文分词后结果:")

  corpus = []

  for a in res:

  seg_list = jieba.cut(a.strip(),cut_all=False)#精确模式

  final = ''

  for seg in seg_list:

  if seg not in stop_word:#非停用词,保留

  final += seg

  seg_list = jieba.cut(final,cut_all=False)

  output = ' '.join(list(seg_list))

  # print(output)

  corpus.append(output)

  # print('len:',len(corpus))

  # print(corpus)#分词结果

  这一部分要做的是设置停用词集,即分词过程中过滤掉的无效词汇,将每一个txt文件中的数据进行中文分词。首先stop_word存放了停用词集,使用第三方库jieba进行中文分词,将去除停用词后的结果最后放入corpus中。

  第三部分:计算词频

  #将文本中的词语转换为词频矩阵

  vectorizer = CountVectorizer()

  #计算各词语出现的次数

  X = vectorizer.fit_transfORM(corpus)

  #获取词袋中所有文本关键词

  word = vectorizer.get_feature_names()

  #查看词频结果

  #print(len(word))

  for w in word:

  print(w,end=" ")

  print(" ")

  #print("词频矩阵:")

  X = X.toarray()

  #print("矩阵len:",len(X))

  #np.set_printoptions(threshold=np.inf)

  #print(X)无锡人流多少钱 http://www.bhnnk120.com/

  这一部分的任务是将文本中的词语转换为词频矩阵,并且计算各词语出现的次数。词频矩阵是将文档集合转换为矩阵,每个文档都是一行,每个单词(标记)是列,相应的(行,列)值是该文档中每个单词或标记的出现频率。

  但我们需要注意的是,本次作业的词频矩阵的大小太大,我曾尝试输出整个词频矩阵,直接导致了程序卡顿,我也尝试了输出矩阵的第一项,也有近20000个元素,所以如果不是必需,可以不输出词频矩阵。

  第四部分:数据分析

  # 使用616个txt文件夹内容进行预测

  print ("数据分析:")

  x_train = X[:616]

  x_test = X[616:]

  #print("x_train:",len(x_train))

  #print("x_test:",len(x_test))

  y_train = []

  # 1表示好评0表示差评

  for i in range(0,616):

  if i < 308:

  y_train.append(1)#1表示旅店

  else:

  y_train.append(0)#0表示景点

  #print(y_train)

  #print(len(y_train))

  y_test= [0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1]

  # 调用MultionmialNB分类器

  clf = MultinomialNB().fit(x_train,y_train)

  pre = clf.predict(x_test)

  print("预测结果:",pre)

  print("真实结果:",y_test)

  print(classification_report(y_test,pre))

  hotel = 0

  travel = 0

  for i in pre:

  if i == 0:

  travel += 1

  else:

  hotel += 1

  print("Travel:",travel)

  print("Hotel:",hotel)

  这部分的任务是将所有的训练数据根据其标签内容进行训练,然后根据训练得到的结果对测试数据进行预测分类。x_train代表所有的训练数据,共有616组;其对应的标签为y_train,也有616组,值为1代表酒店,值为0代表景点。x_test代表所有的测试数据,共有22组;其对应标签为y_test,亦22组,其值则由我自己事先根据其值手工写在程序中。此时需要注意的是测试集文件在程序中的读取顺序可能与文件夹目录中的顺序不一致。最后将测试集数据使用训练集数据调用MultionmialNB分类器得到的模型进行预测,并将预测结果与真实结果进行对比。

  得出运行结果。

到此,相信大家对“web算法中朴素贝叶斯如何实现文档分类”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: web算法中朴素贝叶斯如何实现文档分类

本文链接: https://lsjlt.com/news/228607.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • web算法中朴素贝叶斯如何实现文档分类
    本篇内容主要讲解“web算法中朴素贝叶斯如何实现文档分类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web算法中朴素贝叶斯如何实现文档分类”吧!  作业要求:  实验数据在bayes_data...
    99+
    2023-06-02
  • 朴素贝叶斯和半朴素贝叶斯(AODE)分类器Python实现
      一、概述  机器学习最后一次实验,要求实现朴素贝叶斯和AODE的半朴素贝叶斯分类器。由于老师说可以调用现成的相关机器学习的库,所以我一开始在做朴素贝叶斯分类器的时候,直接调用了sklearn库,很方便,可是问题来了,在做AODE半朴素贝...
    99+
    2023-06-02
  • 朴素贝叶斯算法的Python实现
    注意:1、代码中的注释请不要放在源程序中运行,会报错。    2、代码中的数据集来源于http://archive.ics.uci.edu/ml/datasets/Car+Evaluation     3、对于朴素贝叶斯的原理,可以查看我的...
    99+
    2023-01-31
    朴素 算法 贝叶斯
  • Java利用朴素贝叶斯分类算法实现信息分类
    目录贝叶斯分类算法 代码实例数据集data.txt代码实现输出结果使用场景贝叶斯分类算法  贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类...
    99+
    2024-04-02
  • python中如何使用朴素贝叶斯算法
    这里再重复一下标题为什么是"使用"而不是"实现": 首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高。 其次,对于数学不好的人来说,为了实现算法而去研究一堆公式是很痛苦的事情。 再次,...
    99+
    2022-06-04
    如何使用 朴素 算法
  • Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类
    这篇文章主要介绍Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据处理与分析本次大赛提供的材料是由csv格式编写,只需调用python中的pandas库读取...
    99+
    2023-06-22
  • Python通过朴素贝叶斯和LSTM分别实现新闻文本分类
    目录一、项目背景二、数据处理与分析三、基于机器学习的文本分类–朴素贝叶斯1. 模型介绍2. 代码结构3. 结果分析四、基于深度学习的文本分类–LSTM1. 模型介绍2. 代码结构3....
    99+
    2024-04-02
  • Python编程之基于概率论的分类方法:朴素贝叶斯
    概率论啊概率论,差不多忘完了。 基于概率论的分类方法:朴素贝叶斯 1. 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理...
    99+
    2022-06-04
    概率论 朴素 方法
  • 机器学习:朴素贝叶斯模型算法原理(含实战案例)
    机器学习:朴素贝叶斯模型算法原理 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍...
    99+
    2023-09-04
    机器学习 人工智能 python 朴素贝叶斯 开发语言
  • python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析
    这篇文章将为大家详细讲解有关python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、概率知识基础1.概率概率就是某件事情发生的可能性。2.联合概率包...
    99+
    2023-06-25
  • C语言中实现朴素模式匹配算法的示例分析
    这篇文章给大家分享的是有关C语言中实现朴素模式匹配算法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是字符串的模式匹配?字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。注意:①...
    99+
    2023-06-15
  • python如何实现决策树分类算法
    今天小编给大家分享一下python如何实现决策树分类算法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前置信息1、决策树决策...
    99+
    2023-07-02
  • 如何使用Java实现分布式计算中的numy算法?
    Java是一种流行的编程语言,它在分布式计算中非常有用。在分布式计算中,numpy算法是一种非常常见的算法。本篇文章将向您介绍如何使用Java实现分布式计算中的numpy算法。 numpy算法是一种用于处理多维数组的算法。在分布式计算中,n...
    99+
    2023-10-09
    分布式 关键字 numy
  • Python如何实现无限级分类树状结构生成算法
    本篇文章给大家分享的是有关Python如何实现无限级分类树状结构生成算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。无限级分类树状结构的应用...
    99+
    2024-04-02
  • 如何用Python实现自然语言处理中的文本分类?
    自然语言处理(Natural Language Processing,简称NLP)是人工智能领域中的一个重要分支。文本分类是NLP中的一个基本任务,它的目的是将文本分成不同的类别。在本文中,我们将介绍如何使用Python实现自然语言处理中的...
    99+
    2023-11-04
    大数据 二维码 自然语言处理
  • 如何用K-means算法的Java实现聚类分析681个三国武将
    如何用K-means算法的Java实现聚类分析681个三国武将,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一,k-means算法介绍:k-means算法接受输入量 k ;然后...
    99+
    2023-06-17
  • 快速查找与二分查找算法如何在Java中实现
    这期内容当中小编将会给大家带来有关快速查找与二分查找算法如何在Java中实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 快速查找:这个是相当简单的,以数组举例,就用一个for循环去查找数组中需要查...
    99+
    2023-05-31
    java 快速查找 二分查找
  • 冒泡排序与二分算法如何在java 项目中实现
    冒泡排序与二分算法如何在java 项目中实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、冒泡算法的原理:冒泡排序算法的一般性策略:搜索整个值列,比较相邻元素,如果两者...
    99+
    2023-05-31
    java 冒泡排序 二分算法
  • Go语言编程中如何实现高效的分布式算法?
    在现代计算机系统中,分布式算法已经成为了一种非常重要的技术。分布式算法可以帮助我们高效地解决一些需要大量计算和数据处理的问题,例如分布式存储、分布式计算等。而在Go语言中,我们可以使用一些高效的分布式算法来优化我们的程序性能。本文将介绍一...
    99+
    2023-08-02
    编程算法 文件 分布式
  • 如何在PHP编程中实现高效的文件加载算法?
    PHP是一种广泛使用的编程语言,其灵活性和易用性使其成为许多Web应用程序的首选语言。然而,PHP的一个普遍问题是文件加载速度慢,特别是当应用程序包含大量的文件时。在这篇文章中,我们将讨论如何在PHP编程中实现高效的文件加载算法,以提高应用...
    99+
    2023-08-07
    编程算法 文件 load
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作