阅读目录
导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果。所以很受欢迎,对于朴素贝叶斯的学习,本文首先介绍理论知识即朴素贝叶斯相关概念和公式推导,为了加深理解,采用一个维基百科上面性别分类例子进行形式化描述。然后通过编程实现朴素贝叶斯分类算法,并在屏蔽社区言论、垃圾邮件、个人广告中获取区域倾向等几个方面进行应用,包括创建数据集、数据预处理、词集模型和词袋模型、朴素贝叶斯模型训练和优化等。然后结合复旦大学新闻语料进行朴素贝叶斯的应用。最后,大家熟悉其原理和实现之后,采用机器学习sklearn包进行实现和优化。由于篇幅较长,采用理论理解、案例实现、sklearn优化三个部分进行学习。(本文原创,转载必须注明出处: 一步步教你轻松学朴素贝叶斯模型算法Sklearn深度篇3)
目录
1 机器学习:一步步教你轻松学KNN模型算法
2 机器学习:一步步教你轻松学决策树算法
3 机器学习:一步步教你轻松学朴素贝叶斯模型算法理论篇1
4 机器学习:一步步教你轻松学朴素贝叶斯模型实现篇2
5 机器学习:一步步教你轻松学朴素贝叶斯模型算法Sklearn深度篇3
6 机器学习:一步步教你轻松学逻辑回归模型算法
7 机器学习:一步步教你轻松学K-means聚类算法
8 机器学习:一步步教你轻松学关联规则Apriori算法
9 机器学习: 一步步教你轻松学支持向量机SVM算法之理论篇1
10 机器学习: 一步步教你轻松学支持向量机SVM算法之案例篇2
11 机器学习: 一步步教你轻松学主成分分析PCA降维算法
12 机器学习: 一步步教你轻松学支持向量机SVM降维算法
更多文章请点击这里>>
复旦新闻语料:朴素贝叶斯中文文本分类
项目概述
本节介绍朴素贝叶斯分类算法模型在中文领域中的应用。我们对新闻语料进行多文本分类操作,本文选择艺术、文学、教育、哲学、历史五个类别的训练文本,然后采用新的测试语料进行分类预测。
收集数据
数据集是从复旦新闻语料库中抽取出来的,考虑学习使用,样本选择并不大。主要抽选艺术、文学、教育、哲学、历史五个类别各10篇文章。全部数据文档50篇。具体情况不同对收集数据要求不同,你也可以选择网络爬取,数据库导出等。这文档读取时候可能会遇到gbk,utf-8等格式共存的情况,这里建议采用BatUTF8Conv.exe(点击下载)工具,进行utf-8格式批量转化。
准备数据
创建数据集代码如下:
'''创建数据集和类标签''' def loadDataSet(): docList = [];classList = [] # 文档列表、类别列表 dirlist = ['C3-Art','C4-Literature','C5-Education','C6-Philosophy','C7-History'] for j in range(5): for i in range(1, 11): # 总共10个文档 # 切分,解析数据,并归类为 1 类别 wordList = textParse(open('./fudan/%s/%d.txt' % (dirlist[j],i),encoding='UTF-8').read()) docList.append(wordList) classList.append(j) # print(i,'\t','./fudan/%s/%d.txt' % (dirlist[j],i),'\t',j) return docList,classList ''' 利用jieba对文本进行分词,返回切词后的list ''' def textParse(str_doc): # 正则过滤掉特殊符号、标点、英文、数字等。 import re r1 = '[a-zA-Z0-9’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘’![\\]^_`{|}~]+' str_doc=re.sub(r1, '', str_doc) # 创建停用词列表 stwlist = set([line.strip() for line in open('./stopwords.txt', 'r', encoding='utf-8').readlines()]) sent_list = str_doc.split('\n') # word_2dlist = [rm_tokens(jieba.cut(part), stwlist) for part in sent_list] # 分词并去停用词 word_2dlist = [rm_tokens([word+"/"+flag+" " for word, flag in pseg.cut(part) if flag in ['n','v','a','ns','nr','nt']], stwlist) for part in sent_list] # 带词性分词并去停用词 word_list = list(itertools.chain(*word_2dlist)) # 合并列表 return word_list ''' 去掉一些停用词、数字、特殊符号 ''' def rm_tokens(words, stwlist): words_list = list(word
