机器学习算法--朴素贝叶斯分类

一、基础知识

条件概率:P(B|A)=\frac{P(AB)}{P(A)}

全概率公式:P(A)=P(A|B_{1})P(B_{1})+...+P(A|B_{n})P(B_{n})= \sum_{i=1}^{n}P(A|B_{i})P(B_{i})

贝叶斯公式:P(B_{i}|A)=\frac{P(A|B_{i})P(B_{i})}{P(A)}=\frac{P(A|B_{i})P(B_{i})}{\sum_{j=1}^{n}P(A|B_{j})P(B_{j})}

二、朴素贝叶斯的公式

样本x

类别集合Y={c_{1},c_{2},...,c_{k}},共有k种类型的样本

生成式模型公式:

P(c|x)=\frac{P(x,c))}{P(x)}=\frac{P(c)P(x|c)}{P(x)}\oe P(c)P(x|c)

上式中,P(C)为先验概率,P(x|c)为条件概率/似然,P(x)为归因化因子,因此最后可以得出后验概率正比于P(c)P(x|c)

由式子P(c|x)\oe P(c)P(x|c),当x=(t_{1},t_{2},...,t_{k})时,可以推导得到P(c|x)\oe P(c)\prod_{i=1}^{k}P(t_{i}|c)

朴素贝叶斯要求属性条件相互独立,即为x=(t_{1},t_{2},...,t_{k})中的,t_{i}相互独立,因此最终的朴素贝叶斯分类器(Naive Bayesian Classifier)的表达式为:

f_{nbc}(x)=\arg max\left \{ P(c)\prod_{i=1}^{k}P(t_{i}|c) \right \}

注:样本集合X=\left \{ x_{1}, x_{2},...,x_{n}\right \},类别集合Y=\left \{ c_{1}, c_{1} ,..., c_{k} \right \},

            P(c)=\frac{N_{c}}{N}

            P(t_{i}|c) =\frac{N_{(c,t_{i})}}{N_{c}}, N_{(c,t_{i})} 表示第c类中在属性取值为{t_{i}}的样本个数

三、鸢尾花分类实践的朴素贝叶斯分类的matlab实现

load fisheriris %载入数据集
gscatter(meas(:,1), meas(:,2), species,'rgb','osd');%绘制数据集的散点图
xlabel('Sepal length');
ylabel('Sepal width');
N = size(meas,1);

%在每个类中的变量都假设为高斯分布,
nbGau = fitcnb(meas(:,1:2), species);
nbGauResubErr = resubLoss(nbGau)
nbGauCV = crossval(nbGau, 'CVPartition',cp);
nbGauCVErr = kfoldLoss(nbGauCV)
labels = predict(nbGau, [x y]);
gscatter(x,y,labels,'grb','sod')

%但是在很多时候,每个类中的变量的分布形式是不同的,虽然作为一个研究者很不希望这样的事情出现,但是
%这种情况是更加普遍的,这时候,我们可以采用的方式是采用核函数的方式,这是一个非常灵活的无参数技术
nbKD = fitcnb(meas(:,1:2), species, 'DistributionNames','kernel', 'Kernel','box');
nbKDResubErr = resubLoss(nbKD)
nbKDCV = crossval(nbKD, 'CVPartition',cp);
nbKDCVErr = kfoldLoss(nbKDCV)

labels = predict(nbKD, [x y]);
gscatter(x,y,labels,'rgb','osd')

四、朴素贝叶斯变换的特点

优点:

1、只需要计算组合概率,所需要估计的参数较少

2、对数据较少或者缺失数据的数据集进行分类时候的鲁棒性好

3、能够充分利用样本数据

4、能够学习变量间的因果关系

5、具有自我纠正能力

缺点:

1、对于输入数据的准备方式较为敏感

2、独立假设条件在实际中可能不成立

3、不能学习特征间的交互关系

猜你喜欢

转载自blog.csdn.net/u014285910/article/details/81638402