精华内容
下载资源
问答
  • 最小风险贝叶斯决策
    千次阅读
    2017-01-08 19:29:40

    原文地址:http://blog.csdn.net/angel_yuaner/article/details/47066105

    在决策中,除了关心决策的正确与否,有时我们更关心错误的决策将带来的损失。比如在判断细胞是否为癌细胞的决策中,若把正常细胞判定为癌细胞,将会增加患者的负担和不必要的治疗,但若把癌细胞判定为正常细胞,将会导致患者失去宝贵的发现和治疗癌症的机会,甚至会影响患者的生命。这两种类型的决策错误所产生的代价是不同的。

    考虑各种错误造成损失不同时的一种最优决策,就是所谓的最小风险贝叶斯决策。设对于实际状态为 wj 的向量 x 采取决策 αi 所带来的损失为

    λ(αi,wj),i=1,...,k,j=1,...,c
    该函数称为 损失函数,通常它可以用表格的形式给出,叫做决策表。需要知道, 最小风险贝叶斯决策中的决策表是需要人为确定的,决策表不同会导致决策结果的不同,因此在实际应用中,需要认真分析所研究问题的内在特点和分类目的,与应用领域的专家共同设计出适当的决策表,才能保证模式识别发挥有效的作用。

    对于一个实际问题,对于样本 x ,最小风险贝叶斯决策的计算步骤如下:
    (1)利用贝叶斯公式计算后验概率:

    P(wj|x)=p(x|wj)P(wj)ci=1p(x|wi)P(wi),j=1,...,c
    其中要求先验概率和类条件概率已知。
    (2)利用决策表,计算条件风险:
    R(αi|x)=j=1cλ(αi|wj)P(wj|x),i=1,...k

    (3)决策:选择风险最小的决策,即:
    α=argmini=1,...,kR(αi|x)

    现在用之前的判别细胞是否为癌细胞为例。状态1为正常细胞,状态2为癌细胞,假设:

    P(w1)=0.9,P(w2)=0.1p(x|w1)=0.2,p(x|w2)=0.4λ11=0,λ12=6λ21=1,λ22=0

    计算得后验概率为:
    p(w1|x)=0.818,p(w2|x)=0.182

    计算条件风险:
    R(α1|x)=j=12λ1jP(wj|x)=λ12P(w2|x)=1.092

    R(α2|x)=j=12λ2jP(wj|x)=λ21P(w1|x)=0.818

    由于 R(α1|x)>R(α2|x) ,即判别为1类的风险更大,根据最小风险决策,应将其判别为2类,即癌细胞。
    由此可见,因为对两类错误带来的风险的认识不同,从而产生了与之前不同的决策。显然,但对不同类判决的错误风险一致时,最小风险贝叶斯决策就转化成最小错误率贝叶斯决策。最小错误贝叶斯决策可以看成是最小风险贝叶斯决策的一个特例。


    更多相关内容
  • 最简单的贝叶斯决策,已知先验概率和类条件概率密度,根据一个特征进行分类。(不是很高级的代码,但是能够帮助理解贝叶斯决策
  • 基于最小风险贝叶斯决策对细胞异常与否的分析,.m文件,代码框架明确,备注清晰,有利于学习,可直接更改数据及参数用于其他方面的分析。
  • 模式识别实例:包括最小错误率、最小风险贝叶斯决策matlab代码,注释清楚丰富。
  • MATLAB代码最小风险贝叶斯决策

    热门讨论 2010-06-28 01:01:24
    一个最小风险贝叶斯决策的程序,很不错,推荐。
  • 【模式识别】最小风险贝叶斯决策

    千次阅读 2020-03-10 19:01:55
    从而通过最小风险或最小错误率的公式来计算具体属于哪一类。这种叫做不确定统计分类。 我们的训练数据是样本特征和样本标签。所以我们已知的是属于某一类的样本具有的特征。即知道某一类样本的统计分布特...

    贝叶斯公式

    如果每一类在空间中互不相交,有清晰的决策边界,那么就没有必要用贝叶斯方法了。这种叫做确定统计分类。
    在这里插入图片描述
    如果这些类相互之间有重合,新的样本的特征落到一个重合区域,那么就要判断该样本属于某一类的概率。从而通过最小风险或最小错误率的公式来计算具体属于哪一类。这种叫做不确定统计分类。
    在这里插入图片描述
    我们的训练数据是样本特征和样本标签。所以我们已知的是属于某一类的样本具有的特征。即知道某一类样本的统计分布特性。
    这种分类方法就变成从这些数据中来推测具有某特征的样本属于哪一类。
    把每一类样本整体出现的概率记做先验概率
    P ( w i ) P(w_i) P(wi)
    把某一类中的某样本特征出现的概率记做类条件概率
    P ( x ∣ w i ) P(x|w_i) P(xwi)
    把我们要计算某一个具体的样本特征值属于哪一类的概率记做后验概率
    P ( w i ∣ x ) P(w_i|x) P(wix)
    用贝叶斯公式表示:
    P ( w i ∣ x ) = P ( x ∣ w i ) P ( w i ) P ( x ) P(w_i|x)=\frac{P(x|w_i)P(w_i )}{P(x)} P(wix)=P(x)P(xwi)P(wi)
    首先来看右边,分布是全部样本空间的x,分子是属于某一个类的x的数量,所以两者的比值就是属于 w i w_i wi类的 x x x的数量占总 x x x的数量的大小。(放到这里就是,数量就是可能性的概念,可能性有多少。是所有类别中,x的可能性之和)

    贝叶斯分类特点:

    1. 先验概率是计算后验概率的基础,是通过大量统计来得到的,这就是大数定理。而有人有说许多事件的发生不具有可重复性,所以先验概率只能根据对置信度的主管判断。
    2. 那么就以新获得的信息对先验概率进行修正。
    3. 分类决策一定存在错误率,即使错误率很低。

    贝叶斯决策

    不同的贝叶斯分类器有不同的贝叶斯决策

    最小错误率分类器

    这种最简单,就是把样本划分到后验概率大的那一类去。
    P ( w i ∣ x ) = m a x P ( w j ∣ x ) , j ∈ [ 1 , c ] P(w_i|x)=maxP(w_j|x),j \in [1,c] P(wix)=maxP(wjx)j[1,c]
    x ∈ w i x \in w_i xwi
    因为对于每一类, P ( x ) P(x) P(x)都相等,所以
    P ( x ∣ w i ) P ( w i ) = m a x [ P ( x ∣ w j ) P ( w j ) ] P(x|w_i)P(w_i)=max[P(x|w_j)P(w_j)] P(xwi)P(wi)=max[P(xwj)P(wj)]
    x ∈ w i x \in w_i xwi
    分析错误率

    P ( e ) = ∫ − ∞ + ∞ P ( e r r o r , x ) d x = ∫ − ∞ + ∞ P ( e r r o r ∣ x ) P ( x ) d x P(e)= \int_{-\infty}^{+\infty}P(error,x)dx=\int_{-\infty}^{+\infty}P(error|x)P(x)dx P(e)=+P(error,x)dx=+P(errorx)P(x)dx
    x x x取不同值时,错误率的积分
    P ( e r r o r ∣ x ) = ∑ j = 1 c P ( w j ∣ x ) − m a x P ( w j ∣ x ) P(error|x)=\sum_{j=1}^cP(w_j|x)-maxP(w_j|x) P(errorx)=j=1cP(wjx)maxP(wjx)
    最小错误率和最大后验概率两者等价。
    对于最小错误率规则,确定了最小错误率也就确定了决策边界。也就是两个后验概率相等的点。
    在这里插入图片描述

    g ( x ) = P ( w 1 ∣ x ) − P ( w 2 ∣ x ) g(x)=P(w_1|x)-P(w_2|x) g(x)=P(w1x)P(w2x)
    g ( x ) > 0 , x ∈ w 1 g(x)>0,x \in w_1 g(x)>0xw1
    g ( x ) < 0 , x ∈ w 2 g(x)<0,x \in w_2 g(x)<0xw2

    但是最小错误率贝叶斯决策不一定是线性
    在这里插入图片描述

    最小风险错误率

    在这里插入图片描述
    该患者在出现症状后,实为H7N9的概率为(症状已经出现了)
    在这里插入图片描述
    同理:
    在这里插入图片描述
    则他出现症状是H7N9的概率为
    在这里插入图片描述

    但是如果出现误诊后,后果很严重,但是误诊为感冒则问题不大。所以仅仅考虑识别错误率不对,还要考虑后果。这就是最小风险错误率。
    条件风险
    R ( a i ∣ x ) = ∑ j = 1 c λ i j P ( w j ∣ x ) R(a_i|x)=\sum_{j=1}^c \lambda_{ij}P(w_j|x) R(aix)=j=1cλijP(wjx)
    对样本 x x x,采取决策 a j a_j aj的总风险
    在这里插入图片描述
    接上题,R是损失风险
    在这里插入图片描述
    最后取风险最小的决策,那就是诊断为H7N9。
    在这里插入图片描述

    朴素贝叶斯

    在是用贝叶斯决策时,有两个条件必须是已知的:

    1. 各种样本出现的整体先验概率
    2. 各类中取得特征空间中某个点的类条件概率

    先验概率可以从大量数据统计中得到,类条件概率需要从数据统计中估计,根据某一类的样本在各个维度上的特征值来估计其概率分布情况。这个概率分布,是一个各个特征维度上的联合概率分布,如果各个维度不独立,则估计很困难,如果各个特征相互独立,就叫朴素贝叶斯分类器。
    在这里插入图片描述

    正态分布下的贝叶斯决策

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    假设类条件概率符合二维正态分布,也就是 P ( x ∣ w i ) P(x|w_i) P(xwi)
    在这里插入图片描述

    式子中有指数,不方便计算,取对数(指数函数是单调的)
    在这里插入图片描述
    中间的 − d 2 l n 2 π -\frac{d}{2}ln2 \pi 2dln2π与计算无关

    在这里插入图片描述
    考虑不同情况:

    每类协方差矩阵相等,先验概率相同

    如果每一个样本的协方差矩阵都相等,类内各个特征维度间相互独立,且方差相同。
    那么
    在这里插入图片描述

    在这里插入图片描述
    因为先验概率都一样,所以可以 进一步简化
    在这里插入图片描述
    就是这种类型
    在这里插入图片描述
    这种情况被称为最小距离分类器,就是看x到各个类心的距离。

    每类协方差矩阵相等,先验概率不同

    每类的协方差矩阵都相等,各个特征维度都相互独立,方差相同,但是各类的先验概率不同,此时含有先验概率的项不能删除,就是只能将决策函数简化到
    在这里插入图片描述
    其中
    在这里插入图片描述
    由于 x T x x^Tx xTx与类别无关,可以删去,则决策函数简化为:
    在这里插入图片描述
    该判别式形式为线性判别形式
    在这里插入图片描述
    决策边界为
    在这里插入图片描述

    最后就是一个一大一小的圆
    在这里插入图片描述
    同一个维度下,各个分量的协方差为0,所以等概率的密度面是一个球面,这种情况下贝叶斯分类器具有线性决策边界。

    每类协方差矩阵相等,先验概率相等,各个维度不相互独立

    因为协方差矩阵和先验概率均与类别无关,则判别函数可以简化为
    在这里插入图片描述
    就是不能把协方差矩阵省略,所以就不能算 ( x − u i ) T ( x − u i ) (x-u_i)^T(x-u_i) (xui)T(xui)了。
    分类决策边界仍然是超平面,由于先验概率相等,则继续简化为
    在这里插入图片描述
    这时候这个距离不是欧式距离了,是马氏距离,所以这种情况叫马氏距离最小分类器
    在这里插入图片描述
    马氏距离考虑了特征之间的相关性,并且是尺度无关的。

    协方差矩阵都相等,各个维度不相互独立,先验概率也不同

    这时候的决策函数为
    在这里插入图片描述
    这种情况下,判别函数仍然是线性判别函数。分类决策边界仍然是超平面
    在这里插入图片描述
    此时的分类器是在马氏距离基础上,由先验概率修正的现行分类器,决策边界不与两个类别均值向量的连线垂直,也不会通过两个均值向量的中点,并且分类决策边界会偏向先验概率小的那一方。

    协方差矩阵不相等,各个维度不相互独立,先验概率也不同

    在这里插入图片描述

    判别函数的二次项是与类别有关的,无法简化掉,所以这不是一个线性问题了。这时候是一个超二次曲面。

    总结

    只有各个类别样本同分布,贝叶斯分类器才是线性分类器。否则是一个二次项的非线性分类器。

    展开全文
  • 1.基于最小错误率的贝叶斯决策 共w1~wn种决策 本质上就是最大后验概率P(wi | X)的贝叶斯决策 ...2.最小风险贝叶斯决策 共a1~aa种条件风险 对于决策ai可以在c个风险λ(ai,wj)中任选一个,...

     

    1.基于最小错误率的贝叶斯决策

    共w1~wn种决策

    本质上就是最大后验概率P(wi | X)的贝叶斯决策

    公式一:P(wi | X) = P(X | wi)*P(wi) / ∑nj=1 P(X | wj)*P(wj)     

    i=1...n,j=1...n

     

    2.最小风险的贝叶斯决策

    共a1~aa种条件风险

    对于决策ai可以在c个风险λ(ai,wj)中任选一个,相应的概率是 P(wj | X) 

    本质上就是最小条件风险R(ai | X)的决策,也就是条件期望损失最小的决策

    公式二:R(ai | X) = E[ λ(ai,wj) ] =   ∑cj=1 λ(ai,wj) * P(wj | X)  =  ∑cj=1 λij * P(wj | X) 

    i=1...a, j=1...c

     

    3.二者关系(证明)

    其实根据公式二,可以看出基于最小风险的贝叶斯决策本质就是最小错误率的决策的加权和,当在0-1损失函数的情况下,即λii=0,λij=1时,基于最小风险的决策与最小错误率的决策结果相同。可以把基于最小错误率的决策看成是基于最小风险的决策的一个特例。由于损失函数的调整会造成不同的分类结果,当两类错误决策所造成的错误相差悬殊时,损失就会起到主导作用,形成基于最小风险的决策。

     

    ps:0-1损失函数:错了损失为1,不错损失为0,即λii=0,λij=1。

    例子:

     

     

     

     

     

     

     

     

    参考:

    https://wenku.baidu.com/view/d7fbbf08581b6bd97f19ea16.html

     https://wenku.baidu.com/view/16b5a88953d380eb6294dd88d0d233d4b04e3f2a.html

    https://www.docin.com/p-1671295744.html

     

    转载于:https://www.cnblogs.com/sybil-hxl/p/11545916.html

    展开全文
  • 用FAMALE.TXT和MALE.TXT的数据作为训练样本集,建立Bayes分类器,用测试样本数据对该分类器进行测试。调整特征、分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。
  • 最后以巨佬——“贝叶斯大爷”作为基本机器学习算法学习的压轴算法》》》》》》》》》》》》》膜拜!!!!!! 1 准备知识:条件概率公式   2 如何使用条件概率进行分类  假设这里要被分类的类别有两类,类c1...

    最后以巨佬——“贝叶斯大爷”作为基本机器学习算法学习的压轴算法》》》》》》》》》》》》》膜拜!!!!!!


    1 准备知识:条件概率公式

                                   P(A|B)=\frac{P(A,B)}{P(B)}=\frac{P(B|A)*P(A)}{P(B)}

    2 如何使用条件概率进行分类

      假设这里要被分类的类别有两类,类c1和类c2,那么我们需要计算概率p(c1|x,y)和p(c2|x,y)的大小并进行比较:

    如果:p(c1|x,y)>p(c2|x,y),则(x,y)属于类c1

               p(c1|x,y)<p(c2|x,y),则(x,y)属于类c2

      我们知道p(x,y|c)的条件概率所表示的含义为:已知类别c1条件下,取到点(x,y)的概率;那么p(c1|x,y)所要表达的含义呢?显然,我们同样可以按照条件概率的方法来对概率含义进行描述,即在给定点(x,y)的条件下,求该点属于类c1的概率值。那么这样的概率该如何计算呢?显然,我们可以利用贝叶斯准则来进行变换计算:
                                            P(c_{i}|x,y)==\frac{P(x,y|c_{i})*P(c_{i})}{P(x,y)}

    利用上面的公式,我们可以计算出在给定实例点的情况下,分类计算其属于各个类别的概率,然后比较概率值,选择具有最大概率的那么类作为点(x,y)的预测分类结果。

      以上我们知道了通过贝叶斯准则来计算属于各个分类的概率值,那么具体而言,就是计算贝叶斯公式中的三个概率,只要得到了这三个概率值,显然我们就能通过贝叶斯算法预测分类的结果了。因此,到了这里,我们就知道了朴树贝叶斯算法的核心所在了。

    3 朴素贝叶斯中朴素含义

       "朴素"含义:本章算法全称叫朴素贝叶斯算法,显然除了贝叶斯准备,朴素一词同样重要。这就是我们要说的条件独立性假设的概念。条件独立性假设是指特征之间的相互独立性假设,所谓独立,是指的是统计意义上的独立,即一个特征出现的可能性与它和其他特征没有关系。同时,朴素贝叶斯另外一个含义是,这些特征同等重要。虽然这些假设都有一定的问题,但是朴素贝叶斯的实际效果却很好。

    from:https://www.cnblogs.com/zy230530/p/6847243.html

    朴素贝叶斯不能用于回归,但他是一个有效的分类器。

            朴素贝叶斯的经典应用是对垃圾邮件的过滤,是对文本格式的数据进行处理,因此这里以此为背景讲解朴素贝叶斯定理。设D是训练样本和相关联的类标号的集合,其中训练样本的特征属性集为 X { X1,X2, ... , Xn }, 共有n 个属性;类标号为 C{ C1,C2, ... ,Cm }, 有m种类别。朴素贝叶斯定理:

                                             

    其中,P(Ci | X)为后验概率,P(Ci)为先验概率,\large P(X | C_i)为条件概率。朴素贝叶斯的两个假设:

    1、属性之间相互独立。

    2、每个属性同等重要。

    通过假设1知,条件概率\large P(X | C_i)可以简化为:

    分别计算P(C_{1}|X),P(C_{2}|X)...P(C_{m}|X)这m个值的大小,哪个最大,样本就归属于哪个类。

     

     朴素贝叶斯算法的核心思想:选择具有最高后验概率作为确定类别的指标。

    三、朴素贝叶斯分类

            对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。通俗来说,就好比这么个道理,你在街上看到一个黑人,我问你你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?因为黑人中非洲人的比率最高,当然人家也可能是美洲人或亚洲人,但在没有其它可用信息下,我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。

    朴素贝叶斯分类的正式定义如下:

    1、设为一个待分类项,而每个a为x的一个特征属性。

    2、有类别集合

    3、计算

    4、如果,则

    那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:

    1、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。

    2、统计得到在各类别下各个特征属性的条件概率估计。即

    3、如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:

          

    因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:

          

    根据上述分析,朴素贝叶斯分类的流程可以由下图表示:

                                          

    可以看到,整个朴素贝叶斯分类分为三个阶段:

    第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

    第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。

    第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。

    估计类别下特征属性划分的条件概率及Laplace校准

          由上文看出,计算各个划分的条件概率P(a|y)是朴素贝叶斯分类的关键性步骤,当特征属性为离散值时,只要很方便的统计训练样本中各个划分在每个类别中出现的频率即可用来估计P(a|y),下面重点讨论特征属性是连续值的情况。

          当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。即:

          

          而

          因此只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,代入上述公式即可得到需要的估计值。均值与标准差的计算在此不再赘述。

          另一个需要讨论的问题就是当P(a|y)=0怎么办,当某个类别下某个特征项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。为了解决这个问题,我们引入Laplace校准,它的思想非常简单,就是对没类别下所有划分的计数加1,即\lambda =1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。

    分子分母个加上一个数:

                      条件概率:         p(X=xi|Y=ck) = \frac{\sum_{i=1}^{n}I(xij=aij,y=ck)+\lambda }{\sum_{i=1}^{n}I(y=ck)+Sj\lambda }

                      先验概率 :                    p(Y=ck) = \frac{\sum_{i=1}^{n}I(y=ck)+\lambda }{n+K\lambda }

    四、举例

          下面讨论一个使用朴素贝叶斯分类解决实际问题的例子,为了简单起见,对例子中的数据做了适当的简化。这个问题是这样的,对于SNS社区来说,不真实账号(使用虚假身份或用户的小号)是一个普遍存在的问题,作为SNS社区的运营商,希望可以检测出这些不真实账号,从而在一些运营分析报告中避免这些账号的干扰,亦可以加强对SNS社区的了解与监管。

          如果通过纯人工检测,需要耗费大量的人力,效率也十分低下,如能引入自动检测机制,必将大大提升工作效率。这个问题说白了,就是要将社区中所有账号在真实账号和不真实账号两个类别上进行分类,下面我们一步一步实现这个过程。

    首先,设:C = 0 表示真实账号; C = 1 表示不真实账号

    1、确定特征属性及划分

             这一步要找出可以帮助我们区分真实账号与不真实账号的特征属性,在实际应用中,特征属性的数量是很多的,划分也会比较细致,但这里为了简单起见,我们用少量的特征属性以及较粗的划分,并对数据做了修改。

    我们选择三个特征属性:

                      a1:日志数量 / 注册天数(比例)
                      a2:好友数量 / 注册天数(比例)
                      a3:是否使用真实头像。
    在SNS社区中这三项都是可以直接从数据库里得到或计算出来的。由于特征a1、a2都是连续变量,我们进行如下划分:

                    a1:{a<=0.05,  0.05<a<0.20, a>=0.20}
                    a2:{a<=0.10,  0.10<a<0.80, a>=0.80}
                    a3:{a=0(不是真实头像),a=1(是真实头像)}
    2、获取训练样本

            这里使用运维人员曾经人工检测过的1万个账号作为训练样本。

    3、训练

           计算训练样本中每个类别的频率,用训练样本中真实账号和不真实账号数量分别除以一万,得到:
                 

                

          计算每个类别条件下各个特征属性划分的频率:

           

         

          

           

          

          

          

          

          

          

          

          

          

          

          

          

            所谓的训练就是计算样本集中各特征取值的条件概率的值。

    4、预测

        下面我们使用上面训练得到的分类器鉴别一个账号,这个账号使用非真实头像,日志数量与注册天数的比率为0.1,好友数与注册天数的比率为0.2。即:a1 = 0.1;a2 = 0.2;a3 = 0

          

          可以看到,虽然这个用户没有使用真实头像,但是通过分类器的鉴别,更倾向于将此账号归入C = 0,即真实账号类别。这个例子也展示了当特征属性充分多时,朴素贝叶斯分类对个别属性的抗干扰性。

    from:https://blog.csdn.net/guoyunfei20/article/details/78911721

    Python实现:

    数据来源:  http://pan.baidu.com/s/1pLoKUMJ
    from:朴素贝叶斯算法--python实现

    #coding:utf-8
    # 极大似然估计  朴素贝叶斯算法
    import pandas as pd
    import numpy as np
    
    class NaiveBayes(object):
        def getTrainSet(self):
            dataSet = pd.read_csv('C://pythonwork//practice_data//naivebayes_data.csv')
            dataSetNP = np.array(dataSet)  #将数据由dataframe类型转换为数组类型
            trainData = dataSetNP[:,0:dataSetNP.shape[1]-1]   #训练数据x1,x2
            labels = dataSetNP[:,dataSetNP.shape[1]-1]        #训练数据所对应的所属类型Y
            return trainData, labels
    
        def classify(self, trainData, labels, features):
            #求labels中每个label的先验概率
            labels = list(labels)    #转换为list类型
            P_y = {}       #存入label的概率
            for label in labels:
                P_y[label] = labels.count(label)/float(len(labels))   # p = count(y) / count(Y),count(label)表示list中 某元素label出现 的次数
    
            #求label与feature同时发生的概率
            P_xy = {}
            for y in P_y.keys():   #keys() 函数以列表形式返回一个字典所有的键
                y_index = [i for i, label in enumerate(labels) if label == y]  # labels中出现y值的所有数值的下标索引
                for j in range(len(features)):      # features[0] 在trainData[:,0]中出现的值的所有下标索引
                    x_index = [i for i, feature in enumerate(trainData[:,j]) if feature == features[j]]
                    xy_count = len(set(x_index) & set(y_index))   # set(x_index)&set(y_index)列出两个表相同的元素
                    pkey = str(features[j]) + '*' + str(y)
                    P_xy[pkey] = xy_count / float(len(labels))
    
            #求条件概率
            P = {}
            for y in P_y.keys():
                for x in features:
                    pkey = str(x) + '|' + str(y)
                    P[pkey] = P_xy[str(x)+'*'+str(y)] / float(P_y[y])    #P[X1/Y] = P[X1Y]/P[Y]
    
            #求[2,'S']所属类别
            F = {}   #[2,'S']属于各个类别的概率
            for y in P_y:
                F[y] = P_y[y]
                for x in features:
                    F[y] = F[y]*P[str(x)+'|'+str(y)]     #P[y/X] = P[X/y]*P[y]/P[X],分母相等,比较分子即可,所以有F=P[X/y]*P[y]=P[x1/Y]*P[x2/Y]*P[y]
    
            features_label = max(F, key=F.get)  #概率最大值对应的类别
            return features_label
    
    
    if __name__ == '__main__':
        nb = NaiveBayes()
        # 训练数据
        trainData, labels = nb.getTrainSet()
        # x1,x2
        features = [2,'S']
        # 该特征应属于哪一类
        result = nb.classify(trainData, labels, features)
        print features,'属于',result

    1、labels.count()
       list中的 count()函数表示list中某元素出现 的次数

    2、P_y.keys()
    Dict字典中的keys函数,以列表形式返回一个字典所有的键
    dict = {'Name': 'Zara', 'Age': 7}
    print "Value : %s" % dict.keys()
    结果为:Value : ['Age', 'Name']

    3、max(F, key=F.get)

        lambda  a : b , 实际上就是:lambda是一个输入值为a,返回值为b的函数。函数形式:max( x ,key=lambda a : b ) #   x可以是任何数值,可以有多个x值。这个函数的意思是:我们先把x值带入lambda函数转换成b值,然后再将b值进行比较。

       max(F, key=F.get)返回与最大值对应的键。
    字典“F”是python中的一个可迭代的结构。当您在F中循环使用x时,您将循环使用字典中的键,max函数有两个参数:一个可迭代对象(F)和一个可选的“key”函数。 Key功能将用于评估F中最大的项目的值。

    4、enumerate()

    list=[1,2,3,4,5,6]
     
    for i ,j in enumerate(list)
     
      print(i,j)
    

     输出:
    0, 1 
    1, 2 
    2, 3 
    3, 4 
    4, 5 
    5, 6 

    from:https://blog.csdn.net/liu_xzhen/article/details/79564455

    4、列表解析

     根据已有列表,高效创建新列表。列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中。

     语法:[expression for iter_val in iterable]或者[expression for iter_val in iterable if cond_expr]

    要求:列出1~10所有数字的平方
    ####################################################
    1、普通方法:
    >>> L = []
    >>> for i in range(1,11):
    ...     L.append(i**2)
    ... 
    >>> print L
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    ####################################################
    2、列表解析
    >>>L = [ i**2 for i in range(1,11)]
    >>>print L
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    from:https://www.cnblogs.com/liu-shuai/p/6098227.html

    实例2:

    Laplace校准

    #coding:utf-8
    #朴素贝叶斯算法   贝叶斯估计, λ=1  K=2, S=3; λ=1 拉普拉斯平滑
    import pandas as pd
    import numpy as np
    
    class NavieBayesB(object):
        def __init__(self):
            self.A = 1    # 即λ=1
            self.K = 2
            self.S = 3
    
        def getTrainSet(self):
            trainSet = pd.read_csv('C://pythonwork//practice_data//naivebayes_data.csv')
            trainSetNP = np.array(trainSet)     #由dataframe类型转换为数组类型
            trainData = trainSetNP[:,0:trainSetNP.shape[1]-1]     #训练数据x1,x2
            labels = trainSetNP[:,trainSetNP.shape[1]-1]          #训练数据所对应的所属类型Y
            return trainData, labels
    
        def classify(self, trainData, labels, features):
            labels = list(labels)    #转换为list类型
            #求先验概率
            P_y = {}
            for label in labels:
                P_y[label] = (labels.count(label) + self.A) / float(len(labels) + self.K*self.A)
    
            #求条件概率
            P = {}
            for y in P_y.keys():
                y_index = [i for i, label in enumerate(labels) if label == y]   # y在labels中的所有下标
                y_count = labels.count(y)     # y在labels中出现的次数
                for j in range(len(features)):
                    pkey = str(features[j]) + '|' + str(y)
                    x_index = [i for i, x in enumerate(trainData[:,j]) if x == features[j]]   # x在trainData[:,j]中的所有下标
                    xy_count = len(set(x_index) & set(y_index))   #x y同时出现的次数
                    P[pkey] = (xy_count + self.A) / float(y_count + self.S*self.A)   #条件概率
    
            #features所属类
            F = {}
            for y in P_y.keys():
                F[y] = P_y[y]
                for x in features:
                    F[y] = F[y] * P[str(x)+'|'+str(y)]
    
            features_y = max(F, key=F.get)   #概率最大值对应的类别
            return features_y
    
    
    if __name__ == '__main__':
        nb = NavieBayesB()
        # 训练数据
        trainData, labels = nb.getTrainSet()
        # x1,x2
        features = [2,'S']
        # 该特征应属于哪一类
        result = nb.classify(trainData, labels, features)
        print (features,'属于',result)

    max函数:当key参数不为空时,就以key的函数对象为判断的标准
    例如:找出一组数中绝对值最大的数,就可以配合lamda先进行处理,再找出最大值,结果  tmp=-9

    a = [-9, -8, 1, 3, -4, 6]
    tmp = max(a, key=lambda x: abs(x))
    print(tmp)

    feature_y=max(F,key=F.get()) ,  在对字典进行数据操作的时候,默认只会处理key,而不是value,这是我们先执行F.get(),返回value对象,比较value的大小,但是结果还是返回对应的key.

    朴素贝叶斯模型:文本分类+垃圾邮件分类实例:https://www.cnblogs.com/rongyux/p/5602037.html

    最小错误率贝叶斯决策

    1.判别函数:

    就是朴素贝叶斯函数嘛。。

    最小风险贝叶斯决策

        在决策中,除了关心决策的正确与否,有时我们更关心错误的决策将带来的损失。比如在判断细胞是否为癌细胞的决策中,若把正常细胞判定为癌细胞,将会增加患者的负担和不必要的治疗,但若把癌细胞判定为正常细胞,将会导致患者失去宝贵的发现和治疗癌症的机会,甚至会影响患者的生命。这两种类型的决策错误所产生的代价是不同的。

        考虑各种错误造成损失不同时的一种最优决策,就是所谓的最小风险贝叶斯决策。设对于实际状态为wj的向量x采取决策αi所带来的损失为
          该函数称为损失函数,通常它可以用表格的形式给出,叫做决策表。需要知道,最小风险贝叶斯决策中的决策表是需要人为确定的,决策表不同会导致决策结果的不同,因此在实际应用中,需要认真分析所研究问题的内在特点和分类目的,与应用领域的专家共同设计出适当的决策表,才能保证模式识别发挥有效的作用。
    对于一个实际问题,对于样本xx,最小风险贝叶斯决策的计算步骤如下: 

    (1)利用贝叶斯公式计算后验概率: 

    其中要求先验概率和类条件概率已知。 

    (2)利用决策表,计算条件风险: 
                            

    (3)决策:选择风险最小的决策,即: 
                           

               

        由此可见,因为对两类错误带来的风险的认识不同,从而产生了与之前不同的决策。显然,但对不同类判决的错误风险一致时,最小风险贝叶斯决策就转化成最小错误率贝叶斯决策。最小错误贝叶斯决策可以看成是最小风险贝叶斯决策的一个特例

    from:https://blog.csdn.net/Angel_Yuaner/article/details/47066105

    实例:有一家医院为了研究癌症的诊断,对一大批人作了一次普查,给每人打了试验针,然后进行统计,得到如下统计数字:

        ①这批人中,每1000人有5个癌症病人;

        ②这批人中,每100个正常人有1人对试验的反应为阳性,

        ③这批人中,每100个癌症病人有95人对试验的反应为阳性。

        假设将正常人预测为正常人和将癌症患者预测为癌症患者的损失函数均为0,将癌症患者预测为正常人的损失函数为3,将正常人预测为癌症患者的损失函数为1.

       现在某人试验结果为阳性,根据最小风险贝叶斯决策理论,将此阳性患者预测为患癌症的风险概率为(67.7% )。

    患癌症的风险概率:不患癌症概率*(不患癌症却被判为癌症的损失系数1)+患癌症概率*(患癌症被判为癌症的损失系数0)

    同理:将此阳性患者预测为正常的风险概率为:不患癌症概率*(不患癌症被判不患癌症的损失系数0)+患癌症概率*(患癌症被判为不患癌症的损失系数 3)

    最大最小决策

    最大最小决策是在类先验概率未知的情况下,考察先验概率变化对错误率的影响,找出使最小贝叶斯奉献最大的先验概率,以这种最坏情况设计分类器

     

    展开全文
  • 最小风险贝叶斯决策的二值化人脸识别算法.pdf
  • 贝叶斯决策(Bayes Decision) 是十大经典机器学习算法之一,其实我们日常做判断时常常用到它,只是我们没有发现。    现假设你面前有10张卷子,老师告诉你有5份是说没有复习实际也没有复习的学渣的,有5份是说...
  • 基于标准化RBC的最小风险贝叶斯决策方法在工业过程故障诊断中的应用
  • 在对之前的相关反馈技术的问题和不足进行总结的基础上,提出一种基于最小风险贝叶斯决策理论相关反馈方法,通过一种自适应机制产生记忆,同时应用最小风险来使用户获得满意的检索结果。实验结果表明该方法准确率高...
  • 前面提到了最小错误率的贝叶斯决策,可以说大多数情况中,我们都是用的这一准则的决策方式,但对于一些特殊的场合,比如一个... 所谓的最小风险贝叶斯决策,就是各种错误决策所造成不同损失时,选择造成损失(也即风险
  • 最小风险 最小错误 贝叶斯决策 Bayes(实例详解)

    万次阅读 多人点赞 2020-03-13 15:21:14
    文章目录简介最小错误率Bayes例子分析最小风险的Bayes决策最小风险Bayes决策规则:例子 ...所以这次我会详细的分享有关最小错误、最小风险的Bayes决策,然后当然如果你还没有了解什么是贝叶斯决策的话,还是应该...
  • 最小错误率的贝叶斯决策】 贝叶斯定理: 以两类问题为例,已知两类别和的先验概率和 以及类别特征的条件概率和 现给定一个样本的特征x 分析其属于何种类别? 判别函数: 若 则 X属于 若 则 X属于 ...
  • 2)依据最小风险贝叶斯决策对观察的结果进行分类。 ​​​​​​​ 二、Matlab代码: %1.导入数据 clc clear x=[-2.67 -3.55 -1.24 -0.98 -0.79 -2.85 -2.76 -3.73 -3.54 -2.27 -3.45 -3.08 -1.58 -1.49 -0.74 -...
  • 如果除了已知这些类概率分布以外,其他信息不得而知,则使分类错误率最小决策规则是,若对象的$$p\left( w_{j}\right) > p\left( w_{k}\right),k=1,...,C; k\neq j$$则将该对象归属于$w_{j...
  • matlab贝叶斯决策代码贝叶斯最佳-最差方法 该存储库包含贝叶斯最佳-最差方法的 MATLAB 实现。 您需要在您的机器上安装 JAGS。 请参阅以下链接以下载 JAGS: 先决条件 您需要在您的机器上安装 JAGS。 为此,请按照...
  • 计算男女身高,非常强大的matlab编程实现贝叶斯程序,可直接使用,模式识别
  • 接上一篇《最小错误率贝叶斯分类和matlab实现》,本文将介绍最小风险贝叶斯分类以及它与最小错误率贝叶斯分类的关系。 1、最小风险贝叶斯分类 比较熟悉机器学习或深度学习的同学可能对“损失”这个词更熟悉,其实...
  • 基于最小风险的贝叶斯决策是最小错误概率的一种改进,显然,但对不同类判决的错误风险一致时,最小风险贝叶斯决策就转化成最小错误率贝叶斯决策。最小错误贝叶斯决策可以看成是最小风险贝叶斯决策的一个特例。 ...
  • 假定某个局部区域细胞识别中正常P(w1)和异常P(w2)两类先验概率分别为P(w1)=0.9, P(w2)=0.1现有一系列待观察的细胞,其观察值为:-2.67 -3.55 -1.24 -0.98 -0.79 -...依据最小错误率的贝叶斯决策对观察的结果进行分类。
  • 贝叶斯决策包含最小风险和最小错误概率两种情况的仿真MATLAB代码
  • 贝叶斯决策最小平均风险

    千次阅读 2018-10-12 11:04:01
    最小化分类错误率实质上是根据后验概率的最大值进行分类,即,然而不同事件分类错误导致的风险大小不同(例如:癌症误判时癌症判断为无癌导致的风险大于无癌判断为癌症),为取得最小风险,提出最小平均风险。...
  • 在风险相同时,最小错误率贝叶斯决策的准确率等于最小风险贝叶斯决策的准确率,即最小错误率贝叶斯决策是最小风险贝叶斯决策的一个特例。本文在matlab平台上对最小错误率贝叶斯决策和最小风险贝叶斯决策进行测试,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,329
精华内容 2,131
关键字:

最小风险贝叶斯决策

友情链接: RSA.zip