朴素贝叶斯算法-分类算法

1 概率基础

概率定义为一件事情发生的可能性

联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B)

条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作P(A|B)

在A1,A2相互独立的情况下,条件概率的特性:P(A1,A2|B)=P(A1|B)P(A2|B)

2 贝叶斯公式

W:特征向量           C:类别

贝叶斯公式最常用于文本分类,上式左边可以理解为给定一个文本词向量W,那么它属于类别C的概率是多少。式子右边分几部分,P(W∣C​​)为在给定类别的情况下,该文档的词向量(被预测文档中出现词)的概率,P(C)为每个文档类别的概率(某文档类型词数/总文档词数),P(F1,F2..)预测文档中每个词的概率

可以理解为:

C可以是不同类别

假如有个训练集统计结果如下:

特征/统计 科技 历史 汇总
诸葛亮 2 60 60
原子弹 55 20 75
飞机 60 23 83
卢沟桥事变 0 65 65
汇总 117 168 285

现有一篇被预测文档:出现了原子弹,飞机,卢沟桥事变属于科技、历史的类别概率?

因为P(原子弹,飞机,卢沟桥事变)在每个统计中都是一样的,所有忽略。

P(科技|原子弹,飞机,卢沟桥事变)=P(原子弹,飞机,卢沟桥事变|科技)P(科技)=(2/55)(60/117)(0/117)(117/285)=0

P(历史|原子弹,飞机,卢沟桥事变)=P(原子弹,飞机,卢沟桥事变|历史)P(历史)=(20/168)(23/168)(65/168)(168/285)

上面的例子中,因为某个某个词的出现概率为0导致属于某个类别为0,这是不合理的,所以引入拉普拉斯平滑

3 拉普拉斯平滑

为了避免训练集样本对一些特征的缺失,即某一些特征出现的次数为0,在计算P(X​1​​,X​2​​,X​3​​,...,X​n​​∣Y​i​​)的时候,各个概率相乘最终结果为零,这样就会影响结果。我们需要对这个概率计算公式做一个平滑处理,即拉普拉斯平滑系数

其中m为特征词向量的个数,α为平滑系数,当α=1,称为拉普拉斯平滑

4 sklearn朴素贝叶斯实现API

sklearn.naive_bayes.MultinomialNB

sklearn.naive_bayes.MultinomialNB(alpha = 1.0) 朴素贝叶斯分类 alpha:拉普拉斯平滑系数

常用方法:

名称 解释

fit(X y[,sample_weight])

根据X y拟合朴素贝叶斯分类器
get_params(deep=) 获取此估计器的参数
set_params(PARAMS) 设置此估计器的参数
partial_fit(X y[,classes,sample_weight]) 增量拟合一批样本
predict(X) 对测试向量X组执行分类
predict_log_proda(X) 返回测试矢量X的对数概率统计
predict_proda(X) 测试矢量X的返回概率估计
score(X y[,sample_weight]) 返回给定测试数据和标签的平均精度

5 朴素贝叶斯算法案例

sklearn20类新闻分类 ,20个新闻组数据集包含20个主题的18000个新闻组帖子

步骤:①加载20类新闻数据,并进行分割

②生成文章特征词

③朴素贝叶斯estimator流程进行预估

from sklearn.naive_bayes import MultinomialNB
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import classification_report
#1加载20类新闻数据,并进行分割
newsgroups = fetch_20newsgroups(subset='all')
#分割
x_train,x_test,y_train,y_test = train_test_split(newsgroups.data,newsgroups.target,test_size=0.25)#2 生成文章特征词,对数据集进行特征抽取
tf = TfidfVectorizer()
#以训练集当中的词的列表进行每篇文章重要性统计
x_train = tf.fit_transform(x_train)
print(tf.get_feature_names())
x_test = tf.transform(x_test)# 进行朴素贝叶斯算法的预测
mlt = MultinomialNB(alpha=1.0)
mlt.fit(x_train,y_train)
y_predict = mlt.predict(x_test)
print("预测的文章类别为",y_predict)
score = mlt.score(x_test,y_test)
print("准确率为:", score)
print("每个类别的精确率,召回率和F1:", classification_report(y_test, y_predict, target_names=newsgroups.target_names))

6 朴素贝叶斯分类优缺点

优点: ①朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。 ②对缺失数据不太敏感,算法也比较简单,常用于文本分类。 ③分类准确度高,速度快

缺点:需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

特点:不需要调参,如果训练集误差大,结果肯定不好。

朴素贝叶斯算法-分类算法相关推荐

  1. 机器学习(十)分类算法之朴素贝叶斯(Naive Bayes)算法

    贝叶斯定理 首先我们来了解一下贝叶斯定理: 贝叶斯定理是用来做什么的?简单说,概率预测:某个条件下,一件事发生的概率是多大? 了解一下公式 事件B发生的条件下,事件A发生的概率为: 这里写图片描述 同 ...

  2. ML之NB:朴素贝叶斯Naive Bayesian算法的简介、应用、经典案例之详细攻略

    ML之NB:朴素贝叶斯Naive Bayesian算法的简介.应用.经典案例之详细攻略 目录 朴素贝叶斯Naive Bayesian算法的简介 1.朴素贝叶斯计算流程表述 2.朴素贝叶斯的优缺点 2. ...

  3. 基于朴素贝叶斯的垃圾分类算法(Python实现)

    有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...

  4. 朴素贝叶斯实现分类_关于朴素贝叶斯分类及其实现的简短教程

    朴素贝叶斯实现分类 Naive Bayes classification is one of the most simple and popular algorithms in data mining ...

  5. r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化

    本文内容原创,未经作者许可禁止转载! 目录 一.前言 二.摘要 三.关键词 四.算法原理 五.经典应用 六.R建模 1.载入相关包(内含彩蛋): 1.1 library包载入 1.2 pacman包载 ...

  6. 八、朴素贝叶斯中文分类实战

    1.朴素贝叶斯中文分类实战 文本分类的流程如下图所示: 朴素贝叶斯中文分类的目录结构 中文分类的目录机构包括停用词文件.训练集文件和和测试集文件,具体内容如下图所示: 2 数据准备与处理 2.1 数据 ...

  7. 朴素贝叶斯和AODE算法详解

    文章目录 一.实验要求 (1)实验目的 (2)数据集简介 (3)实验内容 (4)评价指标 二.数据集的划分 三.朴素贝叶斯 (1)朴素贝叶斯原理 (2)拉普拉斯修正 (3)函数变量解析 (4)代码如下 ...

  8. 【AI数学原理】概率机器学习(四):半朴素贝叶斯之TAN算法实例

    概率机器学习的系列博文已经写到第四篇了,依然关注者乏.虽说来只是自己的学习记录,不过这样下去显得自己贡献值比较低下.于是今天换一种模式来写博文--结合代码实现. 欢迎各位指点交流~ 预备知识: 1.朴 ...

  9. 构造matlab决策树分类器,Matlab建立逻辑回归,决策树,SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线...

    ​ 尽管对于较高的阈值,SVM可以产生更好的ROC值,但逻辑回归通常更擅长区分不良雷达收益与良好雷达.朴素贝叶斯的ROC曲线通常低于其他两个ROC曲线,这表明样本内性能比其他两个分类器方法差. 比较所 ...

  10. matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

    原文链接:http://tecdat.cn/?p=15508 绘制ROC曲线通过Logistic回归进行分类 加载样本数据.load fisheriris通过使用与versicolor和virgini ...

最新文章

  1. 利用C#语言实现小闹钟
  2. python正则表达式语法-python正则表达式语法大全讲解教程实例一
  3. Symfony2Book06:路由
  4. 串口初始化结构体和固件库讲解
  5. 在计算机硬盘中没有什么,如果在打开计算机后找不到硬盘,应该怎么办?
  6. JAVA UDP网络编程学习笔记
  7. 计算机网络(二十五)-IP数据报格式
  8. Introduce Foreign Method(引入外加函数)
  9. 想要成为数据科学家?知道这11种机器学习算法吗?
  10. 从开场白第一句到得分
  11. IOS设计模式学习(7)单例
  12. Python第三方库:jieba库与中文分词概述(全面详解)
  13. 45.更新一下scrapy爬取工商信息爬虫代码
  14. NMOS和PMOS管
  15. InputStreamReader和OutputStreamWriter 的区别和用法
  16. 北航计算机组成实验课,北航计算机组成实验Project5
  17. 《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件
  18. Docker下elasticsearch8部署、扩容、基本操作实战(含kibana)
  19. 非计算机专业买几寸电脑好,学习计算机网路技术专业,是不是需要买电脑啊
  20. vim输入i无法进入编辑模式

热门文章

  1. 微信公众号--相关资料
  2. Flume之核心架构深入解析
  3. 基于bootstrap框架在ie8以下,兼容媒体查询[css样式]
  4. Chrome 扩展 最近的历史 HistoryBar v1.1
  5. The Power of Android Action Bars(转载)
  6. 如何通过PHP将excel的数据导入MySQL中
  7. Jquery 常用总结
  8. sprintf()、fprintf()的使用方法
  9. 给电子类大学生一点求职建议
  10. TQ210——下载总结