1.贝叶斯决策论
贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法。
对于分类任务,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。
贝叶斯判定准则(Bayes decision rule):
为最小化总体风险,只需在每个样本上选择那个能使条件风险 最小的类别标记,即
此时, 称为贝叶斯最优分类器(Bayes optimal classifier),与之对应的总体风险
称为贝叶斯风险(Bayes risk)。
反映了分类器所能达到的最好性能,即通过机器学习所能产生的模型精度的理论上限。
计算条件风险的计算公式为
若目标是最小化分类错误率,则误判损失对应为 0/1损失,即
于是最小化错误率的贝叶斯最优分类器为
即对每个样本,选择能使后验概率
最大的类别标记。然而在现实任务中,后验概率
难以直接获得。
机器学习所要实现的是基于有限的训练样本集尽可能准确地估计出后验概率。目前,有两种策略:
1)给定,可通过直接建模
来预测
,这样得到的是“判别式模型”(discriminative models);
2) 可先对联合概率分布建模,然后再由此获得
,这样得到的是“生产式模型”(generative models)。
决策树、BP神经网络、支持向量机等,都可归入判别式模型的范畴。
对生成式模型来说,必然考虑
基于贝叶斯定理,可写成
其中,是类“先验”(prior)概率;
是样本
相对于类标记
的类条件概率(class-conditional probability),或称为“似然”(likelihood);
是用于归一化的“证据”(evidence)因子。
对于给定的样本,证据因子
与类标记无关,因此估计
的问题就转化为如何基于训练数据
来估计先验
和似然
。
2.多元正态分布的极大似然估计
估计类条件概率的一种常用策略是先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。
具体地,记关于类别 的类条件概率为
,假设
具有确定的形式并且被参数向量
唯一确定,则我们的任务就是利用训练集
估计参数
。
事实上,概率模型的训练过程就是参数估计(parameter estimation)过程。
此处采用频率主义学派的极大似然估计,根据数据采样来估计概率分布参数。
记 表示训练集
中的第
类样本组成的集合,假设这些样本是独立同分布的,则参数
对于数据集
的似然是对
进行极大似然估计,就是去寻找最大化似然
的参数值
。
直观上看,极大似然估计是试图在所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。
为了计算的方便,也为了防止连乘操作造成下溢,通常使用对数似然(log-likelihood):
为了方便计算,这里假定log取e为底。
此时参数 的极大似然估计
为
现假设 服从多元正态分布,则
,那么
其中 表示
的维度,
为正定协方差矩阵,
表示
的行列式。
将上式带入对数似然函数得
令,
所以只需求出使得对数似然函数取到最大值的
和
,也就求出了
。
(懒得敲了)
因此,参数和
的极大似然估计为
3。朴素贝叶斯分类器
由贝叶斯定理可知
因此不难发现类条件概率是所有属性上的联合概率,难以从有限的训练样本直接估计而得。为避开这个障碍,朴素贝叶斯分类器采用“属性条件独立性”(attribute conditional independence assumption):对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。
根据属性条件独立性假设
.
则朴素贝叶斯分类器的表达式为
对于:
它表示的是样本空间中各类样本所占的比例,根据大数定律,当训练集包含充足的独立同分布样本时,可通过各类样本出现的频率来进行估计,也即
其中,表示训练集,
表示
中样本数,
表示训练集
中第
类样本组成的集合。
表示集合
中的样本个数。
对于:
1)若样本的第 个属性取值为连续值:我们假设该属性的取值服从正态分布,也即
其中和
分别是第
类样本在第
个属性上取值的均值和方差,正态分布的参数可用极大似然估计法推得。
2)若样本的第 个属性取值为离散值:同样根据极大似然估计法,我们用频率值作为其概率值的估计值,也即
其中表示
中在第
个属性上取值为
的样本组成的集合。
为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”(为了防止条件概率出现的概率为0),在估计概率值时通常要进行“平滑”,常用“拉普拉斯修正”。具体来说,令
表示训练集
中可能的类别数,
表示第
个属性可能的取值数,则
sklearn中高斯分布贝叶斯、多项式贝叶斯、伯努利贝叶斯的区别与应用场景
高斯朴素贝叶斯
GaussianNB实现了运用于分类的高斯朴素贝叶斯算法,特征的可能性(即概率)假设为高斯分布:
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d"
... % (iris.data.shape[0],(iris.target != y_pred).sum()))
Number of mislabeled points out of a total 150 points : 6
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> Y = np.array([1, 1, 1, 2, 2, 2])
>>> from sklearn.naive_bayes import GaussianNB
>>> clf = GaussianNB()
>>> clf.fit(X, Y)
GaussianNB(priors=None, var_smoothing=1e-09)
>>> print(clf.predict([[-0.8, -1]]))
[1]
>>> clf_pf = GaussianNB()
>>> clf_pf.partial_fit(X, Y, np.unique(Y))
GaussianNB(priors=None, var_smoothing=1e-09)
>>> print(clf_pf.predict([[-0.8, -1]]))
[1]
多项式分布朴素贝叶斯
MultinomialNB实现了服从多项分布数据的朴素贝叶斯算法,也是用于文本分类(这个领域中数据往往以词向量表示,尽管在实践中tf-idf向量在预测时表现良好)的两个经典朴素贝叶斯算法之一。
分布参数由每类的
向量决定,式中
是特征的数据(对于文本分类,是词汇量的大小),
是样本中属于类
中特征
概率
。
参数使用平滑过的最大似然估计法来估计,即相对频率计数:
式中是训练集
中特征
在类
中出现的次数,
是类
中出现所有特征的计算总和。先验平滑因子
应用于在学习样本中没有出现的特征,以防止在将来的计算中出现0的概率输出。把
被称为拉普拉斯平滑,而
被称为Lidstone平滑方法。
>>> import numpy as np
>>> X = np.random.randint(5, size=(6, 100))
>>> y = np.array([1, 2, 3, 4, 5, 6])
>>> from sklearn.naive_bayes import MultinomialNB
>>> clf = MultinomialNB()
>>> clf.fit(X, y)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
>>> print(clf.predict(X[2:3]))
[3]
补充朴素贝叶斯
ComplementNB实现了多项朴素贝叶斯(CNB)算法,CNB是标准多项式朴素(MNB)算法的一种改进,特征适用于不平衡数据集。具体来说,CNB使用来自每个类的补数的统计数据来计算模型的权重。CNB的参数估计比MNB的参数估计更稳定。此外,CNB在文本分类任务上通常比MNB表现得更好。计算权重的步骤如下:
其中对不在类中的所有记录
求和,
既是计算也是记录
中
的tf-idf值,
是平滑因子,且
。
>>> import numpy as np
>>> X = np.random.randint(5, size=(6, 100))
>>> y = np.array([1, 2, 3, 4, 5, 6])
>>> from sklearn.naive_bayes import ComplementNB
>>> clf = ComplementNB()
>>> clf.fit(X, y)
ComplementNB(alpha=1.0, class_prior=None, fit_prior=True, norm=False)
>>> print(clf.predict(X[2:3]))
[3]
伯努利朴素贝叶斯
BernoulliNB实现了用于多重伯努利分布数据朴素贝叶斯训练和分类算法,即有多个特征,但每个特征都假设是一个二元变量。因此,这类算法要求样本以二元值特征向量表示;如果样本含有其他类型的数据,一个BernoulliNB实例会将其二值化(取决于binarize参数)。
伯努利朴素贝叶斯的决策规则基于:
与多项式分布朴素贝叶斯的规则不同,伯努利朴素贝叶斯明确地惩罚类中没有出现作为预测因子的特征
,而多项式分布朴素贝叶斯知识简单地忽略没出现的特征。
在文本分类的例子中,词频向量(非词数向量)可能用于训练和由于这个分类器。BernoulliNB可能在一些数据集上可能表现得更好,特征是那些更短的文档。如果时间允许,建议对两个模型都进行评估。
>>> import numpy as np
>>> X = np.random.randint(2, size=(6, 100))
>>> Y = np.array([1, 2, 3, 4, 4, 5])
>>> from sklearn.naive_bayes import BernoulliNB
>>> clf = BernoulliNB()
>>> clf.fit(X, Y)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
>>> print(clf.predict(X[2:3]))
[3]