机器学习 - 朴素贝叶斯(下)- 朴素贝叶斯分类器

机器学习 - 朴素贝叶斯(下)- 朴素贝叶斯分类器

      • 朴素贝叶斯
        • 重要假设
        • 特征类型
        • 朴素贝叶斯分类模型
        • 举例
        • 贝叶斯估计
        • 模型特点

(接 《机器学习 - 朴素贝叶斯(上)- 概率论基础》)

  • 朴素贝叶斯

    1. 重要假设

      朴素贝叶斯是从训练数据集中学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y) ,具体地:

      (1) 学习先验概率分布 P ( Y = c k ) , k = 1 , 2 , … , n P(Y=c_k),k=1,2,…,n P(Y=ck),k=1,2,,n

      (2) 学习条件概率分布 P ( X = x ∣ Y = c k ) = P ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ∣ Y = c k ) , k = 1 , 2 , . . . , n P(X=x|Y=c_k)=P(x^{(1)},x^{(2)},...,x^{(m)}|Y=c_k),k=1,2,...,n P(X=xY=ck)=P(x(1),x(2),...,x(m)Y=ck),k=1,2,...,n
            其中 x ( j ) x^{(j)} x(j) 为样本 x x x 的第 j j j 个特征

      (3) 于是学习到联合概率分布 P ( X , Y ) P(X,Y) P(X,Y)

      但是这里的问题是, P ( X = x ∣ Y = c k ) P(X=x|Y=c_k) P(X=xY=ck) 的计算非常复杂,假设 x x x 的第 j j j 特征 x ( j ) x^{(j)} x(j) 可取的值有 S j S_j Sj 个, Y Y Y 可取的值有 n n n 个,那么要计算的参数个数为 n ∏ j = 1 m S j n\prod_{j=1}^{m}S_j nj=1mSj,对这样指数量级的参数进行估计是不实际的,所以有了朴素贝叶斯中的假设:

      ∙ \bullet 假设各个特征之间条件独立。

      有了这个假设,那么上面条件概率的计算可以写成:

      P ( X = x ∣ Y = c k ) = P ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ∣ Y = c k ) P(X=x|Y=c_k)=P(x^{(1)},x^{(2)},...,x^{(m)}|Y=c_k) P(X=xY=ck)=P(x(1),x(2),...,x(m)Y=ck)
                                          = ∏ j = 1 m P ( X ( j ) = x ( j ) ∣ Y = c k ) =\prod_{j=1}^{m} P(X^{(j)}=x^{(j)}|Y=c_k) =j=1mP(X(j)=x(j)Y=ck)

      (类似 P ( A , B ∣ C ) P(A,B|C) P(A,BC),当 A , B A,B A,B 相互独立时,可写成 P ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C ) P(A,B|C)=P(A|C)P(B|C) P(A,BC)=P(AC)P(BC))

      在这样的假设下,就将原本指数级的参数数量变为常数级的 n S j nS_j nSj 个。

    2. 特征类型

      (1) 对于特征取值离散的特征,通过计算数量占比获得概率;(多项式朴素贝叶斯)
      (2) 对于特征取值连续的特征,① 离散化;②假设其服从某概率分布。(高斯朴素贝叶斯)

    3. 朴素贝叶斯分类模型

      在于机器学习中,

      贝叶斯公式 : P ( Y = c k ∣ X = x ) = P ( X = x ∣ Y = c k ) P ( Y = c k ) ∑ k P ( Y k = c k ) P ( X = x ∣ Y = c k ) P(Y=c_k|X=x) = \frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{k}P(Y_k=c_k)P(X=x|Y=c_k)} P(Y=ckX=x)=kP(Yk=ck)P(X=xY=ck)P(X=xY=ck)P(Y=ck) 即为 朴素贝叶斯分类器的模型 基本表达式。

      又因为有很严格的各个特征之间的独立性假设,将 P ( X = x ∣ Y = c k ) = ∏ j = 1 m P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_k)=\prod_{j=1}^{m} P(X^{(j)}=x^{(j)}|Y=c_k) P(X=xY=ck)=j=1mP(X(j)=x(j)Y=ck)

      代入贝叶斯公式可得:

      P ( Y = c k ∣ X = x ) = P ( Y = c k ) ∏ j = 1 m P ( X ( j ) = x ( j ) ∣ Y = c k ) ∑ k P ( Y k = c k ) ∏ j = 1 m P ( X ( j ) = x ( j ) ∣ Y = c k ) P(Y=c_k|X=x) = \frac{P(Y=c_k)\prod_{j=1}^{m} P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k}P(Y_k=c_k)\prod_{j=1}^{m} P(X^{(j)}=x^{(j)}|Y=c_k)} P(Y=ckX=x)=kP(Yk=ck)j=1mP(X(j)=x(j)Y=ck)P(Y=ck)j=1mP(X(j)=x(j)Y=ck)


      对于给定输入 x x x ,先验概率 P ( Y = c k ) P(Y=c_k) P(Y=ck) 通过训练集中不同类别标签的比例估算;而 ∑ k P ( Y k = c k ) P ( X = x ∣ Y = c k ) \sum_{k}P(Y_k=c_k)P(X=x|Y=c_k) kP(Yk=ck)P(X=xY=ck) 的计算结果,只要数据集不变,对于任何的 c k c_k ck 都是相同的,所以 可以忽略

      在朴素贝叶斯公式中,

      ∙ \bullet 条件概率 P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X^{(j)}=x^{(j)}|Y=c_k) P(X(j)=x(j)Y=ck) 的含义为:根据已有样本数据,对于类别 Y = c k Y=c_k Y=ck,应当要求样本具有怎样的特性,即从数据中学习到了不同样本所具有的特性,视为“”模板“”;

      ∙ \bullet 后验概率 P ( Y = c k ∣ X = x ) P(Y=c_k|X=x) P(Y=ckX=x) 的含义为:对于给定的样本 x x x ,根据已经学到的“模板”去匹配样本 x x x 的特征,从而判断其所属类别。

      对于分类任务, Y Y Y 为样本的类别,要确定某样本的所属类别,还要计算此样本属于各个类别的不同概率,从这些概率中选出概率最大的即为此样本的类别。

      所以最终朴素贝叶斯分类器的表达式为:

      y = c k a r g m a x P ( Y = c k ) ∏ j = 1 m P ( X ( j ) = x ( j ) ∣ Y = c k ) y=\mathop{}_{c_k}^{argmax}P(Y=c_k)\prod_{j=1}^{m} P(X^{(j)}=x^{(j)}|Y=c_k) y=ckargmaxP(Y=ck)j=1mP(X(j)=x(j)Y=ck)

      根据《机器学习 - 朴素贝叶斯(上)- 概率论基础》上的介绍对贝叶斯分类器中的先验概率与后验概率进行解释:

      P ( Y = c k ) P(Y=c_k) P(Y=ck) 为先验概率,通过已有数据集(历史资料)计算得到,是对当前世界中各种 c k c_k ck 类型的比例进行的统计,例如:从已有数据集中统计出“世界上好人人数占90%”,“世界上坏人人数占10%”,我们获得的先验知识就是“世界上还是好人多,占90%”。

      P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X^{(j)}=x^{(j)}|Y=c_k) P(X(j)=x(j)Y=ck) 为条件概率,作为“新的有关自然状态的资料”出现,从而对先验概率进行修正得到后验概率。例如:好人这么多是有一定条件的,当衣食富足时人们都安居乐业,但如果是战乱年代,坏人的数量就会有所增长。这个就是新学到的资料:条件概率。我们以此条件概率对之前的先验概率进行修正,例如“综合盛世与乱世两种大背景,世界上还是好人多,平均占80%”。

    4. 举例

      预测某人是否拖欠贷款。

      x ( 1 ) x^{(1)} x(1) 有房 x ( 2 ) x^{(2)} x(2) 年收入 Y Y Y拖欠
      125k no
      100k no
      70k no
      120k no
      95k yes
      60k no
      220k no
      85k yes
      75k no
      90k yes

      Y : { c 1 = y e s , c 2 = n o } Y:\{c_1=yes,c_2=no\} Y{c1=yes,c2=no}

      (1) 学习过程

      ∙ \bullet 先验概率分布:

      P ( Y = y e s ) = 3 10 , P ( Y = n o ) = 7 10 P(Y=yes)=\frac{3}{10},P(Y=no)=\frac{7}{10} P(Y=yes)=103P(Y=no)=107

      ∙ \bullet 对于 x ( 1 ) x^{(1)} x(1) 有房:

      P ( 有 房 = 是 ∣ Y = y e s ) = 0 P(有房=是|Y=yes)=0 P(=Y=yes)=0 P ( 有 房 = 是 ∣ Y = n o ) = 3 7 P(有房=是|Y=no)=\frac{3}{7} P(=Y=no)=73

      P ( 有 房 = 否 ∣ Y = y e s ) = 1 P(有房=否|Y=yes)=1 P(=Y=yes)=1 P ( 有 房 = 否 ∣ Y = n o ) = 4 7 P(有房=否|Y=no)=\frac{4}{7} P(=Y=no)=74

      ∙ \bullet 对于 x ( 2 ) x^{(2)} x(2) 收入:

      年收入可视为连续值,在此先离散化,后计算概率:{低:年收入 ≤ \le 90k,中:90k < 年收入 ≤ \le 150k,高:年收入 > 150k}

      P ( 年 收 入 = 高 ∣ Y = y e s ) = 0 P(年收入=高|Y=yes)=0 P(=Y=yes)=0 P ( 年 收 入 = 高 ∣ Y = n o ) = 1 7 P(年收入=高|Y=no)=\frac{1}{7} P(=Y=no)=71

      P ( 年 收 入 = 中 ∣ Y = y e s ) = 1 3 P(年收入=中|Y=yes)=\frac{1}{3} P(=Y=yes)=31 P ( 年 收 入 = 中 ∣ Y = n o ) = 3 7 P(年收入=中|Y=no)=\frac{3}{7} P(=Y=no)=73

      P ( 年 收 入 = 低 ∣ Y = y e s ) = 2 1 P(年收入=低|Y=yes)=\frac{2}{1} P(=Y=yes)=12 P ( 年 收 入 = 低 ∣ Y = n o ) = 3 7 P(年收入=低|Y=no)=\frac{3}{7} P(=Y=no)=73


      以上,朴素贝叶斯分类模型已经学习到了 P ( X ∣ Y ) P(X|Y) P(XY) 的联合概率分布,可以做预测了。

      (2) 预测过程

      假设测试样本 x ∗ = { 有 房 = 否 , 年 收 入 = 110 k } x_*=\{有房=否,年收入=110k\} x={==110k},请预测 x ∗ x_* x 是否可能拖欠贷款。


      根据模型表达式: y = c k a r g m a x P ( Y = c k ) ∏ j = 1 m P ( X ( j ) = x ( j ) ∣ Y = c k ) y=\mathop{}_{c_k}^{argmax}P(Y=c_k)\prod_{j=1}^{m} P(X^{(j)}=x^{(j)}|Y=c_k) y=ckargmaxP(Y=ck)j=1mP(X(j)=x(j)Y=ck)

      P ( Y = n o ∣ X = x ∗ ) = P ( Y = n o ) P ( 有 房 = 否 ∣ Y = n o ) P ( 年 收 入 = 中 ∣ Y = n o ) = 7 10 ∗ 4 7 ∗ 3 7 = 12 70 P(Y=no|X=x_*)=P(Y=no)P(有房=否|Y=no)P(年收入=中|Y=no)=\frac{7}{10}*\frac{4}{7}*\frac{3}{7}=\frac{12}{70} P(Y=noX=x)=P(Y=no)P(=Y=no)P(=Y=no)=1077473=7012

      P ( Y = y e s ∣ X = x ∗ ) = P ( Y = y e s ) P ( 有 房 = 否 ∣ Y = y e s ) P ( 年 收 入 = 中 ∣ Y = y e s ) = 3 10 ∗ 1 ∗ 1 3 = 7 70 P(Y=yes|X=x_*)=P(Y=yes)P(有房=否|Y=yes)P(年收入=中|Y=yes)=\frac{3}{10}*1*\frac{1}{3}=\frac{7}{70} P(Y=yesX=x)=P(Y=yes)P(=Y=yes)P(=Y=yes)=103131=707

      P ( Y ∣ x ∗ ) = max ⁡ ( P ( Y = n o ∣ X = x ∗ ) , P ( Y = y e s ∣ X = x ∗ ) ) = max ⁡ ( 12 70 , 7 70 ) = 12 70 P(Y|x_*)=\max(P(Y=no|X=x_*),P(Y=yes|X=x_*))=\max(\frac{12}{70},\frac{7}{70})=\frac{12}{70} P(Yx)=max(P(Y=noX=x),P(Y=yesX=x))=max(7012,707)=7012

      所以 x ∗ x_* x 的类别为 no,不会拖欠贷款。

    5. 贝叶斯估计

      以上的计算过程使用了极大似然估计,然而在计算过程中会出现条件概率值等于 0 的情况,例如: P ( 年 收 入 = 高 ∣ Y = y e s ) = 0 P(年收入=高|Y=yes)=0 P(=Y=yes)=0,此时不管其他特征为何值,最后结果都等于 0 ,会使分类产生偏差。解决这一问题的方法是采用 贝叶斯估计

      在计算条件概率时,在随机变量各个取值的频数(分子)上赋予一个 λ > 0 \lambda > 0 λ>0,分母赋予一个 S j λ S_j\lambda Sjλ

      λ = 0 \lambda = 0 λ=0 时就是极大似然估计;
      λ = 1 \lambda = 1 λ=1 时,称为拉普拉斯平滑(Laplace smoothing)

      按照拉普拉斯平滑,计算之前例子中的 P ( 年 收 入 = 高 ∣ Y = y e s ) = 0 + 1 3 + 3 ∗ 1 = 1 6 P(年收入=高|Y=yes)=\frac{0+1}{3+3*1}=\frac{1}{6} P(=Y=yes)=3+310+1=61,此时就避免了 条件概率为 0 的情况。

    6. 模型特点

      (1) 优点
      ① 面对孤立噪声点是健壮的,近似为 0 (一般通过概率计算的都对噪声点健壮)
      ② 若各属性之间无关的,则模型是健壮的,几乎均匀分布
      ③ 训练快速,使用概率预测,预测速度快
      ④ 可调参数较少,通常容易理解
      ⑤ 存在相关属性时性能降低,因为打破了假设
      ⑥ 有严格的假设,训练效果会有所损失

      (3) 适用场景
      ① 假设的分布函数与数据匹配
      ② 各类别区分度很高
      ③ 维度较高的数据
      ④ 模型复杂度并不重要

你可能感兴趣的:(机器学习,(ML))