(接 《机器学习 - 朴素贝叶斯(上)- 概率论基础》)
朴素贝叶斯是从训练数据集中学习联合概率分布 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=x∣Y=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=x∣Y=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 n∏j=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=x∣Y=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,B∣C),当 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,B∣C)=P(A∣C)P(B∣C))
在这样的假设下,就将原本指数级的参数数量变为常数级的 n S j nS_j nSj 个。
(1) 对于特征取值离散的特征,通过计算数量占比获得概率;(多项式朴素贝叶斯)
(2) 对于特征取值连续的特征,① 离散化;②假设其服从某概率分布。(高斯朴素贝叶斯)
在于机器学习中,
贝叶斯公式 : 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=ck∣X=x)=∑kP(Yk=ck)P(X=x∣Y=ck)P(X=x∣Y=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=x∣Y=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=ck∣X=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=x∣Y=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=ck∣X=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%”。
预测某人是否拖欠贷款。
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)=103,P(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(X∣Y) 的联合概率分布,可以做预测了。
(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=no∣X=x∗)=P(Y=no)P(有房=否∣Y=no)P(年收入=中∣Y=no)=107∗74∗73=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=yes∣X=x∗)=P(Y=yes)P(有房=否∣Y=yes)P(年收入=中∣Y=yes)=103∗1∗31=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(Y∣x∗)=max(P(Y=no∣X=x∗),P(Y=yes∣X=x∗))=max(7012,707)=7012
所以 x ∗ x_* x∗ 的类别为 no,不会拖欠贷款。
以上的计算过程使用了极大似然估计,然而在计算过程中会出现条件概率值等于 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+3∗10+1=61,此时就避免了 条件概率为 0 的情况。
(1) 优点
① 面对孤立噪声点是健壮的,近似为 0 (一般通过概率计算的都对噪声点健壮)
② 若各属性之间无关的,则模型是健壮的,几乎均匀分布
③ 训练快速,使用概率预测,预测速度快
④ 可调参数较少,通常容易理解
⑤ 存在相关属性时性能降低,因为打破了假设
⑥ 有严格的假设,训练效果会有所损失
(3) 适用场景
① 假设的分布函数与数据匹配
② 各类别区分度很高
③ 维度较高的数据
④ 模型复杂度并不重要