✏️
LiHang-TongJiXueXiFangFa
  • Introduction
  • 第2章 感知机 - 原始形式
    • 学习策略的推导
    • 梯度下降法的算法过程
    • 梯度下降法的推导过程
    • 梯度下降法的收敛证明
  • 第2章 感知机 - 对偶形式
    • 学习模型的推导
    • 梯度下降法的算法过程
    • 梯度下降法的推导过程
  • 第3章 k近邻算法
    • 模型三要素
    • 构造平衡kd树
    • 用kd树的k近邻搜索
    • kd树的原理与改进
  • 第4章 朴素贝叶斯
    • 模型公式的推导
    • 策略公式的推导
    • 最大似然估计算法过程
    • 贝叶斯估计算法过程
  • 第5章 决策树
    • 决策树的模型
    • 信息增益的算法
    • ID3决策树的生成算法
    • C4.5决策树的生成算法
    • 决策树的剪枝算法
  • 第5章 CART决策树
    • CART树的生成
    • CART树的剪枝
  • 第6章 逻辑回归
    • 二分类逻辑回归模型
    • 多分类逻辑回归模型
  • 第6章 最大熵模型
    • 最大熵的原理
    • 最大熵模型的定义
    • 最大熵的学习过程
    • 根据最大熵的学习过程推导最大熵模型
    • 证明:对偶函数的极大化=模型的极大似然估计
  • 第6章 目标函数最优化问题
    • 改进的迭代尺度法(IIS)
    • IIS算法公式(1)推导
    • A和B的推导
    • 拟牛顿法
  • 第7章 支持向量机
    • 函数间隔与几何间隔
  • 第7章 线性可分SVM
    • 凸二次规划问题推导
    • 支持向量
    • 凸二次规划问题求解
    • 原始问题转换为对偶最优化问题
  • 第7章 线性SVM
    • 原始问题转换为对偶最优化问题
    • 根据 a 求 w 和 b*
    • 支持向量
  • 第7章 非线性SVM
    • 核函数与核技巧
    • 核技巧在SVM中的应用
    • 7.3.2 正定核
    • 常用的核函数
  • 第7章 序列最小最优化算法
    • 选择变量
    • 推导1
    • 推导2
    • 推导3
    • 推导4
    • 推导5:update b
  • 第8章 adaboost
    • 算法过程
    • 训练误差分析
    • 加法模型
    • 前向分步算法
    • adaboost一种特殊的加法模型
  • 第8章 提升树
    • 回归问题提升树的推导
    • 回归问题提升树前向分步算法
    • 一般决策问题梯度提升算法
  • 第9章 EM算法
    • 算法过程
    • Q函数的推导
    • 关于算法的收敛性
    • 高斯混合模型参数估计的EM算法
    • Q函数推导
    • 推导2
  • 第10章 隐马尔可夫模型
    • 定义
    • 概率计算问题 - 直接计算法
    • 概率计算问题 - 前向算法
    • 概率计算问题 - 后向算法
    • 学习问题 - 监督学习
    • 学习问题 - 非监督学习
    • Baum - Welch算法推导
    • 推导1
    • 预测问题 - 近似算法
    • 预测问题 - 维特比算法
    • 维特比算法推导过程
  • 第11章 条件随机场
    • 概率无向图模型
  • 遗留问题
Powered by GitBook
On this page
  • 朴素贝叶斯算法
  • 计算先验概率
  • 计算每个特征每个取值的条件概率
  • 计算假如时出现X=x的条件概率
  • 计算当X=x时所有的后验概率的分子
  • 确定x的分类
  • 代码

Was this helpful?

  1. 第4章 朴素贝叶斯

最大似然估计算法过程

Previous策略公式的推导Next贝叶斯估计算法过程

Last updated 5 years ago

Was this helpful?

朴素贝叶斯算法

输入: 样本数据T,包含m个n维特征的样本。 aij为每个样本特征的第i个特征可取到的第j个值。 测试样本x 输出: 对x的预测分类。

计算先验概率

Pk(Y=Ck)=∑I(y=Ck)mP_k(Y=C_k) = \frac {\sum I(y=C_k)}{m}Pk​(Y=Ck​)=m∑I(y=Ck​)​

计算每个特征每个取值的条件概率

PijkP_{ijk}Pijk​为当y=Cky=C_ky=Ck​时,X第j个特征为aija_{ij}aij​的条件概率

Pijk=∑I(X(i)=aij,y=Ck)∑I(y=Ck)P_{ijk} = \frac{\sum I(X^{(i)} = a_{ij}, y=C_k)}{\sum I(y=C_k)}Pijk​=∑I(y=Ck​)∑I(X(i)=aij​,y=Ck​)​

计算假如y=Cky=C_ky=Ck​时出现X=x的条件概率

对所有CkC_kCk​计算P(X=x∣Y=Ck)P(X=x|Y=C_k)P(X=x∣Y=Ck​) P(X=x∣Y=Ck)P(X=x|Y=C_k)P(X=x∣Y=Ck​)为当y=Cky=C_ky=Ck​时,x的每一个特征的条件概率的乘积。

P(X=x∣Y=Ck)=∏P(x(i)=ai∣y=Ck)P(X=x|Y=C_k) = \prod P(x^{(i)}=a_i|y=C_k)P(X=x∣Y=Ck​)=∏P(x(i)=ai​∣y=Ck​)

以上公式中分子所有需要的内容都在以前已经计算出,代入公式即可 不需要计算分母。因为最终要用到的不是后验概率的具体数值,只是要比较大小。中所有C_k的后验概率公式,分母都是相同的,不影响大小的比较,所以不用计算出来。

确定x的分类

代码

def NaiveteBayes(T, y, a, Y, x):
    # 计算先验概率
    prepro = {}
    for yRange in Y:
        #print (yRange, Y[Y==yRange].shape[0], )
        prepro[yRange] = y[y==yRange].shape[0]/y.shape[0]
    print('先验概率:',prepro)
    # 计算条件概率
    conpro = {}
    for i in range(len(a)):  # 遍历每个特征
        for j in a[i]: # 遍历特征的每个取值
            for k in Y:
                conpro[(i,j, k)] = X[(y==k)&(X[:,i]==j),:].shape[0]/X[y==k,:].shape[0]
    print('条件概率:',conpro)
    # 计算后验概率的分子
    postpro = {}
    for yRange in Y:
        pro = 1
        for i in range(x.shape[0]):
            pro = pro * conpro[(i, x[i], yRange)]
        postpro[yRange] = pro * prepro[yRange]
    print ('后验概率', postpro)
    # 确定X的分类
    import operator
    return sorted(postpro.items(),   # iterable -- 可迭代对象,在python2中使用A.iteritems(),在python3中使用A.items()
           key=operator.itemgetter(1),   # key -- 主要是用来进行比较的元素,指定可迭代对象中的一个元素来进行排序,这里指基于item的value进行排序
           reverse=True)[0][0]   # reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
# 排序结果是一个list

计算当X=x时所有CkC_kCk​的后验概率的分子

P(Y=Ck∣X=x)=P(X=x∣Y=Ck)P(Y=Ck)P(X=x)P(Y=C_k|X=x) = \frac{P(X=x|Y=C_k)P(Y=C_k)}{P(X=x)}P(Y=Ck​∣X=x)=P(X=x)P(X=x∣Y=Ck​)P(Y=Ck​)​

当X=x时所有CkC_kCk​的后验概率中分子取得最大概率的那CkC_kCk​即x的分类