zoukankan      html  css  js  c++  java
  • 模式识别与机器学习笔记专栏之贝叶斯分类决策(一)

    这是模式识别与机器学习笔记专栏的第一篇,我会持续更新。

    在所有的生活场景中,我们无时无刻不在进行着模式识别。比如你看见迎面走来一个人,根据他的长相来辨认出他好像是你一年前某个活动小组的组长,然后你开始决策要不要和他打个招呼。或者你走进水果店,把西瓜拍了个遍来决定最后买哪一个。或者你突然被捂上眼睛,听着背后人的声音来辨别是不是你的亲爱的。

    模式(pattern) 可以理解成某种特征,也就是你可以获取到的某种原始数据,而 模式识别(pattern recognition) 就是根据输入原始数据来判断其类别并采取相应行为的能力。它对我们至关重要,但我们常常希望可以有机器帮我们来做这个工作,让机器执行预定的程序来进行分类从而决策。比如一个短信拦截系统,帮我们分辨哪些是骚扰短信,哪些是有用的信息。

    在这个问题上,贝叶斯决策理论是最最经典而基本的分类方法了。那么,何为贝叶斯分类决策?

    1. 贝叶斯公式

    首先,我们熟悉的贝叶斯公式

    [P(omega_i|x)=frac{p(x|omega_i)P(omega_i)}{p(x)} ]

    在模式识别问题中,用 (d) 维向量 (x) 来表示希望分类对象的特征,它一般是从传感器获取,并且抽象化出来。(omega) 来表示可能分类的类别。(omega_i) 对应着第 (i) 类,如果是一个两类问题,(i=1,2) ,如果是 (c) 类问题,则 (i=1,2,...,c)

    (P(omega_i|x)) 是由特征 (x) 预测的结果,也就是后验概率,(p(x|omega_i)) 是类条件概率,或者叫似然概率,就是特征 (x) 这个随机变量分布情况,它是取决于类别 (omega) 的状态的。(P(omega_i))是类先验信息,是根据先前知识经验给定的,并且因为总共就c类,所以很容易得到(sum^{c}_{j=1}P(omega_j)=1)(p(x))是归一化因子,并不重要:

    [p(x)=sum^{c}_{j=1}p(x|omega_j)P(omega_j) ]

    目的就是使得所有后验概率之和为1。

    贝叶斯公式提供了一个后验概率的重要计算依据:从似然概率和先验概率得到。

    2. 最小错误率贝叶斯决策

    首先简化问题为二分类问题,比如短信分类问题,(omega=omega_1) 是将短信分为有用短信,(omega=omega_2) 是将短信分类为垃圾短信。假设我们现在对这两类的先验概率和特征 (x) 的类条件概率分布都知道了。那么通过一个短信提取到的特征 (x) ,就可以利用贝叶斯公式计算后验概率,也就是对可能的两类做出的概率判断。

    [P(omega_1|x)=p(x|omega_1)P(omega_1)\ P(omega_2|x)=p(x|omega_2)P(omega_2) ]

    很自然的来比较后验概率来进行决策,哪一类的后验概率大,就判定为哪一类,先验是给定的,归一化因子不重要,实质上比的就是类条件概率分布。

    • 现在引入一个错误率 (P(error|x)) 的概念,对一个(x) ,算出了 (P(omega_1|x))(P(omega_2|x)),假如我们让(omega=omega_1),也就是判定为第一类,把这条短信判断成有用的,那么我们判断正确的概率就是 (P(omega_1|x)) ,而判断错误的概率就是(P(omega_2|x))。写成公式:

    [P(error|x)= egin{cases} P(omega_1|x)& ext{如果判定为}omega_2 \ P(omega_2|x)& ext{如果判定为}omega_1 end{cases} ]

    • 我们希望我们判断的错误率更小,因此我们得到判决规则:

    如果(P(omega_1|x)>P(omega_2|x)),判定为 (omega_1);否则判定为 (omega_2)

    ——这就是最小错误率贝叶斯决策,也就是哪一类后验概率大,判为哪一类

    • 写成似然概率和先验概率的形式:

    如果(p(x|omega_1)P(omega_1)>p(x|omega_2)P(omega_2)),判定为 (omega_1);否则判定为 (omega_2)

    3. 最小风险贝叶斯决策

    下面把判决规则升级一下。

    再回想一下短信分类的问题。假如预测成有用短信和骚扰短信的后验概率接近的时候,这时候误判的可能性还是比较高的。如果误判,可能会把有用的分成垃圾,把垃圾短信分成有用的。可以想象这两者的错误率是此消彼长的,但对哪种的错误率容忍度更高呢?把有用的分成垃圾的看起来更加难以接受。这时候可能就希望那种模棱两可的情况还是判定成有用的好。那么如何来体现这种对错误率容忍度的不同呢?下面就引入损失函数。

    对每一种判断以及真实情况定义一个损失函数(lambda(alpha_i|omega_j)),以下面的两类问题为例

    (lambda(alpha_ivertomega_j)) (omega_1) (omega_2)
    (alpha_1) 0 1
    (alpha_2) 2 0

    (omega_j) 表示要分类对象的真实类别是 (omega_j)(alpha_i) 表示要采取的行为,即判定为 (omega_i)

    以短信分类为例,假如真实是(omega_1) ,有用短信,采取(alpha_1) ,判断为有用,也就是判断正确了,可以定义损失就是0。假如真实是(omega_2) ,垃圾短信,采取(alpha_1) ,判断为有用,也就是判断错误了,可以定义损失函数为1。假如真实是(omega_1) ,有用短信,采取(alpha_2) ,判断为垃圾,同样是判断错误了,而这种错误我们的容忍度更低,那么可以定义损失函数为2。

    • 损失函数乘以对应的后验概率(P(omega_j|x)) 并求和,得到风险函数(R(alpha_i|x))

    [R(alpha_1|x)=lambda(alpha_1|omega_1)P(omega_1|x) +lambda(alpha_1|omega_2)P(omega_2|x)\ R(alpha_2|x)=lambda(alpha_2|omega_1)P(omega_1|x) + lambda(alpha_2|omega_2)P(omega_2|x) ]

    理解起来就是:(alpha_i)行为的风险=每种 (omega) 情况下采取(alpha_i)行为的损失x是这种 (omega) 的后验概率

    • 与最小错误率贝叶斯决策相对应的,这时候使得风险函数最小就行了,判决规则写成:

    如果(R(alpha_1|x) < R(omega_2|x)),采取行为(alpha_1) ,也就是判定为 (omega_1);否则采取行为(alpha_2) ,也就是判定为 (omega_2)

    因此决策的方式就是采取风险(R(alpha_i|x))最小的行为(alpha_i)——这是最小风险贝叶斯决策

    • (lambda(alpha_i|omega_j)) 简写成(lambda_{ij}) ,并把类条件概率和先验概率代入,得到判决规则:

    如果((lambda_{11}-lambda_{21})p(x|omega_1)P(omega_1) < (lambda_{22}-lambda_{12})p(x|omega_2)P(omega_2)),采取行为(alpha_1) ,也就是判定为 (omega_1);否则采取行为(alpha_2) ,也就是判定为 (omega_2)

    • 还可以写成似然比的形式:

    如果(frac{p(x|omega_1)}{p(x|omega_2)}<frac{(lambda_{22}-lambda_{12})}{(lambda_{11}-lambda_{21})}frac{P(omega_2)}{P(omega_1)}) ,采取行为(alpha_1) ,也就是判定为 (omega_1);否则采取行为(alpha_2) ,也就是判定为 (omega_2)

    这样写的好处是,不等式右边的损失函数和先验概率都是给定的,是一个常数,左边就是似然概率之比,所以只需要算出似然概率之比就可以进行分类预测

    • 另外,如果采用如下0-1损失函数的时候,最小风险贝叶斯决策就会退化成最小错误率贝叶斯决策
    (lambda(alpha_ivertomega_j)) (omega_1) (omega_2)
    (alpha_1) 0 1
    (alpha_2) 1 0

    [R(alpha_1|x)=lambda(alpha_1|omega_1)P(omega_1|x)+lambda(alpha_1|omega_2)P(omega_2|x)=P(omega_2|x)\ R(alpha_2|x)=lambda(alpha_2|omega_1)P(omega_1|x) + lambda(alpha_2|omega_2)P(omega_2|x)=P(omega_1|x) ]

    • 如果是多类情况

    [R(alpha_i|x)=sum^c_{j=1}lambda(alpha_i|omega_j)P(omega_j|x) ]

    决策行为(alpha^*=argminR(alpha_i|x)) ,也就是采取的行为(alpha_i) 是使得风险(R(alpha_i|x)) 最小的那个(alpha_i)

  • 相关阅读:
    SQL查询语句 group by后, 字符串合并
    正则表达式对象模型
    C#正则表达式编程(四):正则表达式
    C#正则表达式编程(三):Match类和Group类用法
    C#正则表达式编程(二):Regex类用法
    C#正则表达式编程(一):C#中有关正则的类
    正则表达式中-分组构造
    正则表达式-定位点
    正则表达式-字符类减法
    正则表达式-匹配标点符号
  • 原文地址:https://www.cnblogs.com/zolich/p/13153474.html
Copyright © 2011-2022 走看看