【机器学习(一)】机器学习中使用朴素贝叶斯(即最小错误率贝叶斯)、最小风险贝叶斯实现分类

目录

1. 朴素贝叶斯分类(最小错误率贝叶斯)

1.1 理论:

1.2 朴素贝叶斯算法流程:

1.3 举例说明

1.3.1 计算步骤:

1.3.2 程序代码:

2. 贝叶斯估计

2.1 算法流程:

2.2 举例说明

3 最小风险贝叶斯

3.1算法流程:

3.2 案例说明


1. 朴素贝叶斯分类(最小错误率贝叶斯)

首先得清楚:朴素贝叶斯就是最小错误率贝叶斯,同时也是最大后验概率贝叶斯。

朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法。

对于给定的训练数据集,先假设输入输出的联合概率分布(特征条件独立);然后给定一个输入x,利用贝叶斯顶级求出输出y。

可以简单的认为训练的数据可以得到先验概率分布和条件概率分布,然后输入一个实例,计算这个实例的后验概率,通过后验概率的大小判断输出值y。

1.1 理论:

设训练空间为$T=(x_1,y_1),(x_2,y_2),...,(x_N,y_N)$,是由P(X,Y)独立同分布产生

先验概率分布$P(Y=c_k), k=1,2,...,K$,其中$c_k$是训练空间的输出标签。

例如一个训练数据的输入是$(2,1),(3,1),(4,0)$那么$P(Y=1)=$\frac{2}{3}$P(Y=0)=$\frac{1}{3}

 

条件概率分布$P(X=x\|Y=c_k)=P(X^1=x^1,...,X^N=x^n|Y=c_k)$,可以理解为在$Y=c_k$发生的概率下,x发生的概率,但x又有$x_1,x_2,...,x_n$,之前说过训练空间是独立同分布,因此$$P(X=x|Y=c_k)=P(X^1=x^1,...,X^N=x^n|Y=c_k)=$$\prod P(X^j=x^j|Y=c_k)

 

贝叶斯定理$$P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum(P(X=x|Y=c_k)P(Y=c_k))}$$,把条件概率分布带入贝叶斯公式中,可以得到:

$$P(Y=c_k|X=x)=\frac{P(Y=c_k)\prod (P(X^j=x^j|Y=c_k))}{\sum(P(Y=c_k)\prod (P(X^j=x^j|Y=c_k))}$$

通过这个贝叶斯定理,输入一个x,我们就可以计算在x的条件概率下y的概率。这是朴素贝叶斯分类算法的基本公式。

 

因此朴素贝叶斯分类器可以表示为:$$y=f(x)=arg max=\frac{P(Y=c_k)\prod (P(X^j=x^j|Y=c_k))}{\sum(P(Y=c_k)\prod (P(X^j=x^j|Y=c_k))}$$

1.2 朴素贝叶斯算法流程:

输入:训练数据$T=(x_1,y_1),(x_2,y_2),...,(x_N,y_N)$,其中$x_i=(x_{i}^{1},x_{i}^{2},...,x_{i}^{n})$$y_i\in(c_1,c_2,...,c_k)$

输出:某个输入x的分类

  1. 计算先验概率和条件概率$$P(Y=c_k)=\frac{\sum I(y_i=c_k)}{N}$$$$P(X^j=a_{jl}|Y=c_k)=\frac{\sum I(x_{i}^{j}=a_j_l,y_i=c_k)}{\sum I(y_i=c_k)}$$
  2. 输入的实例$x=(x_{i}^{1},x_{i}^{2},...,x_{i}^{n})$,计算后验概率:$$P(Y=c_k|X=x)=P(Y=c_k)\prod P(X^j=x^j|Y=c_k)$$
  3. 确定输入实例x的类,在输出y:y=arg max P(Y=c_k|X=x)

1.3 举例说明

例如有一个表格,输入是X($x^1,x^2$),输出是Y。$x^1$的取值有1,2,3,$x^2$的取值有S,M,L。求给一个输入x=(2,S)的输出标记类y的值。

1.3.1 计算步骤:

1.3.2 程序代码:

from sklearn.naive_bayes import GaussianNB

# x_1 取值1 ,2 ,3
# x_2 取值s,m , l用4, 5, 6代替
X_train = [[1, 4], [1, 5], [1, 5], [1, 4], [1, 4], [2, 4], [2, 5], [2, 5], [2, 6], [2, 6],
           [3, 6], [3, 5], [3, 5], [3, 6], [3, 6]]
y_train = [-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1]

clf = GaussianNB()
clf.fit(X_train, y_train)
print(clf.predict([[2,4]]))

输出结果为-1,这和手动计算结果一致。

2. 贝叶斯估计

从上面,可以使用朴素贝叶斯完成分类,但是如果出现概率为0的情况时,会影响到后验概率计算的结果,产生偏差,所以引入贝叶斯估计算法,就是在原来的最小错误率贝叶斯的基础上增加一个参数\lambda和权重$S_j$

条件概率的贝叶斯估计公式为:$$P(x^j=a_{j}^{l}|Y=c_k)=\frac{\sum I(x_{i}^{j}=a_jl,y_i=c_k)+\lambda }{\sum I(y_i=c_k)+S_j\lambda }$$,可以看到,在随机变量各个取值的频数上加了一个正数\lambda\lambda >0),\lambda =0时就是极大似然估计,也是朴素贝叶斯,\lambda =1时称为拉普拉斯平滑。

$S_j$是每个输入的维度,例如上个例题中,X分为x^1,x^2的输入均是3维的,即x^1输入是\{1,2,3\},所以$S_j=3$

先验概率的贝叶斯估计公式为:$$P(Y=c_k)=\frac{\sum I(y_i=c_k)+\lambda }{N+K\lambda }$$,其中K是y的种类个数,如y=\{1,-1\},那么K=2。

2.1 算法流程:

输入:训练数据$T=(x_1,y_1),(x_2,y_2),...,(x_N,y_N)$,其中$x_i=(x_{i}^{1},x_{i}^{2},...,x_{i}^{n})$$y_i\in(c_1,c_2,...,c_k)$

输出:某个输入x的分类

确定\lambda =1, $S_j$=3,K=2

  1. 计算先验概率和条件概率:$$P(Y=c_k)=\frac{\sum I(y_i=c_k)+\lambda }{N+K\lambda }$$, $$P(x^j=a_{j}^{l}|Y=c_k)=\frac{\sum I(x_{i}^{j}=a_jl,y_i=c_k)+\lambda }{\sum I(y_i=c_k)+S_j\lambda }$$
  2. 输入的实例$x=(x_{i}^{1},x_{i}^{2},...,x_{i}^{n})$,计算后验概率$$P(Y=c_k|X=x)=P(Y=c_k)\prod P(X^j=x^j|Y=c_k)$$
  3. 确定输入实例x的类,在输出y:y=arg max P(Y=c_k|X=x)

2.2 举例说明

同样是上一个例题问题,计算过程如下:

3 最小风险贝叶斯

在做决策的时候,我们往往不仅仅关心错误率是否最小。有时,我们更加关心某种决策带来的损失是否可以接受,以及接受的程度是多少。例如,在判断病人是否得传染病时,若把正常人判定为病人,那么患者就需要多承担费用。若把传染病人判定成正常人,那么会带来更多人感染的风险,损失将会是巨大的。

从这可以看出,引入风险后的贝叶斯是一种符合现实生活中的情景的。因此,需要事先做大量的调查,找到损失的分布,计算决策表

引入风险函数,或者损失函数。假设x取w_j,采用\alpha _i作为当前风险。那么损失函数定义为:\lambda (\alpha _i,w_j),i=1,2,...,k;j=1,2,...,c。按照损失函数的形式求出一个矩阵,称之为决策表。把决策表中的损失和朴素贝叶斯求到的分类概率乘起来,得到条件风险。最后选择最小风险的方式,选出风险最小的分类。

3.1算法流程:

  1. 计算先验概率和条件概率$$P(Y=c_k)=\frac{\sum I(y_i=c_k)}{N}$$$$P(X^j=a_{jl}|Y=c_k)=\frac{\sum I(x_{i}^{j}=a_j_l,y_i=c_k)}{\sum I(y_i=c_k)}$$
  2. 输入的实例$x=(x_{i}^{1},x_{i}^{2},...,x_{i}^{n})$,计算后验概率:$$P(Y=c_k|X=x)=P(Y=c_k)\prod P(X^j=x^j|Y=c_k)$$
  3. 利用决策表计算后验风险:R(\alpha _i|x)=\sum_{j=1}^{c}\lambda (\alpha _i|x_j)P(Y=c_k|X=x)
  4. 选择最小风险,输出y:$y=arg min R(\alpha _i|x)$

3.2 案例说明

继续 以上面案例为例,通过朴素贝叶斯部分内容,得到

P(Y=1)P(x^1=2|Y=1)P(x^2=sLY=1)=\frac{1}{45}

P(Y=-1)P(x^1=2|Y=1)P(x^2=sLY=1)=\frac{1}{15}

假设决策表如下:

  1 -1
1 0 1
-1 6 0

所以得到的后验风险为:

R(\alpha _1|x)=\sum_{j=1}^{2}\lambda _1_jP(Y=c_j|x)=\frac{1}{15}

R(\alpha _2|x)=\sum_{j=1}^{2}\lambda _2_jP(Y=c_j|x)=\frac{6}{45}=\frac{2}{15}

所以R(\alpha _1|x)<R(\alpha _2|x),根据最小风险,选择y=-1作为最后的结果输出。

决策表是假设出来的,在现实生活中,决策表是通过大量的样本估计出来的。从决策表中可以看出,把1估计成-1的风险是1,把-1估计成1的风险则是6,因此把-1估计错误的风险代价要大得多。

--------------------------------------------------------------------------------------------------------------------------------------------------------

2020-6-18更新了最小风险贝叶斯部分内容。

猜你喜欢

转载自blog.csdn.net/qq_39709813/article/details/106473796