基于朴素贝叶斯实现文本分类

数据集介绍

数据集为网上公开的新闻数据,其中数据集包含10个类别。

模型选择

  1. 贝叶斯分类
  2. 贝叶斯公式
  3. 朴素贝叶斯
  4. 拉普拉斯平滑引入
    某个属性的条件概率为0,则会导致整体概率为0,为了避免这个情况,拉普拉斯平滑参数主要是将条件概率为0的属性设置为固定值

文本分类过程

  1. sklearn包名介绍
  • sklearn.metrics: Metrics 度量(主要各种指标)
    Model Selection Interface
    Classification metrics
    Regression metrics
    Multilabel ranking metrics
    Clustering metrics
    Biclustering metrics
    Pairwise metrics
  • sklearn.naive_bayes: Naive Bayes 朴素贝叶斯
    导入包:
import random
import jieba
from sklearn import model_selection
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
import re, string  #re库是Python关于正则表达式的一个内置模块,用于字符串匹配
  1. 数据准备
    数据预处理:主要是去除文本中的标点符号,并分词
    jieba分词,主要是过滤其中特殊字符
def text_to_words(file_path):sentences_arr=[]lab_arr=[]with open(file_path,"r",encoding="utf-8")as f:for line in f.readlines():lab_arr.append(line.split("_!_")[1])#line.split语法,line.split("str")[n],n为返回索引sentence = line.split("_!_")[-1].strip()#移除字符串头尾指定字符sentence = re.sub("[\s+\.\!\/_,$%^*(+\"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()《》:]+", "",sentence) #去除标点符号,替换为空sentence=jieba.lcut(sentence,cut_all=False)sentence_arr.append(sentence)return sentence_arr,lab_arr

加载停用词表

def load_stopwords(file_path):stopwords=[line.strip() for line in open(file_path,encoding="utf8").readlines()]return stopwords

遍历数据,去除停用词,统计词频,生成字典

def get_dict(sentence_arr,stopwords):for sentence in sentence_arr:for word in sentence:if word !=' 'and word.asalpha():# word.isalpha() isalpha函数用于判断字符串是否全部由字母组成if word not in stopwords:word_dic[word]=word_dic.get(word,1)+1word_dic=sorted(word_dic.items(),key=lanbda x:x[0],reverse=True)#按照key降序排列return word_dic

构建特征词表,过滤掉频率低于 word_num 的单词,即词向量维度为 word_num, return: 特征词列表

def get_feature_words(word_dic,word_num):n=0feature_words=[]for word in word_dic:if n<word_num:feature_words.append(word[0])n+=1return feature_words

文本特征表示,根据特征词,将数据集中的句子转化为特征向量

def get_text_features(train_data_list, test_data_list, feature_words):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 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

调用上述函数,完成词表构建

sentences_arr, lab_arr = text_to_words('news_classify_data.txt')   #读取数据集,获取分词后的数据及标签
stopwords = load_stopwords('stopwords_cn.txt')         #加载停用词表,生成停用词列表
word_dic = get_dict(sentences_arr,stopwords)           #去除停用词,统计词频,生成字典
#将数据集划分为训练集和测试集
train_data_list, test_data_list, train_class_list, test_class_list = model_selection.train_test_split(sentences_arr, lab_arr, test_size=0.1)
feature_words =  get_feature_words(word_dic,1000)   #生成特征词列表,词向量维度为1000#将训练集和测试集数据生成特征向量
train_feature_list,test_feature_list = get_text_features(train_data_list,test_data_list,feature_words)

查看特征向量,分析输出结果

print(feature_words[:10])
print(feature_words.index('年'),feature_words.index('月'))
print(train_data_list[0])
print(train_feature_list[0])
  1. 模型创建、训练和评估
classifier=MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)
classifier.fit(train_feature_list,train_class_list)
predict=classifier.predict(test_feature_list)
test_accuracy=accuracy_score(predict,test_class_list)
print("accuracy_score:%.4lf"%(test_accuracy))
  1. 模型预测
def load_sentence(sentence):sentence = re.sub("[\s+\.\!\/_,$%^*(+\"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()《》:]+", "",sentence) #去除标点符号sentence = jieba.lcut(sentence, cut_all=False)   #分词return sentence
lab = [ '文化', '娱乐', '体育', '财经','房产', '汽车', '教育', '科技', '国际', '证券']p_data = '快评:欠薪俱乐部获一线生机,中国足协为何总是心太软,还债金元足球到几时?'#'【中国稳健前行】应对风险挑战必须发挥制度优势'
sentence = load_sentence(p_data)
sentence= [sentence]
print('分词结果:', sentence)
#形成特征向量
p_words = get_text_features(sentence,sentence,feature_words)
res = classifier.predict(p_words[0])
print("所属类型:",lab[int(res)])

思考:

  1. 朴素贝叶斯分类器与贝叶斯分类器有什么不同?朴素贝叶斯的判定准则是什么?
    答:朴素贝叶斯分类器的原理是采用属性条件独立性假设,也就是所有属性互相独立,每个属性独立对分类结果产生影响。
  2. :如何使用朴素贝叶斯分类器进行垃圾邮件分类?
    答:利用公式

基于朴素贝叶斯实现文本分类相关推荐

  1. 朴素贝叶斯网络matlab实现_基于朴素贝叶斯的文本分类方法实战

    基于朴素贝叶斯的文本分类方法 一.朴素贝叶斯原理的介绍 二.朴素贝叶斯分类器的代码实现 分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同时会给出这个猜测的概率估计值.朴素贝叶 ...

  2. 基于朴素贝叶斯的文本分类算法

    基于朴素贝叶斯的文本分类算法 摘要:常用的文本分类方法有支持向量机.K-近邻算法和朴素贝叶斯.其中朴素贝叶斯具有容易实现,运行速度快的特点,被广泛使用.本文详细介绍了朴素贝叶斯的基本原理,讨论多项式模 ...

  3. 朴素贝叶斯基于朴素贝叶斯的文本分类算法

    朴素贝叶斯 以及 基于朴素贝叶斯的文本分类算法 参考文章: https://www.cnblogs.com/jorbin/articles/1915888.html

  4. 朴素贝叶斯文本分类java_基于朴素贝叶斯的文本分类算法

    基于朴素贝叶斯的文本分类算法 摘要:常用的文本分类方法有支持向量机.K-近邻算法和朴素贝叶斯.其中朴素贝叶斯具有容易实现,运行速度快的特点,被广泛使用.本文详细介绍了朴素贝叶斯的基本原理,讨论多项式模 ...

  5. HanLP 基于朴素贝叶斯 训练 文本分类

    一.HanLP 朴素贝叶斯分类器 HanLP 针对文本分类算法已经帮我们实现 朴素贝叶斯法 ,用户可以无需关心内部细节,HanLP 也提供了相关自定义训练接口,前提需要将数据集根据分类放到不同的目录中 ...

  6. 七、朴素贝叶斯中文文本分类

    1.朴素贝叶斯中文文本分类 中文分词 停用词 朴素贝叶斯中文分类举例:新闻文档分类 朴素贝叶斯中文分类的具体过程:加载停用词.中文分词.文本向量化.模型训练和保存.模型的加载和预测. 2 中文分词 2 ...

  7. python朴素贝叶斯的文本分类_自给自足,完全手写一个朴素贝叶斯分类器,完成文本分类...

    Part 1: 本文解决的问题: 我在有这样的一个数据集,里面存放了人们对近期播放电影的评价,当然评价也就分成两部分,好评和差评.我们想利用这些数据训练一个模型,然后可以自动的对影评做出判断,到底是好 ...

  8. python文本分类算法_python编写朴素贝叶斯用于文本分类

    朴素贝叶斯估计 朴素贝叶斯是基于贝叶斯定理与特征条件独立分布假设的分类方法.首先根据特征条件独立的假设学习输入/输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出 ...

  9. NLP系列(3)_用朴素贝叶斯进行文本分类(下)

    作者: 龙心尘 && 寒小阳 时间:2016年2月. 出处:http://blog.csdn.net/longxinchen_ml/article/details/50629110 h ...

最新文章

  1. 镜头视场角计算工具_什么是变焦镜头 变焦镜头介绍【详解】
  2. 多因素方差分析_方差分析入门
  3. HM16.0之帧间预测——xCheckRDCostInter()函数
  4. Redhat, CentOS 设置系统时区
  5. Redis总结(二)C#中如何使用redis
  6. Problem C: 01字串
  7. 最佳调度问题(搜索回溯)
  8. MySQL——Caused by: java.sql.SQLException: Unknown system variable ‘transaction_isolation‘
  9. WPF 可触摸移动的ScrollViewer控件
  10. 一种牛逼的网站分享插件实现
  11. TensorFlow tf.keras.callbacks.ModelCheckpoint
  12. sql server使用维护计划定时备份完整数据库、差异数据库
  13. MongoDB的日志系统
  14. 拓端tecdat|机器学习:在SAS中运行随机森林
  15. Linux里sra文件是什么,生信软件 | Sratools (操作SRA文件)
  16. Java 设计模式 --- Builder模式 Java Builder 模式
  17. python 按比例缩小图片
  18. CAD中打开CAD图纸看不到内容怎么办?
  19. 【论】Strategic sourcing selection for bike-sharing rebalancing: An evolutionary game approach
  20. 操作系统之光--鸿蒙

热门文章

  1. java实现生成二维码及扫码登录
  2. 30个计算机相关的英语词汇,计算机应用常用英语词汇30
  3. 人民日报大家谈:少儿编程热,需要冷思考
  4. Mac系统下加速百度云下载(附软件)
  5. 黑苹果忘记密码解决办法
  6. ... ...WOW S4套装
  7. 单工通信、半双工通信和双工通信
  8. 基于python和opencv的图像分割旋转裁剪
  9. 安卓开发之SoundPool播放音效
  10. 如何让笔记本电脑更省电