4 朴素贝叶斯法

2023-11-13

4. 朴素贝叶斯法

4.1 朴素贝叶斯的学习与分类

4.1.1 基本方法

​ 设输入空间X是n维向量的集合输出空间为类标记集合Y={c1, c2, … , ck}。输入为特征向量x∈X,输出为类标记(class label) y∈Y。X是定义在输入空间上的随机变量,Y是定义在输出空间上的随机变量。P(X,Y)是X和Y的联合分布概率。训练数据集:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T = \{(x_1,y_1), (x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)}
由P(X,Y)独立同分布产生。

​ 朴素贝叶斯法通过训练数据集学习联合概率分布P(X,Y)。具体的,学习以下先验概率分布以及条件概率分布。先验概率分布
P ( Y = c k ) ,      k = 1 , 2 , 3 , . . . , K P(Y=c_k), \ \ \ \ k=1, 2, 3,...,K P(Y=ck),    k=1,2,3,...,K
条件概率分布:
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x x 1 , . . . , X ( n ) = x ( n ) ∣ Y = c k ) P(X=x|Y=c_k)=P(X^{(1)}=x^{x_1},...,X^{(n)}=x^{(n)}|Y=c_k) P(X=xY=ck)=P(X(1)=xx1,...,X(n)=x(n)Y=ck)
朴素贝叶斯法对条件概率分布作了条件独立性的假设。由于这是一个较强的假设,因此称为朴素贝叶斯法。具体的,条件独立性假设是:
P ( X = x ∣ Y = c k ) = P ( X 1 = x ( 1 ) , . . . , X ( n ) = x ( n ) ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_k)=P(X^{1}=x^{(1)},...,X^{(n)}=x^{(n)}) \\ =\prod\limits_{j = 1}^n {P({X^{(j)}} = {x^{(j)}}|Y = {c_k})} P(X=xY=ck)=P(X1=x(1),...,X(n)=x(n))=j=1nP(X(j)=x(j)Y=ck)
​ 朴素贝叶斯法实际上学习到生成数据的机制,所以属于生成模型。条件独立假设等于是说用于分类的特征在类确定的条件下是条件独立的。这一假设使朴素贝叶斯法变得简单,但有时候会牺牲一定的分类准确率。

​ 朴素贝叶斯分类时,对于给定的输入x,通过学习到的模型计算后验概率分布P(Y=c_k|X=x),将后验概率最大的类作为x的类输出。后验概率计算根据贝叶斯定理进行
P ( Y = c k ∣ X = x ) = P ( X = x ∣ Y = c k ) P ( Y = c k ) ∑ k P ( X = x ∣ Y = c k ) P ( Y = c k ) P(Y=c_k|X=x)=\frac{{P(X = x|Y = {c_k})P(Y = {c_k})}}{{\sum\limits_k {P(X = x|Y = {c_k})P(Y = {c_k})} }} P(Y=ckX=x)=kP(X=xY=ck)P(Y=ck)P(X=xY=ck)P(Y=ck)
朴素贝叶斯分类器(基本公式)表示如下:
y = f ( x ) = a r g m a x c k = P ( Y = c k ) ∏ j P ( X ( i ) = x ( i ) ∣ Y = c k ) ∑ k P ( Y = c k ) ∏ j P ( X ( i ) = x ( i ) ∣ Y = c k )          k = 1 , 2 , 3 , . . . , K y=f(x)=arg max_{c_k}=\frac{P(Y=c_k)\prod\limits_j P(X^{(i)}=x^{(i)}|Y=c_k)}{\sum\limits_k P(Y=c_k)\prod\limits_j P(X^{(i)}=x^{(i)}|Y=c_k)} \ \ \ \ \ \ \ \ k=1,2,3,...,K y=f(x)=argmaxck=kP(Y=ck)jP(X(i)=x(i)Y=ck)P(Y=ck)jP(X(i)=x(i)Y=ck)        k=1,2,3,...,K
由于朴素贝叶斯具有条件独立性,因此,朴素贝叶斯分类器被变换为:
y = f ( x ) = a r g m a x c k = P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y=f(x)=arg max_{c_k}=P(Y=c_k)\prod\limits_j P(X^{(j)}=x^{(j)}|Y=c_k) y=f(x)=argmaxck=P(Y=ck)jP(X(j)=x(j)Y=ck)

4.1.2 后验概率最大化的含义

朴素贝叶斯法将实例分到后验概率最大的类。这等于期望风险最小化。假设选择0-1损失函数
L ( Y , f ( x ) ) = { 1 ,      Y ≠ f ( X ) 0 ,      Y = f ( X ) L(Y,f(x))=\left\{ \begin{array}{l} 1, \ \ \ \ Y\ne f(X)\\ 0, \ \ \ \ Y=f(X) \end{array} \right. L(Y,f(x))={1,    Y=f(X)0,    Y=f(X)
f(X)是分类决策函数。此时,期望风险函数为:
R e x p ( f ) = E [ L ( Y , f ( X ) ) ] R_{exp}(f)=E[L(Y,f(X))] Rexp(f)=E[L(Y,f(X))]
期望是对联合分布P(X,Y)取的。由此取条件期望
R e x p ( f ) = E X ∑ k = 1 K [ L ( c k , f ( X ) ) ] P ( c k ∣ X ) R_{exp}(f)=E_X \sum\limits_{k=1}^{K} [L(c_k,f(X))]P(c_k|X) Rexp(f)=EXk=1K[L(ck,f(X))]P(ckX)
为了使期望风险最小化,只需对 X=x 逐个极小化。这样就根据期望风险最小化准则得到了后验概率最大化准则:
f ( x ) = a r g   m a x y ∈ Y P ( y = c k ∣ X = x ) f(x)=arg\ max_{y∈Y} P(y=c_k|X=x) f(x)=arg maxyYP(y=ckX=x)

4.2 朴素贝叶斯法的参数估计

4.2.1 极大似然估计

​ 在朴素贝叶斯中,学习意味着估计P(Y=c_k)和P(X_i=x_i|Y=c_k)。可以应用极大似然估计法估计相应的概率。先验概率P(Y=c_k)的极大似然估计是:
P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N        k = 1 , 2 , 3 , . . . , K P(Y=c_k)=\frac{\sum\limits_{i=1}^N I(y_i=c_k)}{N} \ \ \ \ \ \ k=1,2,3,...,K P(Y=ck)=Ni=1NI(yi=ck)      k=1,2,3,...,K
设第j个特征x^(j)可能取值的集合为{a_j1, a_j2, a_j3,…,a_jSj}, 条件概率P(X^(j)=a_jl | Y=c_k)的极大似然估计
P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) ∑ i = 1 N I ( y i = c k ) j = 1 , 2 , . . . , n ;        l = 1 , 2 , 3 , . . . , S j ;       k = 1 , 2 , 3 , . . . , K P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N I(x^{(j)}_i=a_{jl},y_i=c_k)}{\sum\limits_{i=1}^N I(y_i=c_k)}\\ j=1,2,...,n; \ \ \ \ \ \ l=1,2,3,...,S_j;\ \ \ \ \ k=1,2,3,...,K P(X(j)=ajlY=ck)=i=1NI(yi=ck)i=1NI(xi(j)=ajl,yi=ck)j=1,2,...,n;      l=1,2,3,...,Sj;     k=1,2,3,...,K

4.2.2 学习与分类算法

输入:训练数据
KaTeX parse error: Undefined control sequence: \ at position 167: …S_j}\},\ \ \ \ \̲ ̲a_{jl}是第j个特征可能取…
输出:实例x的分类

(1)计算先验概率及条件概率:利用极大似然估计

(2) 对于给定的实例 x=(x(1),x(2),…,x(n))T,计算f(x)
f ( x ) = P ( Y = c k ) ∏ j = 1 n P ( X ( i ) = x ( i ) ∣ Y = c k ) ,      k = 1 , 2 , 3 , . . . , K f(x)=P(Y=c_k)\prod\limits_{j=1}^n P(X^{(i)}=x^{(i)}|Y=c_k),\ \ \ \ k=1,2,3,...,K f(x)=P(Y=ck)j=1nP(X(i)=x(i)Y=ck),    k=1,2,3,...,K
(3) 确定实例x的类
y = a r g   m a x c k f ( x ) y=arg\ max_{c_k}f(x) y=arg maxckf(x)

4.2.3 贝叶斯估计

用极大似然估计可能出现所要估计的概率值为0的情况。这时会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法就是采用贝叶斯估计
P λ ( X ( i ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S i λ N o t e :    λ ≥ 0.     当 λ = 0 , 为 极 大 似 然 估 计 。 当 λ = 1 时 , 称 为 L a p l a c i a n   s m o o t h i n g P_{\lambda}(X^{(i)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N I(x^{(j)}_i=a_{jl},y_i=c_k)+\lambda}{\sum\limits_{i=1}^N I(y_i=c_k)+S_i\lambda}\\ Note:\ \ \lambda≥0.\ \ \ 当\lambda=0,为极大似然估计。 当\lambda=1时,称为Laplacian\ smoothing Pλ(X(i)=ajlY=ck)=i=1NI(yi=ck)+Siλi=1NI(xi(j)=ajl,yi=ck)+λNote:  λ0.   λ=0λ=1Laplacian smoothing

4.3 代码

测试数据示范
在这里插入图片描述

import pandas as pd

'''
对每一个输入特征X^j进行计算
'''


if __name__ == '__main__':
    # 读入训练集
    filepath = "test.xlsx"
    data = pd.read_excel(filepath)
    x0, y0 = data.shape
    # 切割数据集
    X = data[0:x0 - 1]  # 输入
    Y = data[x0 - 1:]  # 目标
    # 计算先验概率P(Y)
    x1, y1 = Y.shape
    re=dict()
    for i in range(1,y1):
        v=Y[i].values[0]
        if v in re.keys():
            re[v]=re[v]+1;
        else:
            re[v]=1
    PY=dict()# 存放先验概率
    for item in re.keys():
        if item not in PY.keys():
            PY[item]=re[item]/(y1-1)
    # 计算条件概率
    XV=[]#记录每一个特征中不重复的元素
    x2,y2=X.shape
    for i in range(0,x2):
        tmpx=[]
        for j in range(1,y2):
            tmp=X[j].values
            if tmp[i] not in tmpx:
                tmpx.append(tmp[i]);
        XV.append(tmpx)
    ## 计算每个特征的条件概率
    PX = dict();  # 记录特征的条件概率
    index=0
    for itemX in XV:

        for item in itemX:
            tmp=dict();
            for itemy in re.keys():
                ixy=0
                for i in range(1,y2):
                    dtmp=data[i].values
                    if dtmp[index]==item and dtmp[x0-1]==itemy:
                        ixy=ixy+1
                if itemy not in tmp.keys():
                    tmp[itemy]=ixy/re[itemy]
            if item not in PX.keys():
                PX[item]=tmp
        index=index+1;
    # 对于给定的实例计算
    ## 输入实例
    xt=[2,"S"]
    ## 开始计算
    num=0
    rep=0 #这个取值一定不要与目标值的重复
    for item in re.keys():
        tmp=PY[item]
        for ixt in xt:
            tmp=tmp*PX[ixt][item]
        if num<=tmp:
            num=tmp;
            rep=item;
    # 输出识别的值
    print(rep)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4 朴素贝叶斯法 的相关文章

随机推荐

  • ouldn‘t check the working tree for unmerged files because of an error. detected dubious ownership in

    IDEA的git的clone操作中如果出现问题 couldn t check the working tree for unmerged files because of an error detected dubious ownershi
  • LangChain 的聊天模型

    各位人工智能爱好者 大家好 今天 我们就来详细了解一下 LangChain 聊天模型 LangChain是一个很棒的工具 它提供了与各种语言模型交互的标准接口 包括基于文本的大型语言模型 LLM 和聊天模型 LangChain模型的概念 模
  • 【Linux命令详解

    文章标题 简介 一 参数列表 二 使用介绍 1 使用基本模式搜索 2 忽略大小写匹配 3 反向匹配 4 递归搜索目录 5 显示文件名 6 显示行号 7 显示上下文行 8 启用扩展正则表达式 9 将模式视为固定字符串 10 使用颜色高亮显示匹
  • Docker部署服务

    部署Nginx 寻找镜像 docker search nginx 默认最新版 官网查看不同的版本信息 下载镜像 docker pull nginx root iZwz9hv1phm24s3jicy8x1Z docker images REP
  • C语言打印输出斐波那契数前20项案例讲解

    我们先看什么是斐波那契数 斐波那契数列指的是这样一个数列 1 1 2 3 5 8 13 21 34 55 89 我们通过观察可以得出斐波那契数列的特点 1 第一项和第二项都是1 2 这个数列从第3项开始 每一项都等于前两项之和 思路分析 1
  • 2023年第二届全国大学生数据统计与分析竞赛题目B:电影评分的大数据分析第二问

    详细代码 企鹅2869955900 import pandas as pd import matplotlib pyplot as plt import numpy as np plt rcParams font sans serif Si
  • 【大数据】Hadoop 生态系统及其组件

    Hadoop 生态系统及其组件 1 Hadoop 生态系统的组成 2 Hadoop 生态系统简介 2 1 HDFS 2 2 MapReduce 2 3 YARN 2 4 Hive 2 5 Pig 2 6 HBase 2 7 HCatalog
  • python3 模块、import、from import

    模块 1 模块就是 py后缀的文件 2 py文件类似于一个类 包含以下部分 1 导入 一般的类都有导入 2 变量 对应类的属性 3 函数 对应类的方法 4 类 对应内部类 5 if name main 对应主函数 6 顶格写的代码段 对应构
  • OpenCV学习笔记(17)双目测距与三维重建的OpenCV实现问题集锦(二)双目定标与双目校正

    三 双目定标和双目校正 双目摄像头定标不仅要得出每个摄像头的内部参数 还需要通过标定来测量两个摄像头之间的相对位置 即右摄像头相对于左摄像头的三维平移 t 和旋转 R 参数 图6 要计算目标点在左右两个视图上形成的视差 首先要把该点在左右视
  • vue2+高德地图web端开发使用

    创建vue2项目 我们创建一个vue2项目 创建vue2项目就不用再多说了吧 使用 vue create 项目名 创建即可 注册高德地图 高德地图官网地址 https lbs amap com 如果是第一次使用 点击注册然后进入我们的控制台
  • idea快捷键最全最新最好

    持续更新 如果文档中没有的 麻烦在评论中添加 常用快捷键 返回最顶头 home 返回最末尾 end Alt Insert 可以新建类 文件 get或set方法 此快捷键又名创造一切 编辑区和文件区的跳转 alt 1 编辑区跳转至文件区 es
  • 272. 最长公共上升子序列(lcis,dp)

    首先是lis的状态划分图 然后是lcs 结合lis和lcs两种dp问题的分析方法 我们就可以得出lcis的状态分析图 1 首先上升子序列的分析方法 以某个数字为结尾 2 其次公共子序列的分析方法 有4种状态 00 01 10 11 双关键字
  • 128、函数接口类---Consumer

    一 概念 java util function Consumer
  • Git常用命令fetch和pull和push

    Git常用命令pull和push 1 fetch 从远程获取代码库 会将所有远程分支都拉到本地 并不会合并代码 git fetch 下载远程仓库的所有变动 git fetch remote git fetch origin 指定拉取远程re
  • 百度App Objective-C/Swift 组件化混编之路(二)- 工程化

    作者丨张渝 郭金 来源丨百度App技术 前文 百度App Objective C Swift 组件化混编之路 已经介绍了百度App 引入 Swift 的影响面评估以及落地的实施步骤 本文主要以依赖管理工具为支撑 介绍百度App 如何实现组件
  • Socket -- udp

    接收者 完成System out println UDPProvider Started 作为接收者 指定一个端口用于数据接收 DatagramSocket ds new DatagramSocket 20000 构建接收实体 final
  • 网吧管理系统mysql_网吧管理系统数据库课程设计.doc

    网吧管理系统数据库课程设计 doc 大型数据库课程设计 设计报告 题 目 网吧管理系统数据库 学 号 学生姓名 指导教师 提交时间 2013 11 23 第1章 需求分析 1 1 需求分析任务 1 2 需求分析过程 1 3 数据字典和流程图
  • Java面向对象(1) —— 封装

    目录 一 封装的概念 二 类的封装以及使用 三 访问修饰符 四 属性封装的实现 五 方法封装的实现 六 UML类图 七 类的构造方法与可重载 八 this关键字 九 static关键字 十 方法重载 overload 十一 包 packag
  • unity制作和输出摄像机环绕动画

    1 需要用到两个官方插件Cinemachine以及Recorder 2 第一步设置摄像机 创建一个虚拟相机CM vcam1 这时主摄像机会自动加载Cinemachinebrain组件 并指定CM1 3 设置CM1的参数 创建空物体命名为ta
  • 4 朴素贝叶斯法

    文章目录 4 朴素贝叶斯法 4 1 朴素贝叶斯的学习与分类 4 1 1 基本方法 4 1 2 后验概率最大化的含义 4 2 朴素贝叶斯法的参数估计 4 2 1 极大似然估计 4 2 2 学习与分类算法 4 2 3 贝叶斯估计 4 3 代码