1.贝叶斯决策论
贝叶斯决策论(Bayesian decision theory) 是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都己知的理想情形 ,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记.
具体来说,若目标是最小化分类错误率,则我们要找的就是:对于每个样本 x,选择能使后验概率 P(C | x)最大的类别标记。 即如下公式:
h
∗
(
x
)
=
arg
min
c
∈
Y
P
(
c
∣
x
)
,
h^{*}(\boldsymbol{x})=\underset{c \in \mathcal{Y}}{\arg \min } P(c \mid \boldsymbol{x}),
h∗(x)=c∈YargminP(c∣x),
其中 h(x)为贝叶斯最优分类器*,1-h*(X) 反映了分类器所能达到的最好性能.
欲使用贝叶斯判定准则来最小化决策风险,首先要获得后验概P(c I x). 然而,在现实任务中这通常难以直接获得。对生成式模型来说,必然考虑
P
(
c
∣
x
)
=
P
(
x
,
c
)
P
(
x
)
P(c \mid \boldsymbol{x})=\frac{P(\boldsymbol{x}, c)}{P(\boldsymbol{x})}
P(c∣x)=P(x)P(x,c)
基于贝叶斯定理 P(clx) 可写为
P
(
c
∣
x
)
=
P
(
c
)
P
(
x
∣
c
)
P
(
x
)
P(c \mid \boldsymbol{x})=\frac{P(c) P(\boldsymbol{x} \mid c)}{P(\boldsymbol{x})}
P(c∣x)=P(x)P(c)P(x∣c)
因此估计 P(c I x) 的问题就转化为如何基于训练数据来估计先验P© 和似然 P(x I c).
2.朴素贝叶斯
是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,**是因为它假设每个输入变量是独立的。**这个假设很硬,现实生活中根本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。
朴素贝叶斯模型由两种类型的概率组成:
1、每个类别的概率P(Cj);
2、每个属性的条件概率P(Ai|Cj)。
为了训练朴素贝叶斯模型,需要先给出训练数据,以及这些数据对应的分类。那么上面这两个概率,也就是类别概率和条件概率。他们都可以从给出的训练数据中计算出来。一旦计算出来,概率模型就可以使用贝叶斯原理对新数据进行预测。
2.1朴素贝叶斯的代码实现
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
from sklearn.datasets import make_blobs
# make_blobs:为聚类产生数据集
# n_samples:样本点数,n_features:数据的维度,centers:产生数据的中心点,默认值3
# cluster_std:数据集的标准差,浮点数或者浮点数序列,默认值1.0,random_state:随机种子
X, y = make_blobs(n_samples = 100, n_features=2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu')
plt.show()
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X, y)
rng = np.random.RandomState(0)
X_test = [-6, -14] + [14, 18] * rng.rand(2000, 2)
y_pred = model.predict(X_test)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='RdBu')
lim = plt.axis()
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, s=20, cmap='RdBu', alpha=0.1)
plt.axis(lim)
plt.show()
yprob = model.predict_proba(X_test)
yprob[-8:].round(2)
3.总结
朴素贝叶斯的主要优点有:
1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
朴素贝叶斯的主要缺点有:
1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
4)对输入数据的表达形式很敏感。