机器学习——朴素贝叶斯

目录

一、认识朴素贝叶斯

1. 介绍

2. 原理

3. 最大后验估计

二、连续型变量的概率估计

三、概率类模型的评估指标

1. 布里尔分数 Brier Score

2. 对数似然函数Log Loss

    补充:什么时候使用对数似然,什么时候使用布里尔分数 ?

3. 可靠性曲线 Reliability Curve

    概率密度曲线和概率分布直方图:

    补充:校准可靠性曲线

四、sklearn中的朴素贝叶斯

1. 高斯朴素贝叶斯(GaussianNB)

2. 多项式朴素贝叶斯(MultinomialNB)

3. 伯努利朴素贝叶斯(BernoulliNB)

4. 补集朴素贝叶斯ComplementNB

五、其他理解


一、认识朴素贝叶斯

1. 介绍

        算法得出的结论,永远不是 100% 确定的,更多的是 判断出了一种 “ 样本的标签更可能是某类的可能性 ”,而非一种 “ 确定 ”。

        决策树 使用的 是 叶子节点上 占比较多 的标签 所占的比例(接口 predict_proba 调用),逻辑回归 使用的 是 sigmoid函数 压缩后的 似然(接口 predict_proba 调用),而 SVM 使用的 是样本点到 决策边界的 距离(接口 decision_function 调用)。但这些指标的 本质,都是一种 “类概率” 的表示,可以 通过 归一化 或 sigmoid函数 将这些指标 压缩到 0~1 之间,让他们 表示 模型 对预测的结果 究竟 有多大的 把握(置信度)

        朴素贝叶斯 是一种 直接衡量 标签 和 特征 之间的概率关系的 有监督学习算法,是一种 专注分类的算法,是 真正的概率算法

2. 原理

        举个例子,让 X 为 “气温”,Y 为 “七星瓢虫冬眠”,则 X 和 Y 可能的取值分为别 x 和 y,其中 x ={0, 1},0 表示 没有下降到 0 度 以下,1 表示 下降到了 0 度 以下。y ={0,1},其中 0 表示否,1 表示是。

联合概率
“ X 取值为 x ” 和 “ 取值为 y ” 两个事件同时发生的概率,表示为P(X=x,Y=y)
条件概率在" 取值为 x " 的前提下," 取值为 y " 的概率,表示为P(Y=y|X=x)

        两个事件分别发生的概率为:

       P(X=1) = 50%,则是说明,气温下降到 0 度 以下 的可能性 为 50%,则P(X=0) = 1 -P(X=1) = 50%。

        P(Y=1) = 70%,则是说明,七星瓢虫会冬眠的 可能性为 70%,则P(Y=0) = 1 - P(Y=1) = 30%。

        这 两个事件的 联合概率为 P(X=1,Y=1),这个 概率 代表了 气温下降 到 0 度 以下 和 七星瓢虫 去冬眠 这两件事情 同时,独立发生的 概率。

        两个事件之间的 条件概率为 P(Y=1|X=1),这个概率代表了,当 气温 下降到 0 度 以下 这个条件 被满足之后,七星瓢虫 会去冬眠的 概率。也就是说,气温下降 到 0 度 以下,一定程度上影响了 七星瓢虫 去冬眠 这个事件。

        由概率论可知:

        简单些可写成

        由此可以得到 贝叶斯理论等式

        这个式子,可以 把 特征 X 当成是 条件事件,而 要求解的 标签 Y 当成 是 被满足条件后 会被影响的 结果,而 两者之间的 概率关系 就是 P(Y|X) ,这个概率 在机器学习中,被 称之为是 标签的 后验概率 (posterior probability),即是说 先知道了 条件,再去 求解结果。而 标签 Y 在没有 任何条件限制下 取值 为某个值的 概率,被写作 P(Y) ,与 后验概率 相反,这是 完全没有 任何 条件限制的,标签的 先验概率 (prior probability)。而 P(X|Y) 被称为 “ 类的条件概率 ” ,表示当 Y 的取值固定的 时候,X 为某个值的 概率。

        对 每一个 样本,不可能 只有一个 特征 X,而是 会存在着 包含 n 个特征的 取值的 特征向量 X。因此 机器学习中的 后验概率,被写作 P(Y|X) ,其中 X 中包含 样本 在 n 个特征 X_i 上的分别的取值 x_i,由此可以表示为

        因此存在:

        以此为基础,机器学习中,对每一个样本有

        对于 分子而言,P(Y=1) 就是 少数类占 总样本量的 比例,求解 P(X|Y=1) 时,假设只有两个特征 X1、X2,由联合概率公式,可以有 如下证明:

        特征 X 若推广到 n 个上,则有:

        这个式子 证明,在 Y=1 的条件下,多个特征的 取值 被同时 取到的 概率,就等于 Y=1 的 条件下,多个特征的 取值 被分别 取到的概率 相乘。其中,X1 与 X2 条件独立,是在 假设 X2 是一个对 X1 在某个条件下的 取值 完全无影响的 变量。

        假设 特征之间是 有条件独立的,可 以解决众多 问题,也 简化了 很多 计算过程,这是朴素贝叶斯 被称为 “朴素” 的理由。

        再求分母 P(X),使用 全概率公式 来求解:

        其中 m 代表 标签的 种类,对于 二分类 而言有:

3. 最大后验估计

        对于 这个式子 来说,从训练集中求解 P(Y=1) 很容易,但 P(Y) 和 P(x_i|Y=1) 这一部分就 没有这么 容易了。随着 特征数目的 逐渐变多,分母上的计算量 也会成 指数级增长,而分子中的 P(x_i|Y=1) 也越来越难 计算。

        在比较 两个类别的 时候,两个概率计算的 分母是 一致的,因此 可以 不用计算 分母,先计算出 分子的 大小,之后就 可以通过 让两个 分子相加,来获得 分母的值,以此来 避免计算 一个样本上 所有特征下的概率 P(X) 。在 最后分类的 时候,选择 P(Y=1|X) 和 P(Y=0|X) 中较大的一个 所对应的 Y 的 取值,作为 这个样本的 分类。这个过程,被我们称为 " 最大后验估计 〞(MAP)

        在 最大后验估计中,只需要 求解分子,主要 是 求解 一个样本下 每个特征取值下 的 概率 P(x_i|Y=y_i) ,再 求连乘 便能够 获得 相应的概率。

二、连续型变量的概率估计

        要处理 连续型 变量,可以 有 两种方法。第一种 是 把连续型变量 分成 j 个箱,把 连续型 强行 变成 分类型 变量。分箱后,将 每个箱中的 均值 \overline{x_i} 当作一个特征 X_i 上的 取值,然后 计算箱 j 中 Y=1 所占的比例,就是 P(x_i|Y=1) 。这个 过程的 主要问题 是,箱子 不能 太大 也 不能太小,如果 箱子太大,就 失去了 分箱的 基本意义,如果 箱子太小,可能 每个箱子里 就 没有足够的样本来计算 P(x_i|Y) ,因此必须 要适当地 衡量 分箱效果。

        第二种 可以 直接 通过概率论 中 计算连续型变量的 概率分布。在 分类型变量的 情况中,比如 掷骰子的 情况,有且 仅有 六种 可能的结果 1~6,并且 每种结果的 可能性为 1/6。此时 每个 基本的 随机事件 发生的 概率都是 相等的,所以可以 使用 1/N 来表示有 N 个基本随机事件可 以发生的 情况。

        思考一个 简单的问题:汉堡王 向客户 承诺说 他们的 汉堡 至少是 100g 一个,但如果 我们去汉堡王 买个汉堡,可以 预料到它 肯定不是 标准的 100g。设 汉堡重量为 特征 X_i ,100g 就是 我们的取值 x_i 。如果买 n 个 汉堡,很可能 n 个 汉堡 都不一样重,只要 称重 足够精确,可以 买无限个 汉堡,可能 得到 无限个 重量,可以 有无限个 基本随机事件的 发生。

        其中 我 买到一个 汉堡是 100g 的 概率 P(100g | Y) 可以有:

        当一个 特征下 有无数种 可能发生 的 事件时,这个 特征的 取值就是 连续型的(比如 特征 “汉堡的重量”)。从上面的例子 可以看得出,当特征 为 连续型时,随机 取到 某一个 事件发生的 概率就为 0.

        如果 随机 买一个 汉堡,汉堡的重量在 98g~102g 之间的概率,即是说,现在 求解概率P(98g<z<102g) 。那现在 随机 购买 100个 汉堡,称重后 记下 所有重量在 98g~102g 之间的 汉堡个数,假设为 m,则就有:

        当 购买 无数个汉堡的 时候 形成的则条曲线就 叫做 概率密度曲线(probability density function,PDF)。一条曲线下 的面积,就是 这条曲线 所代表的 函数的 积分。如果 定义曲线 可以用函数 f(x) 来表示的话,整条 曲线下的 面积就是:

        特征 X_i ,在区间 [ x_ix_i + 𝛜 ] 中取值的 概率 可以表示 为:

        现在就 将 求解 连续型变量下 某个点 取值的 概率问题,转化成了 求解一个函数 f(x_i) 在点 x_i 上的取值的 问题。接下来只要找到 f(x) ,就可以 求解出 不同的 条件概率了。

        现实中,往往假设 f(x) 是满足 某种 统计学中的 分布的,最 常见的就是 高斯分布(正太分布),常用的还有 伯努利分布,多项式分布。这些 分布对应着 不同的 贝叶斯算法,他们的 本质都是 相同的,只不过计算之中的 f(x) 不同。每个 f(x) 都对应着 一系列 需要 去估计的 参数。

        在 贝叶斯 中,fit 过程其实是在 估计对应分布的 参数,predict 过程 是在 该参数下的 分布 中去 进行概率 预测。

三、概率类模型的评估指标

1. 布里尔分数 Brier Score

        概率预测的 准确程 度 被称为 “校准程度”,是 衡量算法预测 出的 概率 和 真实结果 的差异的一种方式。一种比较 常用的 指标叫 做 布里尔分数。

        其中 N 是 样本数量,p_i 为朴素贝叶斯 预测出的 概率,o_i 是样本所对应的 真实结果,只能 取到 0 或者 1,如果 事件 发生 则为 1,如果 不发生则 为 0。这个 指标衡量了 概率 距离 真实标签结果的 差异。布里尔分数的 范围是 从 0 到 1,分数越高 则 预测结果 越差劲,校准 程度越差,因此 布里尔分数 越接近 0 越好

from sklearn.metrics import brier_score_loss
from sklearn.preprocessing import OneHotEncoder

# 新版 sklearn的 brier_score_loss不支持多分类了,所以需要对数据进行 独热处理
y_test_ = OneHotEncoder().fit_transform(y_test.reshape(-1,1)).toarray()

# y_test_.shape: (540, 10)
# prob.shape: (540, 10)

brier_score_loss(y_test_[:,1], prob[:,1], pos_label=1) 

2. 对数似然函数Log Loss

        另一种 常用的 概率损失衡量是 对数损失(log_loss),又叫做 对数似然,逻辑损失 或者 交叉熵损失,它是 多元逻辑回归 以及一些 拓展算法,比如 神经网络中 使用的损失函数。

        对于一个样本,如果 样本的 真实标签 y_{true} 在{0,1}中取值,并且这个 样本 在类别 1 下的概率估计为 y_{pred} ,则这个样本所 对应的 对数损失是:

        它被定义为,对于 —个 给定的 概率分类器,在 预测概率 为条件的 情况下,真实 概率 发生的 可能性的 负对数。由于是 损失,因此 对数似然函数的 取值越小,则 证明概率 估计 越准确,模型 越理想。

    补充:什么时候使用对数似然,什么时候使用布里尔分数 ?

        在 现实应用中,对数似然函数 是 概率类模型 评估的 黄金指标,往往 是  评估概率类 模型的 优先选择。但是它也有一些缺点:

    ① 它没有界,不像布里尔分数有上限,可以作为模型效果的 参考。

    ② 它的解释性 不如 布里尔 分数,难 与 非技术人员 去交流 对数似然 存在的 可靠性 和 必要性。

    ③ 它在 以最优化 为目标的 模型上 明显 表现更好。

    ④ 它有一些 数学上的 问题,比如 不能接受 为 0 或 1 的 概率,否则的话 对数似然 就会取到 极限值(考虑以 e 为底 的自然对数 在 取到 0 或 1 的时候的 情况)。

需求优先使用对数似然优先使用布里尔分数
衡量模型
要对比 多个模型,或者衡量模型的不同变化衡量单一模型的表现
可解释性 机器学习 和 深度学习之间的行家交流,学术论文商业报告,老板开会,业务模型的衡量
最优化指向
逻辑回归,SVC朴素贝叶斯
数学问题
概率 只能无限接近于 或 1,无法取到 或 1概率可以取到 或 1,比如树,随机森林

3. 可靠性曲线 Reliability Curve

        可靠性曲线 (reliability curve),又叫做 概率校准曲线 (probability calibration curve),可靠性图 (reliabilitydiagrams),这是一条 以 预测概率为 横坐标,真实标签 为 纵坐标的曲线。我们 希望预测慨率 和 真实值 越接近越好,最好 两者相等,因此 一个 模型 / 算法 的概率校准曲线 越靠近 对角线 越好

        通常来说,曲线 用于 二分类 的 情况最多。在绘图 之前 将数据 进行分箱,然后 规定 每个箱子中 真实的 少数类 所占的 比例为 这个箱上的 真实概率 trueproba,这个 箱子中 预测概率 的 均值为这个箱子的 预测概率 predproba,然后以 trueproba 为纵坐标,predproba 为横坐标,来 绘制可靠性曲线。

# calibration_curve类

sklearn.calibration.calibration_curve(y_true, y_prob, *, normalize=False, n_bins=5, strategy='uniform')
参数含义
y_true
真实标签
y_prob
预测返回的,正类别下的 概率值 或 置信度
normalize
布尔值,默认 False
是否将  y_prob  中输入的 内容归一化到  [0,1]  之间,比如说,当  y_prob 并 不是真正的概率的时候可 以使用。如果这是为True ,则会将 y_prob 中最小的值 归一化为  0 ,最大值归一化为  1
n_bins
整数值,表示分箱的 个数。如果箱数 很大,则 需要更多的 数据。
返回含义
trueproba
可靠性曲线的纵坐标,结构为(n_bins, ),是每个箱子中少数类(Y=1)的占比
predproba
可靠性曲线的横坐标,结构为(n_bins, ),是每个箱子中 概率的均值

        对于贝叶斯,如果 概率校准曲线 呈现 sigmoid 函数 的镜像的 情况,则 说明数据集中的 特征不是 相互条件 独立的。贝叶斯原理中的 “朴素” 原则:特征 相互条件独立原 则被违反了。

    概率密度曲线和概率分布直方图:

        概率密度曲线:横坐标是 样本的取值,纵坐标 是落在这个样本取值区间中 的 样本个数,衡量的是 每个 X 的取值区间 之内 有多少样本。服从 高斯分布的是 X 的取值上的 样本分布。

        概率分布直方图:横坐标是 概率的取值 [0, 1],纵坐标 是落在 这个概率 取值范围中 的样本的 个数,衡量的 是每个概率 取值区间 之内 有多少样本。这个分布,是 没有任何 假设的。


    补充:校准可靠性曲线

        基于 Platt 的 Sigmoid 模型的 参数校准方法,一种是 基于等渗回归(isotonic calibration)的非参数的校准方法。

class sklearn.calibration.CalibratedClassifierCV(base_estimator=None, method=’sigmoid’, cv=’warn’)
参数含义
base_estimator
需要校准其输出决策功能的分类器,必须存在 predict_proba decision_function 接口。
如果参数 cv = prefit ,分类器必须已经拟合数据完毕。
cv
整数,确定交叉验证的策略。可能输入是:
① None ,表示使用默认的 3 折交叉验证
② 任意整数,指定折数
③对于输入整数和 None 的情况下来说,如果是二分类,则自动使用类 sklearn.model_selection.StratifiedKFold 进行折数分割。如果y 是连续型变量,则使用 sklearn.model_selection.KFold 进行分割。
④ 已经使用其他类建好的交叉验证模式或生成器  cv
⑤ 可迭代的,已经分割完毕的测试集和训练集索引数组
⑥ 输入“ prefit” ,则假设已经在分类器上拟合完毕数据。在这种模式下,使用者必须手动确定用来拟合分类器的数据与即将倍校准的数据没有交集
method
进行概率校准的方法,可输入 "sigmoid" 或者 "isotonic"
① 输入 'sigmoid' ,使用基于 Platt Sigmoid 模型来进行校准
② 输入 'isotonic' ,使用等渗回归来进行校准
        当校准的样本量太少(比如,小于等于1000 个测试样本)的时候,不建议使用等渗回归,因为它倾向于过拟合。样本量过少时请使用sigmoids ,即 Platt 校准。
# 测试
gnb = GaussianNB().fit(Xtrain, Ytrain)
gnb.score(Xtest, Ytest)
brier_score_loss(Ytest, gnb.predict_proba(Xtest)[:,1], pos_label = 1)

gnbisotonic = CalibratedClassifierCV(gnb, cv=2, method='isotonic').fit(Xtrain, Ytrain)
gnbisotonic.score(Xtest, Ytest)
brier_score_loss(Ytest, gnbisotonic.predict_proba(Xtest)[:,1], pos_label = 1)

        当 数据的 特征之间 不是相互条件独立的时候,使用 lsotonic 方式来 校准 概率曲线,可以得到 不错的结果,让 模型在预测上 更加谦虚。

四、sklearn中的朴素贝叶斯

含义
naive_bayes.BernoulliNB
伯努利分布下的朴素贝叶斯
naive_bayes.GaussianNB
高斯分布下的朴素贝叶斯
naive_bayes.MultinomialNB
多项式分布下的朴素贝叶斯
naive_bayes.ComplementNB
补集朴素贝叶斯
linear_model.BayesianRidge
贝叶斯岭回归,在参数估计过程中使用贝叶斯回归技术来包括正则化参数

1. 高斯朴素贝叶斯(GaussianNB)

class sklearn.naive_bayes.GaussianNB (priors=None, var_smoothing=1e-09)
参数含义
prior
可输入任何类数组结构,形状为( n_classes ,)
表示类的先验概率。如果指定,则不根据数据调整先验,如果不指定,则自行根据数据计算先验概率 。
var_smoothing
浮点数,可不填(默认值 = 1e-9
在估计方差时,为了追求估计的稳定性,将所有特征的方差中最大的方差以某个比例添加 到估计的方差中。这个比例,由 var_smoothing  参数控制。
gnb = GaussianNB().fit(Xtrain, Ytrain)

#查看分数
acc_score = gnb.score(Xtest,Ytest)

#查看预测结果
Y_pred = gnb.predict(Xtest)

#查看预测的概率结果
prob = gnb.predict_proba(Xtest)

2. 多项式朴素贝叶斯(MultinomialNB)

        它也是基于 原始的 贝叶斯理论,但 假设 概率分布 是服从 一个简单 多项式分布。多项式分布 来源于 统计学中的 多项式实验,这种 实验可以 具体解释 为:实验包括 n 次 重复试验,每项 试验 都有不同的 可能结果。在 任何给定的 试验中,特定 结果 发生的概率 是不变的。

        多项式 分布 擅长的是 分类型变量,在 其原理 假设中,P(x_i|Y) 的概率是 离散的,并且 不同 x_i 下的 P(x_i|Y) 相互独立,互不影响。多项式实验中的 实验结果 都很具体,它 所涉及的 特征 往往是 次数、频率、计数,出现 与否这样的 概念,这些 概念都是 离散的 正整数,因此 sklearn 中的 多项式朴素贝叶斯 不接受 负值的输入。

        从 数学的角度 来看,在一种 标签类别 Y=c 下,有一组 分别 对应特征的 参数向量 \theta_c=(\theta_{c1},\theta_{c2},\ldots,\theta_{cn}),其中 n 表示 特征的总数。一个 𝜃 表示 这个标签类别下的 第 i 个 特征所 对应的 参数。这个 参数被 定义为:

        记作 P(x_i|Y=c),表示当 Y=c 这个 条件固定的时候,一组 样本在 X_i 这个特征上的 取值被取到的 概率。

        注:在高斯朴素贝叶斯中求解的概率 P(x_i|Y) 是对于一个样本来说,而现在求解的 P(x_i|Y=c) 是对于一个特征 X_i 来说的概率。

        对于一个在标签类别 Y=c 下,结构为(m,n)的特征矩阵来说,有:

        其中每个 x_{ij} 都是特征 X_i 发生的次数。通过 平滑后的 最大似然估计来求 解参数 \theta_y:

        对于 每个特征,\sum_{y_i=c}^{}{x_{ji}} 是特征 X_i 下 所有标签为 c 的样本的 特征取值之和,即 特征矩阵中 每一列的 和。\sum_{i=1}^{n}{\sum_{y_i=c}^{}{x_{ji}}}  是所有 标签 类别为 c 的样本上,所有 特征的 取值 之和,即 特征矩阵 X_i 中所有元素的 和。a 被称为 平滑系数,令 a>0 来防止 训练数据中 出现过的 一些词汇 没有出 现在测试集 中导致的 0 概率,以避免 让参数 𝜃 为 0 的情况

        如果将 a 设置 为 1,则 这个平滑 叫 做 拉普拉斯平滑,如果 a 小于 1,则我们 把它叫 做 利德斯通平滑。两种 平滑 都属于 自然语言处理 中 比较常用的 用来平滑 分类数据的 统计手段。

class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
参数含义

alpha 
浮点数 , 可不填 ( 默认为 1.0)
拉普拉斯或利德斯通平滑的参数 ,如果设置为 0 则表示完全没有平滑选项。
需要注意的是,平滑相当于人为给概率加上一些噪音,因此a设置得越大,多项式朴素贝叶斯的精确性会越低(虽然影响不是非常大),布里 尔分数也会逐渐升高。
fit_prior  
布尔值 , 可不填 ( 默认为 True)
是否学习先验概率P(Y=c)。如果设置为false ,则不使用先验概率,而使用统一先验概率( uniform prior),即认为每个标签类出现的概率是 \frac{1}{n\_classes}
class_prior
形似数组的结构,结构为 (n_classes, ) ,可不填(默认为 None
类的先验概率P(Y=c)。如果没有给出具体的先验概率则自动根据数据来进行计算。

        如果采用哑变量方式的分箱处理,多项式贝叶斯的效果会突飞猛进。

3. 伯努利朴素贝叶斯(BernoulliNB)

        多元伯努利分布 简单来说,就是 数据集中 可以 存在 多个特征,但 每个特征 都是 二分类的,可以 以布尔变量 表示,也可以 表示为{0,1} 或者{-1,1} 等任意 二分类组合。因此,这个类 要求 将样本 转换为 二分类特征向量,如果 数据本身 不是二分类的,可以 使用类中 专门 用来二值化的参数 binarize 来改变数据。

        伯努利贝叶斯类 假设 数据服从 多元伯努利分布,并 在此基础上 应用朴素贝叶斯的 训练 和 分类过程

class sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
伯努利朴素贝叶斯含义

alpha 
浮点数 , 可不填 ( 默认为 1.0)
拉普拉斯或利德斯通平滑的参数 ,如果设置为 0 则表示完全没有平滑选项。
需要注意的是,平滑相当于人为给概率加上一些噪音,因此设置得越大,多项式朴素贝叶斯的精确性会越低(虽然影响不是非常大),布里 尔分数也会逐渐升高。
binarize
浮点数或 None ,可不填,默认为  0
将特征二值化的阈值,如果设定为  None ,则会假定说特征已经被二值化完毕
fit_prior
布尔值 , 可不填 ( 默认为 True)
是否学习先验概率 。如果设置为 false,则不使用先验概率P(Y=c),而使用统一先验概率(uniform prior),即认为每个标签类出现的概率是\frac{1}{n\_classes}
class_prior
形似数组的结构,结构为 (n_classes, ) ,可不填(默认为 None
类的先验概率P(Y=c)。如果没有给出具体的先验概率则自动根据数据来进行计算。

4. 补集朴素贝叶斯ComplementNB

        补集朴素贝叶斯 (complement naive Bayes,CNB) 算法是 标准 多项式朴素贝叶斯算法的改进。它能够 解决 样本不平衡问题,并且 能够一定程度上 忽略朴素假设的 补集朴素贝叶斯。

        CNB 使用来自 每个标签类别的 补集的概率,并 以此来计算每个特征的权重。

        其中 j 表示 每个样本,x_{ij} 表示在 样本 j 上对于 特征 i 下的 取值。a 是像 标准多项式 朴素贝叶斯 中一样的 平滑系数。\sum_{y_j\neq c}{x_{ij}} 指的是一个 特征 i 下,所有标签类别 不等于 c 值的 样本的特征 取值之和。而 \sum_{i,y\neq c}{\sum_{i=1}^{n}{x_{ij}}} 是所有特征 下 所有标签类别 不等于 c 值 得样本的 特征 取值 之和。这是 多项式分布的 逆向思路

        对于这个概率,对 它 取对数后 得到权重。还可以 选择 除以它的 L2范式,以 解决了 在多项式分布 中,特征取值 比较多的 样本(比如说比较长的文档)支配参数 估计的 情况。

索引X1X2
0
11
101

        这种状况下,索引为 0 的样本 就会在 参数估计中 占更多的权重。

        如果一个样本下的 很多个 随机事件 同时发生,还 在一次实验中 发生了多次,那 这个样本在参数 估计中 也会占有 更大的权重。

        基于这个权重,补充朴素贝叶斯中一个 样本的预测 规则为:

        即 求解出的 最小补集概率 所对应的 标签就是 样本的标签,因为 Y≠c 的概率 越小,则 意味着 Y=c 的概率越大,所以 样本属于 标签类别 c。

class sklearn.naive_bayes.ComplementNB(alpha=1.0, fit_prior=True, class_prior=None, norm=False)
补集朴素贝叶斯含义

alpha 
浮点数 , 可不填 ( 默认为 1.0)
拉普拉斯或利德斯通平滑的参数 ,如果设置为 0 则表示完全没有平滑选项。需要注意的是,平滑相当于人 为给概率加上一些噪音,因此 设置得越大,多项式朴素贝叶斯的精确性会越低(虽然影响不是非常大),布里 尔分数也会逐渐升高。
norm 
布尔值,可不填,默认 False
在计算权重的时候是否适用 L2 范式来规范权重的大小。默认不进行规范,即不跟从补集朴素贝叶斯算法的全部 内容,如果希望进行规范,请设置为True
fit_prior
布尔值 , 可不填 ( 默认为 True)
是否学习先验概率P(Y=c)。如果设置为false ,则不使用先验概率,而使用统一先验概率( uniform prior),即认为每个标签类出现的概率是\frac{1}{n\_classes}
class_prior
形似数组的结构,结构为 (n_classes, ) ,可不填(默认为 None
类的先验概率P(Y=c)。如果没有给出具体的先验概率则自动根据数据来进行计算。

五、其他理解

1. 由于贝叶斯是 从概率角度 进行估计,它所 需要的样本量 比较少,极端情况下 甚至可以使用1%的数据 作为 训练集,依然 可以得到很好的 拟合效果

2. 与 SVM 和 随机森林 相比,朴素贝叶斯 运行速度更快,因为求解 P(X_i|Y) 本质是在 每个特征上 单独对概率 进行计算,然后 再求 乘积,所以 每个特征上的 计算可以是 独立 并且并行的,因此 贝叶斯的 计算速度 比较快。

3. 贝叶斯 天生学习能力 比较弱。样本量 越大,贝叶斯 需要学习的 东西越多,对 训练集的 拟合程度 也越来越差。反而 比较 少量的样本可以 让贝叶斯有较高的 训练准确率。

4. 所有模型 在样本量 很少的时候都是 出于过拟合状态的(训练集上表现好,测试 集上表现糟糕),但 随着样本的 逐渐增多,过拟合问题 都逐渐消失了,不过 每个模型的 处理 手段不同。比较 强大的 分类器,比如 SVM,随机森林 和 逻辑回归,是 依靠快速 升高模型 在测试集上的 表现来 减轻 过拟合问题。相对的,决策树 虽然也是通过 提高模型在测试集 上的 表现来减 轻过拟合,但 随着 训练样本的增加,模型 在测试集上的 表现善生都 非常缓慢。朴素贝叶斯 独树一帜,是 依赖 训练集上的 准确率下降,测试集上的 准确率上 开来逐渐解决 过拟合问题。

5. 贝叶斯是速度很快,但 分类效果一般,并且 初次训练之后的结果就 很接近 算法极限的算法,几乎没有调参的余地。也就是说,如果 追求对概率的预测,并且 希望 越准确越好,那应该 先选择逻辑回归。如果 数据十分复杂,或者是 稀疏矩阵,那应 坚定地使用 贝叶斯。如果 分类的且标不是要追求 对概率的 预测,那完全 可以 先试试看 高斯朴素贝叶斯的 效果,如果 效果很不错,就很幸运地 得到了—个 表现优秀又快速的 模型。如果 没有得到 比较好的结果,那我们 完全可以 选择再更换成 更加复杂的模型。

6. 概率校正 对于原本的 可靠性曲线是 形容 Sigmoid 形状的 曲线的 算法 比较有效。

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值