关于机器学习中的朴素贝叶斯以及拉普拉斯平滑

看过我博文的同学可能知道机器学习之中,存在着判别学习以及生成学习,其主要区别我在另一篇文章中有详细描述,今天我们要讨论的是,在高斯判别分析之中,特征向量x是连续的,实数域上的向量,那么如果这个特征向量x是离散的情况呢?这就引入了朴素贝叶斯的理论。

在这里,借鉴Andrew Ng机器学习课程上面的例子,即对垃圾邮件进行分类,我们希望能够有一种学习算法,能够对邮件进行分类,自动区分邮件是否是垃圾邮件。

好的,那么假设我们现在有一堆训练邮件集合,这一堆邮件是否是垃圾邮件我们知道,我们想通过邮件生成特征向量,然后判断是否是垃圾邮件,我们通过不同的特征向量来代表每一封邮件,这个特征向量的长度取决于我们的字典中所含的单词个数,然后只有相应的词出现,我们便把那个位置置为1,否则置为0.

我们构建完特征向量之后呢,我们需要对f(x|y)进行建模(体现生成学习算法的特点),由于一个特征向量之中可能含有许多词,那么这个特征向量的维度也会极其高,在此需要一个强而有力的假设来解决这个问题

我们假设,x在给定y的情况下是条件独立的,这个假设被称作朴素贝叶斯假设(NB assumption),由此假设产生的算法被称为朴素贝叶斯分类器,这个假设啥意思呢?

就是说,我告诉你一封邮件是垃圾邮件,这对于里面出现了"购买"这件事并不会影响到里面出现了"价格"这件事。利用这个假设,我们可以得到

for15

接着定义这么几个参数

for16

接着我们给定m个训练集合(x^(i),y^(i))i=1,...,m;

我们可以写出他们的联合似然函数

for17

利用极大似然估计,我们便可以估计出三个参数的估计值

下面不加证明地给出三个参数的估计值(读者可以自行证明)

for18

其中1{true}=1,1{false}=0,^代表逻辑与,其中x的下标j代表第j个单词

有了这三个参数,我们便可以很好地使用贝叶斯公式来计算f(y|x)了

for19

到这里我们成功对p(x|y)进行建模,然后利用贝叶斯公式计算出p(y=1|x),当然x一般是多个离散值的,我们同样需要利用极大似然估计去三个参数,如果遇到x是连续的,我们也可以将连续的x离散化处理,如果我们使用多维正态分布建模的话效果并没有将其离散化然后使用朴素贝叶斯方法来的优(而不是使用GDA),使用朴素贝叶斯通常可以得到一个更好的分类器。

在这里需要提及一个方法-----------拉普拉斯平滑(Laplace smoothing)

在上面所述的朴素贝叶斯方法之中,有一个小问题,引用上面所讲的垃圾邮件的例子,有这么一个单词在你的字典之中,但是它从未出现,那我们利用极大似然估计计算出来的前两个参数的估计值都是0,即不管是垃圾邮件还是正常邮件中这个单词都没出现过,好的,那么我们利用贝叶斯公式计算p(y=1|x)的时候,分子因为乘上了一个参数为0的值变成0,分母也一样变成0,那么就变成0/0不可预知,为了解决这个问题,引出了拉普拉斯平滑。

出于简单,我们先修改下第三个参数

for20

具体操作方式为加上对应的平均概率的分子和分母,如上是垃圾邮件的概率为1/2,那么就分子加分子,分母加分母

同样的操作对于前两个参数

for21

发布了45 篇原创文章 · 获赞 12 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章