目录

1、朴素贝叶斯实现新闻分类的步骤

2、代码实现


1、朴素贝叶斯实现新闻分类的步骤

(1)新闻数据

        搜狗新闻数据集SogouC,标签包括财经、IT、健康、体育、旅游、教育、招聘、文化和军事。

(2)准备数据

将数据集划分为训练集和测试集;使用jieba模块进行分词,词频统计,停用词过滤,文本特征提取,将文本数据向量化。

停用词文件:stopwords_cn.txt。

         jieba模块学习:GitHub - fxsjy/jieba: 结巴中文分词 ;    jieba首页、文档和下载 - Python中文分词组件 - OSCHINA - 中文开源技术交流社区

(3)分析数据:使用matplotlib模块分析

(4)训练算法:使用sklearn.naive_bayes 的MultinomialNB进行训练

Sklearn构建朴素贝叶斯分类器官方文档学习

在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。

其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯

(5)测试算法:使用测试集对贝叶斯分类器进行测试。

2、代码实现

# -*- coding: UTF-8 -*-
import os
import random
import jieba
from sklearn.naive_bayes import MultinomialNB
import matplotlib.pyplot as plt"""
函数说明:中文文本处理
Parameters:folder_path - 文本存放的路径test_size - 测试集占比,默认占所有数据集的百分之20
Returns:all_words_list - 按词频降序排序的训练集列表train_data_list - 训练集列表test_data_list - 测试集列表train_class_list - 训练集标签列表test_class_list - 测试集标签列表
"""
def TextProcessing(folder_path, test_size=0.2):folder_list = os.listdir(folder_path)  # 查看folder_path下的文件data_list = []  # 数据集数据class_list = []  # 数据集类别# 遍历每个子文件夹for folder in folder_list:new_folder_path = os.path.join(folder_path, folder)  # 根据子文件夹,生成新的路径files = os.listdir(new_folder_path)  # 存放子文件夹下的txt文件的列表j = 1# 遍历每个txt文件for file in files:if j > 100:  # 每类txt样本数最多100个breakwith open(os.path.join(new_folder_path, file), 'r', encoding='utf-8') as f:  # 打开txt文件raw = f.read()word_cut = jieba.cut(raw, cut_all=False)  # 精简模式,返回一个可迭代的generatorword_list = list(word_cut)  # generator转换为listdata_list.append(word_list)  # 添加数据集数据class_list.append(folder)  # 添加数据集类别j += 1data_class_list = list(zip(data_list, class_list))  # zip压缩合并,将数据与标签对应压缩random.shuffle(data_class_list)  # 将data_class_list乱序index = int(len(data_class_list) * test_size) + 1  # 训练集和测试集切分的索引值train_list = data_class_list[index:]  # 训练集test_list = data_class_list[:index]  # 测试集train_data_list, train_class_list = zip(*train_list)  # 训练集解压缩test_data_list, test_class_list = zip(*test_list)  # 测试集解压缩all_words_dict = {}  # 统计训练集词频for word_list in train_data_list:for word in word_list:if word in all_words_dict.keys():all_words_dict[word] += 1else:all_words_dict[word] = 1# 根据键的值倒序排序all_words_tuple_list = sorted(all_words_dict.items(), key=lambda f: f[1], reverse=True)all_words_list, all_words_nums = zip(*all_words_tuple_list)  # 解压缩all_words_list = list(all_words_list)  # 转换成列表return all_words_list, train_data_list, test_data_list, train_class_list, test_class_list"""
函数说明:读取文件里的内容,并去重
Parameters:words_file - 文件路径
Returns:words_set - 读取的内容的set集合
"""
def MakeWordsSet(words_file):words_set = set()  # 创建set集合with open(words_file, 'r', encoding='utf-8') as f:  # 打开文件for line in f.readlines():  # 一行一行读取word = line.strip()  # 去回车if len(word) > 0:  # 有文本,则添加到words_set中words_set.add(word)return words_set  # 返回处理结果"""
函数说明:文本特征选取
Parameters:all_words_list - 训练集所有文本列表deleteN - 删除词频最高的deleteN个词stopwords_set - 指定的结束语
Returns:feature_words - 特征集
"""
def words_dict(all_words_list, deleteN, stopwords_set=set()):feature_words = []  # 特征列表n = 1for t in range(deleteN, len(all_words_list), 1):if n > 1000:  # feature_words的维度为1000break# 如果这个词不是数字,并且不是指定的结束语,并且单词长度大于1小于5,那么这个词就可以作为特征词if not all_words_list[t].isdigit() and all_words_list[t] not in stopwords_set and 1 < len(all_words_list[t]) < 5:feature_words.append(all_words_list[t])n += 1return feature_words"""
函数说明:根据feature_words将文本向量化
Parameters:train_data_list - 训练集test_data_list - 测试集feature_words - 特征集
Returns:train_feature_list - 训练集向量化列表test_feature_list - 测试集向量化列表
"""
def TextFeatures(train_data_list, test_data_list, feature_words):def text_features(text, feature_words):  # 出现在特征集中,则置1text_words = set(text)features = [1 if word in text_words else 0 for word in feature_words]return featurestrain_feature_list = [text_features(text, feature_words) for text in train_data_list]test_feature_list = [text_features(text, feature_words) for text in test_data_list]return train_feature_list, test_feature_list  # 返回结果"""
函数说明:新闻分类器
Parameters:train_feature_list - 训练集向量化的特征文本test_feature_list - 测试集向量化的特征文本train_class_list - 训练集分类标签test_class_list - 测试集分类标签
Returns:test_accuracy - 分类器精度
"""
def TextClassifier(train_feature_list, test_feature_list, train_class_list, test_class_list):classifier = MultinomialNB().fit(train_feature_list, train_class_list)test_accuracy = classifier.score(test_feature_list, test_class_list)return test_accuracyif __name__ == '__main__':# 文本预处理folder_path = './SogouC/Sample'  # 训练集存放地址all_words_list, train_data_list, test_data_list, train_class_list, test_class_list = TextProcessing(folder_path,test_size=0.2)# 生成stopwords_setstopwords_file = './stopwords_cn.txt'stopwords_set = MakeWordsSet(stopwords_file)test_accuracy_list = []"""deleteNs = range(0, 1000, 20)  # 0 20 40 60 ... 980for deleteN in deleteNs:feature_words = words_dict(all_words_list, deleteN, stopwords_set)train_feature_list, test_feature_list = TextFeatures(train_data_list, test_data_list, feature_words)test_accuracy = TextClassifier(train_feature_list, test_feature_list, train_class_list, test_class_list)test_accuracy_list.append(test_accuracy)plt.figure()plt.plot(deleteNs, test_accuracy_list)plt.title('Relationship of deleteNs and test_accuracy')plt.xlabel('deleteNs')plt.ylabel('test_accuracy')plt.show()"""feature_words = words_dict(all_words_list, 450, stopwords_set)train_feature_list, test_feature_list = TextFeatures(train_data_list, test_data_list, feature_words)test_accuracy = TextClassifier(train_feature_list, test_feature_list, train_class_list, test_class_list)test_accuracy_list.append(test_accuracy)ave = lambda c: sum(c) / len(c)print(ave(test_accuracy_list))

结果为: 

注:

结巴分词词性标注常用词性表示

项目实战-朴素贝叶斯算法实现新闻分类源码及数据集资源下载:

项目实战-朴素贝叶斯算法实现新闻分类源码及数据集.zip-机器学习文档类资源-CSDN下载

项目实战-朴素贝叶斯算法实现垃圾邮件过滤

项目实战-KNN算法实现手写数字识别

项目实战-KNN算法改进约会网站的配对效果

本人博文NLP学习内容目录:

一、NLP基础学习

1、NLP学习路线总结

2、TF-IDF算法介绍及实现

3、NLTK使用方法总结

4、英文自然语言预处理方法总结及实现

5、中文自然语言预处理方法总结及实现

6、NLP常见语言模型总结

7、NLP数据增强方法总结及实现

8、TextRank算法介绍及实现

9、NLP关键词提取方法总结及实现

10、NLP词向量和句向量方法总结及实现

11、NLP句子相似性方法总结及实现

12、NLP中文句法分析

二、NLP项目实战

1、项目实战-英文文本分类-电影评论情感判别

2、项目实战-中文文本分类-商品评论情感判别

3、项目实战-XGBoost与LightGBM文本分类

4、项目实战-TextCNN文本分类实战

5、项目实战-Bert文本分类实战

6、项目实战-NLP中文句子类型判别和分类实战

交流学习资料共享欢迎入群:955817470(群一),801295159(群二)

朴素贝叶斯算法实现新闻分类(Sklearn实现)相关推荐

  1. python人工智能——机器学习——分类算法-朴素贝叶斯算法对新闻进行分类案例

    朴素贝叶斯案例流程 1.加载20类新闻数据,并进行分割 2.生成文章特征词 3.朴素贝叶斯estimator流程进行预估 代码 from sklearn.datasets import fetch_2 ...

  2. Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制

    封面图片:<Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社 图书详情(京东): ================= 关于朴素贝叶斯算法中文垃圾邮件分 ...

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

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

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

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

  5. 机器学习实战:朴素贝叶斯算法在新闻文本数据上的分类表现

    https://www.toutiao.com/a6647102437532369421/ 2019-01-17 08:01:00 大家好,今天跟大家学习一下通过sklearn的朴素贝叶斯模型实战.前 ...

  6. 朴素贝叶斯--新浪新闻分类实例

    对于英文的语句可以通过非字母和非数字进行切分,但是汉语中的一句话该如何进行切分呢?我们可以直接使用第三方分词组件,即jieba来实现分词. 安装 pip install jieba 切分中文语句 im ...

  7. 5-2基于贝叶斯算法的新闻分类任务实战

    import pandas as pd import jieba 数据源:http://www.sogou.com/labs/resource/ca.php df_news = pd.read_tab ...

  8. 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)

    目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...

  9. 机器学习算法基础——朴素贝叶斯算法

    26.朴素贝叶斯算法原理 联合概率和条件概率 联合概率:包含多个条件,且所有条件同时成立的概率 记作:P(A,B) P(A,B)=P(A)P(B) 条件概率:就是事件A在另外一个事件B已经发生条件下的 ...

  10. 朴素贝叶斯算法的介绍

    一.朴素贝叶斯算法的介绍 1.什么是朴素贝叶斯算法? 朴素贝叶斯算法(Naive Bayes Algorithm)是一种基于贝叶斯定理和特征独立性假设的概率分类算法.它被广泛应用于文本分类.垃圾邮件过 ...

最新文章

  1. 5大洲,32个国家:剑桥分析公司的触角到底有多远?
  2. torch 归一化,momentum用法详解
  3. CF140C-New Year Snowmen【优先队列】
  4. dpf linux安装db2_值得一看!数据库及Mysql入门,附详细安装教程
  5. Atitit.得到网络邻居列表java php c#.net python
  6. 【备忘】尚硅谷Scala视频
  7. 软考高项--项目管理概述
  8. python概率分析_请问如何通过Python做R*C列表的Fisher确切概率分析?
  9. 关于三维扫描仪,你需要知道这些
  10. arcgis测量工具测量类型无法选择平面
  11. 华为设备MSDP配置命令
  12. E.03.24 Colin Huang steps down as Pinduoduo chair
  13. 判断线程池任务执行完成
  14. C语言生成n个随机坐标,c语言如何生成随机数 怎样用c语言生成n个随机数?
  15. PSD的网页模版PS切图到网页生成全攻略
  16. 会议室预约小程序-会议室预约小程序
  17. 数仓建模—数据治理的本质与实践
  18. CANopen--基于DS402协议的伺服电机原点回零模式
  19. Centos 安装OpenStack
  20. (附源码)小程序记账微信小程序 毕业设计180815

热门文章

  1. 学习光线跟踪一样的自3D表征Ego3RT
  2. Activity生命周期
  3. 便携计算机硬盘,科技:适用于Mac或PC的最佳便携式外置硬盘
  4. 几种常考的面试题类型
  5. Python数据挖掘 之 数据处理(使用pandas对智联招聘上的北京地区python岗位进行数据清洗)
  6. iPhone 快捷指令 拼接长图
  7. Android Intent详解
  8. 想了解阀门的请进!!!!
  9. 顶级区块链开发人员工具:涉及框架、IDE、安全工具、测试网络、区块链预言机和节点服务
  10. 学好数据结构的重要性