[学习笔记]分类算法之朴树贝叶斯

from: http://www.hxxiaopei.com/?p=126

我理解朴树贝叶斯法是实现最简单的分类算法,也是非常有效的分类算,工程上容易被接受,很常用,属于生成模型。

朴树贝叶斯模型:

\{(x_{1},y_{1}),(x_{2},y_{2}).....(x_{N},y_{N})}训练数据,类别集合y={c_{1},c_{2}.....c_{K}} ,输入特征向量为x,x_{i}^{j} 表示第i个样本点特征向量的j分量,在后面的计算中,x_{i}^{j} 会有不同的取值。

朴树贝叶斯首先基于训练集合学习联合概率分布p(X,Y),然后基于该模型,针对输入特征向量x,计算出后验概率最大的类别作为输出

y = f(x) = argmax_{c}p(y=c|x;\theta)

P(X = x_{i},Y=c_{i}) = P(X = x_{i}|Y=c_{i})P(Y=c_{k}) ,所以学习联合分布的的任务就是通过训练数据学习 P(x_{i}|Y=c_{i}), P(Y=c_{i})

其中  P(X = x_{i}|Y=c_{i}) = P(X^{1} = P( x_{i}^{1}, X^{2} = x_{i}^{2}.....X^{M} = x_{i}^{M}|Y=c_{i}) ,同时 x_{i}^{j} 又存在S_{j} 个不同的取值,所以模型参数个数为K\prod_{j=1}^{M}S_{j}M, S_{j} 较大时,模型过多。

所以朴树贝叶斯法对条件概率做了很强的假设:特征条件独立,即

(X = x_{i}|Y=c_{i}) = P(X^{1} = P( x_{i}^{1}, X^{2} = x_{i}^{2}.....X^{M} = x_{i}^{M}|Y=c_{i})

 = \prod_{j=1}^{M}P(X^{(j)} = x_{i}^{(j)}|Y = c_{k})

参数个数为K*M*S^{(j)} ,引入这个假设降低了算法的复杂度,但是牺牲了准确率。

训练过程也比较简单,基于训练集合,定义似然函数

L(\theta) = P(X,Y) = P(X|Y)P(Y) = \prod_{i=1}^{N}\prod_{k=1}^{K}P(X=x_{i}|Y=c_{k})P(Y=c_{k})

=\prod_{i=1}^{N}\prod_{j=1}^{M}\prod_{k=1}^{K}\prod_{l=1}^{S_{j}}(P(X{(j)}=f_{jl}|Y=c_{k})P(Y=c_{k}))^{I(x_{i}^{(j)} = f_{jl}, y = c_{k}})

同时满足约束条件:

\sum_{l=1}^{S_{j}}P(X^{(j)}=f_{jl}|Y=c_{k})= 1

\sum_{k=1}^{K}P(Y=c_{k})= 1

其中f_{jl} 表示特征向量第j个分量的第l个取值,注意为了计算方便,这里假设每个分量有相同的取值个数,实际上是不一样的。

构建拉格朗日函数

\iota(\theta) = ln L(\theta) +?\sum_{k=1}^{K}\lambda_{k}(1-\sum_{j=1}^{M}\sum_{l=1}^{S_{j}}P(X=f_{jl}|Y=c_{k})) + \lambda(1-\sum_{k=1}^{K}P(Y = c_{k})

 =\sum_{i=1}^{N}\sum_{j=1}^{M}\sum_{k=1}^{K}\sum_{l=1}^{S_{j}}I(x_{i}{(j)} = f_{jl}, y = c_{k} )(ln P(X=f_{jl}|Y=c_{k}) + ln P(Y=c_{k})) +\sum_{k=1}^{K}\lambda_{k} (1-\sum_{l=1}^{S_{j}}P(X^{(j)}=f_{jl}|Y=c_{k})) + \lambda(1-\sum_{k=1}^{K}P(Y = c_{k})

接下来求解很简单,极大似然估计,分别对参数求导即可,注意里面有拉格朗日乘子.

求解P(Y=c_{k}) ,有\sum_{i=1}^{N}\sum_{j=1}^{M}\sum_{l=1}^{S_{j}}I(x_{i}{(j)} = f_{jl}, y = c_{k}) /P(Y=c_{k}) - \lambda = 0

其中 \sum_{i=1}^{N}\sum_{j=1}^{M}\sum_{l=1}^{S_{j}}I(x_{i}^{(j)} = f_{jl}, y = c_{k}) = \sum_{i=1}^{N}I(y=c_{k})

则有 P(Y=c_{k}) = \sum_{i=1}^{N}I(y=c_{k})\lambda ,将其带入约束条件,

则有\sum_{k=1}^{K}\sum_{i=1}^{N}I(y=c_{k})\lambda = 1

\lambda = \sum_{k=1}^{K}\sum_{i=1}^{N}I(y=c_{k}) = N

最后有 P(Y=c_{k}) = \sum_{i=1}^{N}I(y=c_{k}) / N

同样方法可以求得:

P(X=f_{jl}) = \frac{\sum_{i=1}^{N}I(x_{i}^{(j)} = f_{jl}, y = c_{k})}{\sum_{i=1}^{N}I(y=c_{k})}

贝叶斯估计:

存在一个问题,如果p(x=f|y=c)在训练中没有出现过,则有p(x=f|y=c)=0,导致整个结果等0,显然不是我们想要的。

引入\lambda

p(X^{(j)} = f_{jl}|Y =c_{k}) = \frac{\sum_{i=1}^{N}I(x_{i}^{(j)} = f_{jl}, y = c_{k}) + \lambda}{\sum_{i=1}^{N}I(y=c_{k}) +S_{l}\lambda}

虽然引入\lambda ,有\sum_{l=1}^{S_{j}}p(X^{(j)} = f_{jl}|Y =c_{k}) =1 ,满足约束

如果\lambda =1 则是拉普拉斯估计。

同样 P(Y = c_{k}) = \frac{\sum_{i=1}^{N}I(y_{i} = c_{k}) + \lambda}{N + K\lambda}

分母中\lambda 的系数,依赖于类别的个数,即不同参数的个数

思考:

1.朴树贝叶斯有强假设,特征条件独立这个假设对准确率牺牲成都多大,相对于其他分类方法,比如logistic 回归,准确率怎么样

2.特征值为离散值,实际使用时,将连续value离散化,使用朴树贝叶斯,与直接使用其他分类法,准确率是否有区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值