第116天:机器学习算法之朴素贝叶斯理论

简介: 第116天:机器学习算法之朴素贝叶斯理论

朴素贝叶斯(Naive Bayesian Mode,NBM)


贝叶斯由来


贝叶斯是由英国学者托马斯·贝叶斯 提出的一种纳推理的理论,后来发展为一种系统的统计推断方法。被称为贝叶斯方法。


朴素贝叶斯


朴素贝叶斯法是基于贝叶斯定理特征条件独立假设的分类方法。优点是在数据较少的情况下仍然有效,可以处理多类别的问题。缺点是对于输入数据的装备方式较为敏感。适用于标称型的数据。


特征条件独立:假设 X 的 N 个特征在类确定的条件下都是条件独立的。这样大大简化了计算的复杂度,但是会牺牲一些准确性。


标称型数据:只在有限目标集中取值,比如真与假。


贝叶斯定理


条件概率就是指在事件 B 发生的情况下事件 A 发生的概率,用 P(A|B) 表示,读作 "A 在 B 发生的条件下发生的概率"。


image.png


image.png


其中:


  1. P(A) 是 A 的先验概率或边缘概率,不考虑 B 的因素
  2. P(A|B) 是已知 B 发生后 A 的条件概率,也称作 A 的后验概率。
  3. P(B|A) 是已知 A 发生后 B 的条件概率,也称作 B 的后验概率,称作似然度。
  4. P(B) 是 B 的先验概率或边缘概率,称作标准化常量。
  5. P(B|A)/P(B) 称作标准似然度。


示例1:桶中的石子


假设现在有 A 桶 和 B 桶两个桶,A 桶里面装有 4 块石子分别2 块黑色的石子和2块灰色的石子,B 桶里面装有 3 块石子分别为 2 块黑色石子和 1 块灰色石子,那么在这两个桶里面取出任意一个石子且都是灰色的,问这个灰色石子在 A 桶中被取出的概率是多少?

假设在 A 桶里面取出石子为事件 A,取出灰色石子为事件 B,在 A 桶中取出灰色石子的事件概率为 P(B|A),则:P(A) = 4/7,P(B) = 3/7,P(B|A) = 1/2,按照公式:


image.png


所以,在两个桶里面取出任意一个石子且为灰色的,这个灰色石子在 A 桶被取出的概率为 2/3


示例2:根据天气情况判断是否出去游玩


在现实中我们经常按天气情况判断是否出去游玩,下面做成一个表格


天气 温度 湿度 风力 结果
多云
多云
多云
多云
多云
多云
小雨
小雨
小雨
小雨


现在有个朋友喊你出去游玩,但是天气是多云、温度较冷、湿度较低、风力强,判断一下是否出去游玩。


套用上面朴素贝叶斯公式 P(类别|特征) 为 P(是|多云、冷、低、弱) 和 P(类别|特征) = P(否|多云、冷、低、弱) 的概率。


如果 P(是|多云、冷、低、弱) > P(否|多云、冷、低、弱),则为出去游玩。如果 P(是|多云、冷、低、弱) < P(否|多云、冷、低、弱),则为不出去游玩。


由朴素贝叶斯公式可知:


image.png


统计出去游玩的特征概率


下面就可以将特征一个一个统计计算


1.首先我们整理出去玩的样本,结果为是则出去游玩的样本如下,一共有 3 条数据


天气 温度 湿度 风力 结果
多云
多云
多云
小雨


P(是) = 4/10 = 2/5



2.当天气为多云出去游玩 P(多云|是) 的样本统计如下:


天气 温度 湿度 风力 结果
多云
多云
多云


P(多云|是) = 3/4


3.当温度为冷出去游玩 P(冷|是) 的样本统计如下:


天气 温度 湿度 风力 结果
多云


P(冷|是) = 1/4


4.当湿度为低出去游玩 P(低|是) 的样本统计如下


天气 温度 湿度 风力 结果
多云
多云
小雨


P(低|是) = 3/4


5.当风力为弱出去游玩 P(弱|是) 的样本统计如下


天气 温度 湿度 风力 结果
多云

P(弱|是) = 1/4


在这里已经统计出了 P(多云∣是)、P(冷∣是)、P(低∣是)、P(弱∣是)、P(是) 的概率,下面开始统计 P(多云)、P(冷)、P(低)、P(弱) 的概率


1.天气为多云 P(多云) 的样本统计一共有 6 条,概率则为 6/10。P(多云) = 6/10 = 3/5


2.温度为冷 P(冷) 的样本统计一共有 4 条,概率则为 4/10。P(冷) = 4/10 = 2/5


3.湿度为冷 P(低) 的样本统计一共有 4 条,概率则为 4/10。P(低) = 4/10 = 2/5


4.风力为弱 P(弱) 的样本统计一共有 5 条,概率则为 1/2。P(弱) = 1/2


计算游玩概率


到这里已经统计出了 P(多云)、P(冷)、P(低)、P(弱) 的概率,把所有数值带入公式:


image.png


统计不出去游玩的特征概率


在是否出去游玩中计算了多云、冷、低、强的天气情况下出去游玩 P(是|多云、冷、低、弱) 的概率之后,还需要计算同样的天气情况下不出去游玩 P(否|多云、冷、低、弱)的概率,和上面使用同样的方法计算 P(多云|否)、P(冷|否)、P(低|否)、P(弱|否)*P(否) 的概率。


1.统计不出去游玩 P(否) 的概率,P(否) = 6/10 = 3/5


2.统计当天气为多云不出去游玩 P(多云|否) 的样本概率,P(多云|否) = 3/6 = 1/2


3.统计当温度为冷不出去游玩 P(冷|否) 的样本概率,P(冷|否) = 3/6 = 1/2


4.统计当湿度为低不出去游玩 P(低|否) 的样本概率,P(低|否) = 1/6


5.当风力为弱不出去游玩 P(弱|否) 的样本概率,P(弱|否) = 4/6 = 2/3


计算不游玩概率


上面计算了当不出去游玩是天气情况的概率,则把数值带入公式:


image.png


概率比较


很显然的结果:(3/4 * 1/4 * 3/4 * 1/4 * 2/5) / (3/5 * 2/5 * 2/5 * 1/2) < (1/2 * 1/2 * 1/6 * 2/3 * 3/5) / (3/5 * 2/5 * 2/5 * 1/2) 所以 P(是|多云、冷、低、弱) < P(否|多云、冷、低、弱)。


Python 实现


在 Python 中借助 pandas 模块和 numpy 模块可以实现计算朴素贝叶斯,在代码中需要做几件事情:


  1. 需要选择样本,如:示例2中的天气样本


  1. 计算每个类别的概率,这是先验概率


  1. 计算每个特征和类别同时发生的概率,这是后验概率


  1. 计算条件概率


  1. 比较特征出现在类别的概率


import pandas as pdimport numpy as np
class Nbm(object):
    def getSampleSet(self):        dataSet = np.array(pd.read_csv('csv文件'))  #将数据转为数组        featureData = dataSet[:, 0 : dataSet.shape[1] - 1] #取出特征        labels = dataSet[:, dataSet.shape[1] - 1] #取出类别        return featureData, labels
    def priori(self, labels):        # 求出是和否的先验概率        labels = list(labels)        priori_ny = {}        for label in labels:            priori_ny[label] = labels.count(label) / float(len(labels)) # P = count(label) / count(labels)        return priori_ny
    def feature_probability(self, priori_ny, features):        # 求出特征概率:多云+是,多云+否,冷+是,冷+否同时发生的概率        p_feature_ny = {}        for ny in priori_ny.keys():            ny_index = [i for i, label in enumerate(labels) if label == ny] # 是、否的下标            for j in range(len(features)):                f_index = [i for i, feature in enumerate(trainData[:, j]) if feature == features[j]] # 特征的下标                xy_count = len(set(f_index) & set(ny_index)) # 类别和特征下标相同的长度                pkey = str(features[j]) + '+' + str(ny)                p_feature_ny[pkey] = xy_count / float(len(labels)) # 特征和类别同时发生的概率        return p_feature_ny
    def conditional_probability(self, priori_ny, feature_probability, features):        #求出条件概率        P = {}        for y in priori_ny.keys():            for x in features:                pkey = str(x) + '|' + str(y)                P[pkey] = feature_probability[str(x) + '+' + str(y)] / float(priori_ny[y])  # P[X1/Y] = P[X1Y]/P[Y]        return P
    def classify(self, priori_ny, feature_probability, features):
        #求条件概率        p = self.conditional_probability(priori_ny, feature_probability, features)
        #求出[多云、冷、低、弱]所属类别        f = {}        for ny in priori_ny:            f[ny] = priori_ny[ny]            for x in features:                f[ny] = f[ny] * p[str(x)+'|'+str(ny)]   #计算P(多云∣是)∗P(冷∣是)∗P(低∣是)∗P(弱∣是)∗P(是)
        return max(f, key=f.get)  #概率最大值对应的类别
if __name__ == '__main__':    nbm = Nbm()    features = ['多云', '冷', '低', '弱']    trainData, labels = nbm.getSampleSet()    priori_ny = nbm.priori(labels)
    feature_probability = nbm.feature_probability(priori_ny, features)
    result = nbm.classify(priori_ny, feature_probability, features)
    print(features, '的结果是', result)


总结


简单的介绍了朴素贝叶斯的一些概念,用了两个示例来增强朴素贝叶斯的学习,希望对大家有所帮助。


参考资料

《机器学习实战》

https://baike.baidu.com/item/贝叶斯公式

https://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html

https://zhuanlan.zhihu.com/p/26262151





目录
相关文章
|
4月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
|
10月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1027 6
|
5月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
208 6
|
7月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
|
8月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
1407 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
8月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
208 14
|
7月前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
128 0
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。
|
9月前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
238 2

热门文章

最新文章