码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 贝叶斯分类器详解


    入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。​​​​​​​

    目录

    一、数学基础

    1、贝叶斯决策论

    (1)先验概率和后验概率

    (2)贝叶斯定理

    2、极大似然估计

    (1)基本思路

    (2)公式推导

    (3)常见假设——正态分布

    二、朴素贝叶斯分类器

    1、符号设定

    2、后验概率的计算

    3、极大似然法求最合适的分布参数

    4、常见假设——正态分布

    5、拉普拉斯平滑

    三、优缺点

    1、优点

    2、缺点

    四、代码示例


    一、数学基础

    1、贝叶斯决策论

    (1)先验概率和后验概率

    先验概率:根据以往经验和分析得到的概率;

    后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小(即根据观察到的样本修正之后的概率值)。

    (2)贝叶斯定理

    用途:为了解决“逆概率”问题,它可以根据过去的数据来预测出概率,在有限的信息下,预测概率。

    P\left(B_{i} \mid A\right)=\frac{P\left(B_{i}\right) P\left(A \mid B_{i}\right)}{P(A)}=\frac{P\left(B_{i}\right) P\left(A \mid B_{i}\right)}{\sum_{j=1}^{n} P\left(B_{j}\right) P\left(A \mid B_{j}\right)}

    P(B):先验概率,即在不知道A事件的前提下,我们对B事件概率的一个主观判断。

    P(A|B)/P(A):可能性函数,即调整因子,即新信息A带来的调整,使得其与先验概率相乘后得到的概率更接近真实概率。

    比如说,我们现在有个特征,想知道出现这种特征的对象是这种类别的概率,即:

    P(\text { category } \mid \text { features })=\frac{P(\text { features} \mid \text{category }) P(\text { category })}{P(\text { features })}

    2、极大似然估计

    (1)基本思路

    首先假定数据具有某种确定的概率分布(所有的采样都是独立同分布的),但是其参数未知,然后基于训练样本对该概率分布的参数进行估计,得到最合适的参数。

    (2)公式推导

    设D_{c}为训练集中第c类样本组合而成的集合;\theta_{c}为假设样本分布的某种概率分布的参数向量;x为D_{c}中的某一样本,则目标为:

    P(D_{c} \mid \theta_{c})= \prod_{x\epsilon D_{c}}^{} P(x \mid \theta_{c})

    找出合适的\theta_{c}使得上述式子能得到最大值(即找到合适的参数使得更多的样本满足这样的分布)。

    但是上述式子容易造成下溢(突破最小极限),所以通常又引入对数似然

    LL(\theta_{c}) = log(P(D_{c} \mid \theta_{c}))= \sum_{x\epsilon D_{c}}^{}log(P(x \mid \theta_{c}))

    于是最终的目标式化为:argmax LL(\theta_{c})

    (3)常见假设——正态分布

    解得:(其中n为D_{c}的总数)

    \mu^{*}=\bar{x}=\frac{1}{n} \sum_{i=1}^{n} x_{i} ; \sigma^{* 2}=\frac{1}{n} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}


    二、朴素贝叶斯分类器

    朴素贝叶斯分类器假设所有属性相互独立。

    1、符号设定

    设样本属性集合为x=\left\{x_{1}, x_{2}, \ldots, x_{m}\right\}( n 为属性数目),x_{i}为样本x在第i属性上的取值;

    样本类别集合为\left\{y_{1}, y_{2}, \ldots, y_{m}\right\}

    2、后验概率的计算

    “所有属性相互独立”才有下式的第二步

    P\left(y_{j} \mid x\right)=\frac{P\left(y_{j}\right) P\left(x \mid y_{i}\right)}{P(x)}=\frac{P\left(y_{j}\right) \prod_{i=1}^{n} P\left(x_{i} \mid y_{j}\right)}{ \operatorname{P}(x)}, j=1,2 \ldots, m

    3、极大似然法求最合适的分布参数

    因为对于所有类别来说P(x)都一样,所以在求最大值时无需考虑它的影响。

    所以目标式化为:argmax(P\left(y_{j}\right) \prod_{i=1}^{n} P\left(x_{i} \mid y_{j}\right)), j=1,2 \ldots, m

    4、常见假设——正态分布

    即有

    p\left(x_{i} \mid y_{j}\right)=\frac{1}{\sqrt{2 \pi} \sigma_{y_{j}, i}} \exp \left(-\frac{\left(x_{i}-\mu_{y_{j}, i}\right)^{2}}{2 \sigma_{y_{j}, i}^{2}}\right)

    5、拉普拉斯平滑

    为了避免其他属性携带的信息被训练集中未出现的属性抹去,在估计概率是通常进行平滑。

    P(y_{j})=\frac{|D_{y_{j}}|+1}{|D|+N}


    三、优缺点

    1、优点

    (1)简单,学习效率高

    (2)分类过程中时空开销小

    2、缺点

    受假设变量间独立与假设分布情况的影响


    四、代码示例

    1. from sklearn import metrics
    2. from sklearn.naive_bayes import GaussianNB
    3. from sklearn.model_selection import train_test_split
    4. from sklearn import datasets
    5. import pandas as pd
    6. from sklearn.metrics import classification_report
    7. data = datasets.load_iris()
    8. iris_target = data.target
    9. iris_features = pd.DataFrame(data=data.data, columns=data.feature_names)
    10. train_x, test_x, train_y, test_y = train_test_split(iris_features, iris_target, test_size=0.3)
    11. clf = GaussianNB()
    12. clf.fit(train_x, train_y)
    13. y_predict = clf.predict(test_x)
    14. accuracy = metrics.accuracy_score(test_y, y_predict)
    15. print(accuracy)
    16. print(classification_report(test_y, y_predict))

    输出


    欢迎大家在评论区批评指正,谢谢~ 

  • 相关阅读:
    电力系统中新型预测双二元变量机组组合问题(Matlab代码实现)
    新特性(一)HTML5和CSS3新特性
    Rust7.1 Functional Language Features Iterators and Closures
    前端Vue篇之Vuex中action和mutation的区别、Vuex 和 localStorage 的区别
    cmake工程出现“CMAKE_CUDA_ARCHITECTURES must be non-empty if set.“的解决方法
    概率论与数理统计学习:随机变量(三)——知识总结与C语言实现案例
    《software architecture patterns》学习笔记
    P11机器学习--李宏毅笔记GAN(对抗生成网络)
    git如何手动解决冲突文件
    Spring Cloud Gateway从数据库读取路由配置
  • 原文地址:https://blog.csdn.net/weixin_55073640/article/details/125900284
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号