朴素贝叶斯算法的介绍

这篇具有很好参考价值的文章主要介绍了朴素贝叶斯算法的介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、朴素贝叶斯算法的介绍

1.什么是朴素贝叶斯算法?

朴素贝叶斯算法(Naive Bayes Algorithm)是一种基于贝叶斯定理和特征独立性假设的概率分类算法。它被广泛应用于文本分类、垃圾邮件过滤、情感分析等任务。

朴素贝叶斯算法的基本思想是基于训练数据中的特征和标签之间的概率关系,通过计算后验概率来进行分类预测

2.朴素贝叶斯算法的应用场景

朴素贝叶斯算法在许多应用场景中都有广泛的应用,特别适合以下情况:

  1. 文本分类:朴素贝叶斯算法在文本分类任务中表现出色,例如垃圾邮件过滤、情感分析、新闻分类等。它可以根据文本中出现的词语频率或TF-IDF值进行分类。

    朴素贝叶斯算法的介绍

    朴素贝叶斯算法的介绍

  2. 多类别分类:朴素贝叶斯算法适用于多类别分类问题,可以处理多个离散类别或标签

  3. 实时分类:朴素贝叶斯算法具有快速的训练和预测速度,适合实时分类任务,如实时推荐系统、实时广告点击率预测等。

  4. 高维数据:朴素贝叶斯算法在高维数据集上表现良好,对于特征维度较大的问题,它的计算复杂度较低,能够高效地进行分类。

  5. 弱相关特征:朴素贝叶斯算法的特征独立性假设使得它对于特征之间的相关性较弱的问题表现良好,当特征之间的相关性较弱或可以近似为独立时,朴素贝叶斯算法能够提供较好的分类效果。

  6. 数据稀疏性:朴素贝叶斯算法对于数据的稀疏性具有较好的鲁棒性,在训练数据中存在大量缺失值或零值的情况下仍能有效工作。

3.贝叶斯公式和朴素贝叶斯公式
  • 贝叶斯公式:

    贝叶斯公式(Bayes’ theorem)是概率论中的一个重要公式,用于计算在给定一些观察到的证据的情况下,某个事件的后验概率。贝叶斯公式如下:
    P ( A ∣ B ) = ( P ( B ∣ A ) ∗ P ( A ) ) / P ( B ) P(A|B) = (P(B|A) * P(A)) / P(B) P(AB)=(P(BA)P(A))/P(B)
    其中,P(A|B) 表示在观察到事件 B 发生的情况下,事件 A 发生的概率;P(B|A) 表示在事件 A 发生的情况下,事件 B 发生的概率;P(A) 表示事件 A 发生的先验概率;P(B) 表示事件 B 发生的先验概率。

  • 朴素贝叶斯公式:

    朴素贝叶斯公式是在贝叶斯公式的基础上,引入了"朴素"假设,假设特征之间相互独立。根据朴素贝叶斯公式,可以计算在给定一组特征的条件下,某个类别的后验概率。朴素贝叶斯公式如下:
    P ( y ∣ x 1 , x 2 , . . . , x n ) = ( P ( x 1 ∣ y ) ∗ P ( x 2 ∣ y ) ∗ . . . ∗ P ( x n ∣ y ) ∗ P ( y ) ) / P ( x 1 , x 2 , . . . , x n ) P(y|x1, x2, ..., xn) = (P(x1|y) * P(x2|y) * ... * P(xn|y) * P(y)) / P(x1, x2, ..., xn) P(yx1,x2,...,xn)=(P(x1∣y)P(x2∣y)...P(xny)P(y))/P(x1,x2,...,xn)
    其中,P(y|x1, x2, …, xn) 表示在给定特征 x1, x2, …, xn 的条件下,类别 y 的后验概率;P(x1|y), P(x2|y), …, P(xn|y) 表示在类别 y 的条件下,特征 x1, x2, …, xn 出现的概率;P(y) 表示类别 y 的先验概率;P(x1, x2, …, xn) 表示特征 x1, x2, …, xn 的联合概率。

4.朴素贝叶斯算法的计算步骤
  1. 数据预处理:首先对输入数据进行预处理,包括特征选择、特征缩放、处理缺失值等操作。
  2. 计算类别的先验概率:根据训练数据,计算每个类别出现的先验概率。先验概率可以通过简单地计算每个类别在训练数据中的样本数量与总样本数量的比例得到。
  3. 计算特征的条件概率:对于每个特征,计算在给定类别下的条件概率。这需要计算每个特征在每个类别下的频率或概率。
  4. 应用贝叶斯定理:根据贝叶斯定理,利用先验概率和条件概率计算后验概率,即在给定特征条件下每个类别的概率。
  5. 预测分类结果:对于新的未知样本,根据计算得到的后验概率,选择具有最高概率的类别作为预测结果。

朴素贝叶斯算法中的"朴素"指的是特征之间的独立性假设,即假设每个特征在给定类别下是相互独立的。这个假设简化了计算过程,但在实际应用中可能与实际情况不符。

以上是朴素贝叶斯算法的一般计算步骤,具体实现时可能还会包括平滑处理、处理连续特征、处理离散特征等额外的步骤,以适应具体的问题和数据。

5.朴素贝叶斯算法的优缺点

优点:

  1. 算法简单高效:朴素贝叶斯算法的计算速度较快,适用于处理大规模数据集
  2. 对小规模数据表现良好:即使在小样本情况下,朴素贝叶斯算法仍然能够提供合理的分类结果
  3. 可解释性强:朴素贝叶斯算法基于简单的概率模型,分类过程可解释性强,能够提供关于特征对分类结果的影响程度的信息。
  4. 处理多类别问题:朴素贝叶斯算法能够处理多类别分类问题,且在类别数量较多的情况下也能保持较好的性能
  5. 对缺失数据鲁棒性强:朴素贝叶斯算法对于缺失数据具有较好的鲁棒性,在训练数据中存在缺失值或零值的情况下仍能有效工作。

缺点:

  1. 特征独立性假设限制:朴素贝叶斯算法假设各个特征之间相互独立,但在实际应用中,很多特征之间存在相关性,这种假设可能不符合实际情况,导致分类性能下降。
  2. 对输入数据的分布假设:朴素贝叶斯算法通常假设输入数据符合特定的分布,如高斯分布,如果数据的分布与该假设不符,则可能导致分类结果不准确。
  3. 对数量较大的特征空间表现不佳:当特征空间较大时,朴素贝叶斯算法需要估计大量的参数,可能会导致参数估计不准确,影响分类结果。
  4. 类别之间的类别概率估计不准确:当某个类别在训练集中没有样本出现时,朴素贝叶斯算法会给出概率为零的预测结果,这可能导致误分类。
6.朴素贝叶斯算法和逻辑回归算法的区别

朴素贝叶斯算法和逻辑回归算法是两种常见的分类算法,它们在一些方面有一些区别:

  1. 假设不同:朴素贝叶斯算法基于朴素贝叶斯公式,假设特征之间相互独立,而逻辑回归算法没有明确的假设。逻辑回归通过学习权重参数来建立特征与目标变量之间的关系。
  2. 模型类型:朴素贝叶斯算法是生成模型,它通过学习类别的先验概率和特征的条件概率来建模,从而得到每个类别的后验概率。逻辑回归算法是判别模型,它直接建立特征与目标变量之间的条件概率,通过将输入特征映射到一个概率空间进行分类。
  3. 数据假设:朴素贝叶斯算法假设特征之间相互独立,这在处理文本分类等问题时可能不符合实际情况。逻辑回归算法没有这个假设,可以更灵活地处理特征之间的相关性。
  4. 参数估计:朴素贝叶斯算法通过计算先验概率和条件概率来估计模型参数,可以直接使用最大似然估计或贝叶斯估计等方法。逻辑回归算法通过最大似然估计或梯度下降等方法来估计模型参数。
  5. 处理连续特征:朴素贝叶斯算法可以处理连续特征,常用的方法有高斯朴素贝叶斯、多项式朴素贝叶斯等。逻辑回归算法也可以处理连续特征,但需要进行适当的特征缩放或转换。

总体而言,朴素贝叶斯算法在处理大规模文本分类等问题时具有较好的效果,而逻辑回归算法更适用于建模特征与目标变量之间的直接关系,并且对特征相关性的建模更加灵活

二、朴素贝叶斯的计算案例

1.案例一

朴素贝叶斯算法的介绍

联合概率、条件概率与相互独立

  • 联合概率:包含多个条件,且所有条件同时成立的概率
    • 记作:P(A,B)
  • 条件概率(用贝叶斯公式计算):就是事件A在另外一个事件B已经发生条件下的发生概率
    • 记作:P(A|B)
  • 相互独立:如果P(A,B) = P(A)*P(B),则称事件A与事件B相互独立

先计算几个简单的概率:

  • 女神喜欢的概率:

    P(喜欢)=4/7

  • 职业是程序员并且体型匀称的概率

    P(程序员,匀称) = 1/7

  • 在女神喜欢的条件下,职业是程序员的概率

    P(程序员|喜欢) = 2/4 = 1/2

  • 在女神喜欢的条件下,职业是程序员、体重超重的概率

    P((程序员,超重)|喜欢) = 1/4

下面计算:在小明是产品经理并且体重超重的情况下,如何计算小明被女神喜欢的概率?

  • 贝叶斯公式计算:

    P(喜欢|(产品,超重)) = {P((产品,超重)|喜欢) * P(喜欢)}/P(产品,超重)

    上式中,

    • P((产品,超重)|喜欢) 和P(产品,超重) 都是0,导致无法计算结果。这是因为样本量太少了,不具有代表性。
    • 但在现实中,肯定存在职业是产品经理并且体重超重的人,所以P(产品,超重)不可能为0。
  • 这时候,就需要引入朴素贝叶斯公式来进行计算

    • 朴素贝叶斯,就是假定特征与特征之间相互独立,即职业与体型两个特征相互独立。

    • 则按照朴素贝叶斯公式计算如下:

      则P(产品,超重) = P(产品) * P(超重) = (2/7) * (3/7) = 6/49 
      
      P((产品,超重)|喜欢) = P(产品|喜欢) * P(超重|喜欢) = (1/2) * (1/4) = 1/8
      
      P(喜欢|(产品,超重)) = {P((产品,超重)|喜欢) * P(喜欢)}/P(产品,超重)
      				  = {(1/8) * (4/7)}/(6/49)
      				  = 7/12
      

由上述朴素贝叶斯公式计算可得,在小明是产品经理并且体重超重的情况下,小明被女神喜欢的概率为7/12。

2.案例二(文本分类计算)

通过前四个训练样本,判断第五个样本,属于China类的概率

朴素贝叶斯算法的介绍

  • 计算过程
    P ( Y e s ∣ ( C h i n e s e , C h i n e s e , C h i n e s e , T o k y o , J a p a n ) ) = [ P ( ( C h i n e s e , C h i n e s e , C h i n e s e , T o k y o , J a p a n ) ∣ Y e s ) ∗ P ( Y e s ) ] / P ( C h i n e s e , C h i n e s e , C h i n e s e , T o k y o , J a p a n ) = [ P ( C h i n e s e ∣ Y e s ) 3 ∗ P ( T o k y o ∣ Y e s ) ∗ P ( J a p a n ∣ Y e s ) ] ∗ P ( Y e s ) / [ P ( C h i n e s e ) 3 ∗ P ( T o k y o ) ∗ P ( J a p a n ) ] P(Yes|(Chinese,Chinese,Chinese,Tokyo,Japan)) = [P((Chinese,Chinese,Chinese,Tokyo,Japan)|Yes) * P(Yes)]/P(Chinese,Chinese,Chinese,Tokyo,Japan) = [P(Chinese|Yes)^3*P(Tokyo|Yes)*P(Japan|Yes)]*P(Yes)/[P(Chinese)^3*P(Tokyo)*P(Japan)] P(Yes(Chinese,Chinese,Chinese,Tokyo,Japan))=[P((Chinese,Chinese,Chinese,Tokyo,Japan)Yes)P(Yes)]/P(Chinese,Chinese,Chinese,Tokyo,Japan)=[P(ChineseYes)3P(TokyoYes)P(JapanYes)]P(Yes)/[P(Chinese)3P(Tokyo)P(Japan)]

    # 属于China类总共有8个词,其中Chinese占5个
    P(Chinese|Yes)=5/8
    # 属于China类总共有8个词,其中Tokyo占0个
    P(Tokyo|Yes)=0/8
    # 属于China类总共有8个词,其中Japan占0个
    P(Japan|Yes)=0/8
    

    从上面例子可以得到 P(Tokyo|Yes) 和 P(Japan|Yes) 都为0,这是不合理的,如果词频列表中有很多出现次数都是0,很可能计算结果都为0。

  • 解决方法:引入拉普拉斯平滑系数

    • 拉普拉斯公式:
      P ( x ) = ( c o u n t ( x ) + λ ) / ( N + λ ∗ V ) P(x) = (count(x) + λ) / (N + λ * V) P(x)=(count(x)+λ)/(N+λV)
      其中:

      • count(x) 是事件x出现的次数(观察到的频数);
      • N 是总的事件数(总的样本数或观察数);
      • V 是事件的可能取值的总数(唯一的事件数量);
      • λ 是拉普拉斯平滑系数,一般取1。
    • 经过平滑处理后的值:

      # 这里count(x)=5,N=8,λ=1。V指的是"文档中的词"这一特征总共有几种值(6种值:Chinese、Beijing、Shanghai、Macao、Tokyo、Japan)
      
      # 则经过平滑处理后的值如下
      
      P(Chinese|Yes)=5/8=(5+1)/(8+6)=6/14=3/7
      
      P(Tokyo|Yes)=0/8=(0+1)/(8+6)=1/14
      
      P(Japan|Yes)=0/8=(0+1)/(8+6)=1/14
      
      # 然后再代入公式计算最终结果即可
      

三、朴素贝叶斯的代码实现案例

1.API介绍
  • sklearn.naive_bayes.MultinomialNB(alpha=1.0)
    • 朴素贝叶斯分类算法
    • alpha:拉普拉斯平滑系数
2.案例:商品评论分析

朴素贝叶斯算法的介绍文章来源地址https://www.toymoban.com/news/detail-467707.html

2.1步骤分析
  1. 获取数据
  2. 数据基本处理
    • 取出内容列,对数据进行分析
    • 判定评判标准
    • 选择停用词
    • 把内容处理,转换成标准格式
    • 统计词的个数
    • 准备训练集和测试集
  3. 模型训练
  4. 模型评估
2.2代码实现
import pandas as pd
import numpy as np
import jieba
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# 1.获取数据
data = pd.read_csv("./data/书籍评价.csv",encoding="gbk")

# 2.数据基本处理
# 2.1 取出内容列,对数据进行分析
content = data["内容"]

# 2.2 判定评判标准
data.loc[:,"评价"]
# 添加一列“评价标号”,值为1代表这一评论是好评
data.loc[data.loc[:,"评价"]=="好评","评价标号"]=1
# 添加一列“评价标号”,值为0代表这一评论是差评
data.loc[data.loc[:,"评价"]=="差评","评价标号"]=0

# 2.3 选择停用词
stopwords=[]
with open("./data/stopwords.txt",mode="r",encoding="utf-8") as f:
    lines = f.readlines()
    for tmp in lines:
        line = tmp.strip()
        stopwords.append(line)
        
# 对停用词进行去重
stopwords = list(set(stopwords))

# 2.4 把内容处理,转换成标准格式
comment_list = []
for tmp in content:
    # 把一句句话分割成一个个词:需要用jieba
    seg_list = jieba.cut(tmp,cut_all=False)
    seg_str = ",".join(seg_list)
    comment_list.append(seg_str)
    
# 2.5 统计词的个数
con = CountVectorizer(stop_words=stopwords)
X = con.fit_transform(comment_list)

# 2.6 准备训练集和测试集
# 取前十行作为训练集
x_train = X.toarray()[:10,:]
y_train = data["评价"][:10]
# 取第十行以后的作为训练集
x_test = X.toarray()[10:,:]
y_test = data["评价"][10:]

# 3.模型训练,朴素贝叶斯算法,拉普拉斯系数为1
estimator = MultinomialNB(alpha=1)
estimator.fit(x_train,y_train)
y_pre = estimator.predict(x_test)
print("预测值为:\n",y_pre)
print("真实值为:\n",y_test)

# 4.模型评估
estimator.score(x_test,y_test)

到了这里,关于朴素贝叶斯算法的介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 朴素贝叶斯算法

      NaïveBayes算法,又叫朴素贝叶斯算法。   朴素:特征条件独立;   贝叶斯:基于贝叶斯定理。属于监督学习的生成模型,实现简单,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为支撑。在大量样本下会有较好的表现,不适用于输入向量的特征条件有关联的场景

    2024年02月09日
    浏览(33)
  • 【朴素贝叶斯算法】

    贝叶斯定理简介 贝叶斯定理是朴素贝叶斯算法的基础,它是一种概率理论,用于计算在给定一些条件下,另一些条件的概率。贝叶斯定理的核心思想是通过已知的信息来更新对未知事件的概率估计。 在贝叶斯定理中,我们用P(A|B)表示在事件B发生的条件下事件A发生的概率。它

    2024年02月15日
    浏览(30)
  • 【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器

    🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能硬件(虽然硬件还没开始玩,但一直

    2024年02月15日
    浏览(52)
  • 无涯教程-分类算法 - 朴素贝叶斯

    朴素贝叶斯算法是一种基于应用贝叶斯定理的分类技术,其中强烈假设所有预测变量彼​​此独立。简而言之,假设是某个类中某个要素的存在独立于同一类中其他任何要素的存在。 在贝叶斯分类中,主要的兴趣是找到后验概率,即给定某些观察到的特征的标签的概率。借助

    2024年02月11日
    浏览(55)
  • 机器学习算法——贝叶斯分类器3(朴素贝叶斯分类器)

    基于贝叶斯公式来估计后验概率P(c|x)的主要困难在于:类条件概率P(x|c)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。 为避开这个障碍,朴素贝叶斯分类器(Naive Bayes classfier)采用了“ 属性条件独立性假设 ”:对已知类别,假设所有属性相互独立。换句话

    2023年04月22日
    浏览(56)
  • 【机器学习】十大算法之一 “朴素贝叶斯”

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月09日
    浏览(38)
  • 机器学习算法系列(六)-- 朴素贝叶斯

    朴素贝叶斯法是基于概率统计,特征条件独立假设的分类方法,是一种非常常用的机器学习算法;通常用于处理文本分类和情感分析等自然语言处理任务中。相对于其他复杂的模型,朴素贝叶斯算法具有简单、易于实现、高效和良好的准确性等特点。 概率论基础 条件概率 事

    2024年02月07日
    浏览(42)
  • 21- 朴素贝叶斯 (NLP自然语言算法) (算法)

    朴素贝叶斯要点 概率图模型 算法往往应用于 NLP自然语言处理领域 。 根据 文本内容 判定 分类 。  概率密度公式 :   高斯 朴素贝叶斯算法: 伯努利分布 朴素贝叶斯算法 多项式分布 朴素贝叶斯表现 英文one-hot 编码: jieba.lcut (str) 数据去重 :    result = np.unique (result)    

    2023年04月09日
    浏览(42)
  • 《机器学习核心算法》分类算法 - 朴素贝叶斯 MultinomialNB

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 小白零基础《Python入门到精通》 朴素贝叶斯法(Naive Bayes model 简称 NBM )是基于 「贝叶斯定理」 与 「特征条件独立假设」 的分类方法。 「贝

    2024年02月08日
    浏览(51)
  • 机器学习——朴素贝叶斯算法(垃圾邮件分类)

    先验概率 :指的是 事件发生前 的预判概率,可以根据历史数据/经验估算得到。例如,当我们需要判断西瓜是不是好瓜的时候,对纹理、根蒂等特征都不了解,只是平常我们买西瓜的时候买到好瓜的概率是70%,那么这个西瓜是好瓜的概率我们也可以认为是70%。这个概率70%就是

    2024年02月03日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包