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)

  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/zolich/p/13153474.html
Copyright © 2011-2022 走看看