天天看点

【菜鸟笔记|机器学习】贝叶斯分类器

理论部分:

朴素贝叶斯算法用于分类任务,基于贝叶斯理论。对于类别c和属性x,贝叶斯公式如下:

【菜鸟笔记|机器学习】贝叶斯分类器

其中P(c|x)是后验概率,P( c )是先验概率。所谓贝叶斯分析,就是利用先验概率去估计后验概率的过程。

对于所有类别来说P(x)相同,因此基于贝叶斯判定准则有:

【菜鸟笔记|机器学习】贝叶斯分类器

意思就是选择后验概率大的类别作为分类结果。那么如何计算先验概率和条件概率呢?概率模型的训练过程就是参数估计的过程。对于参数估计,有两种解决方案:频率学派和贝叶斯学派。西瓜书上介绍的是频率学派的极大似然估计。就是根据数据采样来估计概率分布参数。

先验概率可以表示为:

【菜鸟笔记|机器学习】贝叶斯分类器

对于离散属性,条件概率可以表示为:

【菜鸟笔记|机器学习】贝叶斯分类器

对于连续属性,条件概率可以表示为:

【菜鸟笔记|机器学习】贝叶斯分类器

如此就可以计算贝叶斯判定准则了。在西瓜书上针对朴素贝叶斯有个判断好瓜坏瓜的例子,对理解理论非常有帮助,大家可以去看看。

实验部分:

sklearn朴素贝叶斯实现鸢尾花分类。

相关网址:

sklearn朴素贝叶斯

这部分代码非常简单,不再赘述。需要注意的是sklearn贝叶斯有四种估计条件概率的方法,这里使用的高斯朴素贝叶斯,也就是我在上文写到的。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
gnb = GaussianNB()
y_pred = gnb.fit(X_train, y_train).predict(X_test)
print("Number of mislabeled points out of a total %d points : %d"
      % (X_test.shape[0], (y_test != y_pred).sum()))
           

继续阅读