# -*- coding: UTF-8 -*-
import jieba
import os
import random
from sklearn.naive_bayes import MultinomialNB
from matplotlib import pyplot as plt def TextProcessing(folder_path, test_size=0.2):
"""
处理路径下的所有文本,并划分训练集和测试集,在训练集上,生成无重复词语集并按出现次数从大到小排序
:param folder_path:文本路径
:param test_size:测试数据占比
:return:all_words_list-词汇表(由训练集得到),train_data_list-训练集词汇表,
test_data_list-测试集词汇表,train_class_list-训练集标签列表,test_class_list-测试集标签列表
"""
folder_list = os.listdir(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) j = 1
for file in files:
if j > 100:
break
with open(os.path.join(new_folder_path, file), 'r', encoding='utf-8') as f:
raw = f.read() word_cut = jieba.cut(raw, cut_all=False)
word_list = list(word_cut)
data_list.append(word_list)
class_list.append(folder)
j += 1
data_class_list = list(zip(data_list, class_list))
random.shuffle(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] += 1
else:
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 def MakeWordsSet(words_file):
"""
生成词汇表
:param words_file:词汇文本
:return:词汇列表
"""
words_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.add(word)
return words_set def words_dict(all_words_list,deleteN,stopwords_set = set()):
"""
按照all_words_list从deleteN到最后,如果单词没出现在stopwords_set中且满足条件,则作为特征词语
:param all_words_list:排序过的训练集词语集
:param deleteN:舍弃训练集中前deleteN个词语
:param stopwords_set:结束语,即出现在这里的词不能作为特征词
:return:特征集
"""
feature_words = []
n = 1
for t in range(deleteN,len(all_words_list),1):
if n > 1000:
break
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 += 1
return feature_words def TextFeatures(train_data_list,test_data_list,feature_words):
"""
将训练集和测试集由词语变成0/1组成的序列,词语出现在feature_words中则为1,反之为0
:param train_data_list: 训练集
:param test_data_list: 测试集
:param feature_words: 特征集
:return: train_feature_list-训练集特征序列,test_feature_list-测试集特征序列
"""
def text_features(text,feature_words):
text_words = set(text)
features = [1 if word in text_words else 0 for word in feature_words]
return features
train_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 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_accuracy if __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_file = './stopwords_cn.txt'
stopwords_set = MakeWordsSet(stopwords_file) test_accuracy_list = []
deleteNs = range(0,1000,20)
for 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)
fig = plt.figure()
f1 = fig.add_subplot(111)
f1.plot(deleteNs,test_accuracy_list,)
f1.set_title('Relationship of deleteNs and test_accuracy')
f1.set_xlabel('deleteNs')
f1.set_ylabel('test_accuracy')
plt.show()

测试结果:

aaarticlea/png;base64,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" alt="" />

参考:https://blog.csdn.net/c406495762/article/details/77500679

使用Sklearn构建朴素贝叶斯分类器-新闻分类的更多相关文章

  1. 文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)

    目录 简介 TFIDF 朴素贝叶斯分类器 贝叶斯公式 贝叶斯决策论的理解 极大似然估计 朴素贝叶斯分类器 TextRNN TextCNN TextRCNN FastText HAN Highway N ...

  2. (数据科学学习手札30)朴素贝叶斯分类器的原理详解&Python与R实现

    一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...

  3. 朴素贝叶斯分类器基本代码 && n折交叉优化

    自己也是刚刚入门.. 没脸把自己的代码放上去,先用别人的. 加上自己的解析,挺全面的,希望有用. import re import pandas as pd import numpy as np fr ...

  4. 用scikit-learn实现朴素贝叶斯分类器 转

    原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...

  5. 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...

  6. 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...

  7. 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)

    朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...

  8. 朴素贝叶斯分类器及Python实现

    贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...

  9. 朴素贝叶斯分类器(Naive Bayes)

    1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...

随机推荐

  1. 【30分钟学完】canvas动画|游戏基础(extra1-1):美图我也行

    前言 本文是接续系列教程的extra1,主要是介绍颜色系统在canvas中的应用. 本来是与extra1一起成文的,因为segmentfault莫名其妙的字数限制bug只能分割放送了. canvas操 ...

  2. VCL界面控件DevExpress VCL Controls发布v19.1.2|附下载

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  3. rsync+inotify实时数据同步多目录实战

    rsync+inotify实时数据同步多目录实战       inotify配置是建立在rsync服务基础上的配置过程 操作系统 主机名 网卡eth0 默认网关 用途 root@58server1 1 ...

  4. 安装nginx 以及nginx负载均衡

    a  安装 [root@localhost ~]# yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++ ...

  5. POJ-2552-The Bottom of a Graph 强连通分量

    链接: https://vjudge.net/problem/POJ-2553 题意: We will use the following (standard) definitions from gr ...

  6. 移动端ios和安卓input问题

    在钉钉开发微应用的时候. 安卓和苹果输入input框的时候.失去焦点和获取焦点会有明显的上下跳动 因此我用绝对定位把位置固定在一个地方.就不会有跳动

  7. 结合webpack使用vue-router

    demo结构 webpack.config.js var path = require('path'); // const { VueLoaderPlugin } = require('vue-loa ...

  8. BZOJ 3545: [ONTAK2010]Peaks 启发式合并 + 离线 + Splay

    Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询 ...

  9. sh_11_九九乘法表

    sh_11_九九乘法表 # 1. 打印 9 行小星星 row = 1 while row <= 9: col = 1 while col <= row: # print("*&q ...

  10. 论文阅读:Stateless Network Functions: Breaking the Tight Coupling of State and Processing

    摘要: 无状态网络功能是一个新的网络功能虚拟化架构,解耦了现有的网络功能设计到无状态处理组件以及数据存储层,在打破紧密耦合的同时,实现了更具可伸缩性和可恢复性的网络功能基础设施.无状态NF处理实例是围 ...