#sklearn 朴素贝叶斯NB算法常用于文本分类,尤其是对于英文等语言来说,分类效果很好;它常用于垃圾文本过滤、情感预测、推荐系统等;是基于概率进行预测的模型,可以做二分类及多分类( 朴素贝叶斯是个不建模的算法,不建模的还有KNN,KMeans,PCA):

目的:预测文本的类别;
工具:语言python;数据分析:pandas,matplotlib,numpy三剑客;数据预测:sklearn;
操作流程:查找并分析数据,sklearn NB机器学习算法进行文本类别预测。

1.数据收集:
sklearn :from sklearn.datasets import fetch_20newsgroups 模块下面有很多数据集供我们测试使用,我们可以引用里面的20类新闻文本数据集,3万篇的数据,来验证我们的算法:
实例化:(加载失败看这里)
加载20篇文章:
news = fetch_20newsgroups(subset=“all”)

2.文章识别,需要先进行特征提取,抽取主要的作用就是抽取出关键词,根据关键词的类别,进行文章类别的确认(里面的程序帮助我们认识文本特征抽取的概念):

特征提取主要针对文本及字典的数据,提出出数据的重要性,方便后面的识别及预测:
a.特征抽取:

# coding=gb2312                    #加入编码格式
#导入包:特征抽取
from sklearn.feature_extraction.text import CountVectorizer
#1.文本特征抽取:
#实例化:
vector = CountVectorizer()
#调用fit_transform并转换数据
res = vector.fit_transform(["Life is short,i like python","Life is too long,i dislike python"])#打印结果:
print(vector.get_feature_names())  #打印筛选出的特征值
print(res)
print(res.toarray())               #将结果转换为数组的样式#2.============jiba,文本特征抽取===================================import jiebac1 = jieba.cut("韩正将与新加坡副总理王瑞杰共同主持召开中新双边合作机制会议")
c2 = jieba.cut("“年味儿”是种很奇妙的氛围,不管这一年有多少收获或是遗憾,只要到了这个特殊的节点,我们就会不由自主地,喜气洋洋地,把年货置办得丰富一些,热闹一些,以告慰这一年的得与失。")
c3 = jieba.cut("记者从国家航天局获悉,12月8日6时59分,嫦娥五号上升器按照地面指令受控离轨,7时30分左右降落在月面经度0度、南纬30度附近的预定落点。")content1 = list(c1)
content2 = list(c2)
content3 = list(c3)c1 = " ".join(content1)
c2 = " ".join(content2)
c3 = " ".join(content3)# print(c1,c2,c3,"\n",content1,content2,content3)cv = CountVectorizer()
data = cv.fit_transform([c1,c2,c3])print(cv.get_feature_names())
print(data.toarray())#3.查看一个词对于一个文本的重要性:文本特征抽取(相当于概率,朴素贝叶斯预测前可用)
#主要就是使用这个:
from sklearn.feature_extraction.text import TfidfVectorizertf = TfidfVectorizer()
# idf = tf.fit_transform(["Life is short,i like python","Life is too long,i dislike python"])
idf = tf.fit_transform([c1,c2,c3])       #第三个里面的文本
print(tf.get_feature_names())   #返回单词列表
print(idf.toarray())            #返回词的权重矩阵#4.字典特征抽取:
from sklearn.feature_extraction import DictVectorizer
'''
字典数据抽取:
:return:None
'''
#实例化:
dict = DictVectorizer()data = [{"city":"北京","temperate":100},{"city":"上海","temperate":60},{"city":"深圳","temperate":30}]result = dict.fit_transform(data)print(dict.get_feature_names())
print(result.toarray())
#resurt的数据类型是sparse矩阵,为的是节约内存,方便读取处理
#ndarray 二维数组

3.朴素贝叶斯算法简介:

a.算法概念:朴素贝叶斯(NB)属于生成式模型(即需要计算特征与类的联合概率分布),计算过程非常简单,只是做了一堆计数。NB有一个条件独立性假设,即在类已知的条件下,各个特征之间的分布是独立的

b.算法思路:NB思路
贝叶斯公式可以表示成下面的样子,其中特征是有多个的(不理解可以进入链接看一下),P(类别|特征)就是我们预测的值:

等号右边的概率都是可计算的,因此可以根据特征预测出文章的类别:

'''
1.朴素贝叶斯的原理:假设特征间相互独立,我们就可以根据概率进行分类;
联合概率:P(X=x,Y=y)   条件概率:P(Y=y|X=x)
贝叶斯等式:P(Y=y|X=x) = P(X=x|Y=y)*P(Y=y)/P(X=x)  大X可以有多个特征;对于二分类为例:我们可以表示成为全概率公式:P(X=x) = P(Y=1)*P(X=x|Y=1)+P(Y=0)*P(X=x|Y=0)
P(Y=1|X=x) = P(Y=1)*P(X=x|Y=1)/P(X=x)
P(Y=0|X=x) = P(Y=0)*P(X=x|Y=0)/P(X=x)
P(Y=1|X=x)+P(Y=0|X=x)=1   求出:P(X=x)
求出概率后,我们结果跟大概率的一致:
分类的时候可以选择P(Y=1|X=x),P(Y=0|X=x)较大的一个作为分类的取值;分母一致,可以只考虑分子;2.处理连续型变量(特征):注:对于概率密度函数f(x),负无穷-正无穷积分是1;P(xi<x<xi+a)= ∫(xi-xi+a)f(x)dx = f(xi)*a ,a在后验概率计算过程中会消掉;所以就可以将连续型变量转化为xi某个点取值的概率问题; f(x)可以主观认为符合高斯分布,伯努利分布,多项式分布;因此:我们可以将连续型变量下某个点概率问题,转化为f(x)在xi上的取值问题;
'''

实例定量的看一下朴素贝叶斯的原理:

拉普拉斯平滑:

属于娱乐的概率是0,显然是不太好的,所以出现了拉普拉斯平滑系数,就是加上个系数,不让他的值是0:拉普拉斯平滑(模块内部函数已经给定了,可以修改,但是没必要,了解即可)

c.优缺点:
优点:稳定的分类效率。 对小规模的数据表现良好;能处理多分类任务,适合增量式训练;对缺失数据不太敏感,算法也比较简单,常用于文本分类(如垃圾邮件过滤)
缺点:需要计算先验概率;分类决策存在错误率;对输入数据的表达形式很敏感;它的主要缺点是它不能学习特征间的相互作用,用mRMR中的R来讲,就是特征冗余。

d.代码实例(文本类别预测):

# coding=gb2312                    #加入编码格式
from sklearn.naive_bayes import MultinomialNB,ComplementNB,BernoulliNB
from sklearn.metrics import brier_score_loss as BS
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import classification_report
import numpy as np
'''
朴素贝叶斯:预测文章所属的类别;
'''
#1.加载20篇文章并进行分割
'''
参数简介:subset选择类中包含的数据子集;train表示训练集,test表示测试集;all表示加载所有数据。
categories可输入None,或者数据所在的标签;不想加载全部数据可以输入参数;
download_if_missing发现本地数据不全,是否自动下载;True/False.
shuffle是否打乱样本数据:True/False
'''
categories = ["sci.space"   #科学技术-太空,"rec.sport.hockey"#运动-曲棍球# ,"talk.politics.guns"#政治-枪支问题# ,"talk.politics.mideast"#政治-中东问题]
train = fetch_20newsgroups(subset="train",categories=categories)
test = fetch_20newsgroups(subset="test",categories=categories)
#查看是否存在样本不均衡问题:
for i in [0,1,2,3]:print(i,(train.target == i).sum()/len(train.target))
print(train.target_names)#进行数据分割:
x_train = train.data
x_test = test.data
y_train = train.target
y_test = test.target#2.生成文章的特征词:重要程度抽取
tf = TfidfVectorizer()
x_train_ = tf.fit_transform(x_train)
x_test_ = tf.transform(x_test)
# print(tf.get_feature_names())#3.朴素贝叶斯estimator流程进行预估:
name = ["MultinomialNB","ComplementNB","BernoulliNB"]
#高斯朴素贝叶斯不接受稀疏矩阵:
models = [MultinomialNB(),ComplementNB(),BernoulliNB()]for name,clf in zip(name,models):clf.fit(x_train_,y_train)# #模型预测:y_pred = clf.predict(x_test_)proba = clf.predict_proba(x_test_)score = clf.score(x_test_,y_test)# #准确率和召回率:# print("每个类别的准确率和召回率:",classification_report(y_test,y_pred))print(name)#四个不同标签的取值下的布里尔分数:Bscore = []for i in range(len(np.unique(y_train))):bs = BS(y_test,proba[:,i],pos_label=i)Bscore.append(bs)print("\tBrier under {}:{:.3f}".format(train.target_names[i],bs))print("\tAverage Brier:{:.3f}".format(np.mean(Bscore)))print("\tAccuracy:{:.3f}".format(score))print("\n")

#布里尔分数只能计算二分类了,刚刚调试半天,最后根据提示,注释掉两个分类后就好了:

以上就完成了一个文本分类的预测,有新的知识再补充吧,布里尔分数用不了可以用其他的评判方式。

4.朴素贝叶斯模型的评判方式:这个讲解还是清楚的
a.混淆矩阵(二分类可以用ROC曲线来看一下:横坐标假正率,纵坐标召回率):
可以看下视频感受一下:混淆矩阵指标


b.布里尔分数(范围0-1;越靠近0越好):

c.对数似然函数(是损失函数,所以数值越小,模型越好):

d.可靠性曲线(横坐标预测概率,纵坐标真实标签,越靠近对角线越好):

数据未分箱,看着很杂乱:

树分箱之后,好多了:

e.预测概率直方图:
我们可以通过绘制直方图来查看模型的预测概率的分布。直方图是以样本的预测概率分箱后的结果为横坐标,每个箱中的样本数量为纵坐标的一个图像。

f.校准可靠性曲线:
等近似回归有两种回归可以使用,一种是基于Platt的Sigmoid模型的参数校准方法,一种是基于等渗回归(isotonic calibration)的非参数的校准方法。概率校准应该发生在测试集上,必须是模型未曾见过的数据。在数学上,使用这两种方式来对概率进行校准的原理十分复杂,而此过程我们在sklearn中无法进行干涉,大家不必过于去深究。

以上就是对朴素贝叶斯的一个简单介绍,前路漫漫,不忘初心。

持续更新,,,,,,

#第26篇分享:一个文本分类的数据挖掘(python语言:sklearn 朴素贝叶斯NB)(2)相关推荐

  1. 机器学习之朴素贝叶斯(一):朴素贝叶斯的介绍、概率基础(拉普拉斯平滑)、sklearn朴素贝叶斯实现API、朴素贝叶斯分类的优缺点、文本的特征工程

    朴素贝叶斯 文章目录 朴素贝叶斯 一.介绍 1.1 文本分类的应用 词云的例子 垃圾邮件分类 文章类别的概率 二.概率基础 2.1 概率例题 2.2 联合概率和条件概率 2.3 朴素贝叶斯-贝叶斯公式 ...

  2. 机器学习(五)常用分类模型(K最近邻、朴素贝叶斯、决策树)和分类评价指标

    机器学习(五)常用分类模型(K最近邻.朴素贝叶斯.决策树)和分类评价指标 文章目录 机器学习(五)常用分类模型(K最近邻.朴素贝叶斯.决策树)和分类评价指标 综述 常用分类模型 K最近邻模型 朴素贝叶 ...

  3. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  4. sklearn分类算法(逻辑回归、朴素贝叶斯、K近邻、支持向量机 、决策树、随机森林 )的使用

    scikit-learn机器学习的分类算法包括逻辑回归.朴素贝叶斯.KNN.支持向量机.决策树和随机森林等.这些模块的调用形式基本一致,训练用fit方法,预测用predict方法.用joblib.du ...

  5. 分类算法之K近邻和朴素贝叶斯

    分类算法之K近邻和朴素贝叶斯 K近邻 一个例子弄懂k-近邻 sklearn k-近邻算法API 朴素贝叶斯 概率论基础 贝叶斯公式 拉普拉斯平滑 sklearn朴素贝叶斯实现API K近邻 一个例子弄 ...

  6. ML之NB:利用朴素贝叶斯NB算法(TfidfVectorizer+不去除停用词)对20类新闻文本数据集进行分类预测、评估

    ML之NB:利用朴素贝叶斯NB算法(TfidfVectorizer+不去除停用词)对20类新闻文本数据集进行分类预测.评估 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 class ...

  7. ML之NB:利用朴素贝叶斯NB算法(CountVectorizer+不去除停用词)对fetch_20newsgroups数据集(20类新闻文本)进行分类预测、评估

    ML之NB:利用朴素贝叶斯NB算法(CountVectorizer+不去除停用词)对fetch_20newsgroups数据集(20类新闻文本)进行分类预测.评估 目录 输出结果 设计思路 核心代码 ...

  8. 新闻分类任务(LDA模型,多项分布朴素贝叶斯)

    新闻分类任务 1.利用gensim建立LDA模型将文本进行主题分类 2.利用多项分布朴素贝叶斯将文本进行分类 数据来源:http://www.sogou.com/labs/resource/list_ ...

  9. 垃圾邮件分类快速理解机器学习中的朴素贝叶斯(Naive Bayes)

    贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来.因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口. 其实 ...

最新文章

  1. 《自然》,工程学突破!仿生物细胞群体机器人问世
  2. 自动化测试之鼠标悬浮操作、双击、鼠标拖拽
  3. c语言用define预处理命令定义,C语言程序设计第八章预处理命令..doc
  4. oauth2.0 原理
  5. SQL Server数据归档的解决方案
  6. JSON格式以及基本用法
  7. 中职升高职c语言程序设计教程课后答案,中职C语言教学创新与实践论文
  8. load average多少是正常_对 cpu 与 load 的理解及线上问题处理思路解读
  9. HDOJ 2955 Robberies
  10. 【测试】禅道搭建在服务器上的操作步骤
  11. Smarty 获取当前日期时间和格式化日期时间
  12. JavaScript 页面跳转、页面重定向
  13. 计算机信息检索工作的原理,2021年湖北自考计算机信息检索课程考试大纲
  14. 2012年8月编程语言排行榜-C领衔称霸Obj-C强势爬升
  15. matlab插图放大模糊,PPT中怎样简单处理放大后失真的图片
  16. Python Flask Web 框架入门
  17. Ubuntu16.04安装ftp配置
  18. 考研英语不熟悉的词义(List16-List20)
  19. s3c2440A操作24C08
  20. iPhone装Android版,在iPhone里装了真·Android系统 这事情已经很神奇了

热门文章

  1. Windows Phone 7游戏高级编程:使用XNA Game Studio 4
  2. XNA游戏:各种输入测试 上
  3. 数据预处理过程中处理方法
  4. 区域生长算法(附MATLAB代码实现)
  5. 未雨绸缪:如何利用混沌工程应对未知故障
  6. 2021年SEO战略权威指南
  7. Win系统 - Windows10 玩游戏卡?试试这招
  8. dfs根目录_win2003分布式文件系统(dfs)配置方法[图文详解]
  9. SpamAssassin白名单和黑名单选项
  10. 计算机组成原理(第三版)复习