朴素贝叶斯(Naive Bayes)

这篇具有很好参考价值的文章主要介绍了朴素贝叶斯(Naive Bayes)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        朴素贝叶斯是一个基于概率统计的机器学习算法,作用是用于多分类。

        训练集包含已知分类类别的大量样本,每个样本具有n维特征,例如:已知一个人分类为胖或者瘦,有5个特征用于分类,这5个特征分别是体重、身高、年龄、鞋码、每天吃几碗饭。每个特征可能还有分等级,如鞋码分为L、XL等。

        主要用到的数学知识有:条件概率、全概率公式、贝叶斯定理等。朴素贝叶斯对于具体的问题需要具体分析。

目录

一,基本的数学知识

1.1条件概率

1.2 全概率公式

1.3贝叶斯公式

二,具体例子实现二分类算法

2.1 独立分布、联合分布与条件分布的关系

2.2 应用贝叶斯公式

2.3 对概率计算公式取对数,从而连乘变为连加

三,python代码实现

3.1代码解析

3.1.1读取数据集

3.1.2 计算P(X|Y)

3.1.3模型数据计算结果解读

3.1.4模型的使用

3.2python代码

四,总结


一,基本的数学知识

1.1条件概率

        概率:某类样本的数量与样本总量的比值称为频率,对频率求极限得到概率。

        条件概率:首先对总的样本按照给定条件将合适的选出来,某类样本的数量与选出来的样本数量的比值极限就是条件概率。

朴素贝叶斯(Naive Bayes)

1.2 全概率公式

        由条件概率,可以得到:P(AB)=P(B)P(A|B)=P(A)P(B|A)。事件A由b1,b2,b3,……,bn等影响,全概率就是P(AB),其中B可以独立地分为B1,B2,……,Bn,将Bj作为条件累加得到。

朴素贝叶斯(Naive Bayes)

1.3贝叶斯公式

        贝叶斯公式就是对全概率公式的反驳,已知A发生的概率,求A发生是因为b1,b2,……,bn中b6引起的概率。

朴素贝叶斯(Naive Bayes)

二,具体例子实现二分类算法

2.1 独立分布、联合分布与条件分布的关系

        一共具有15个样本。朴素贝叶斯的情况用到了全概率公式,只是全概率公式的完备事件组只有一个。

朴素贝叶斯(Naive Bayes)

2.2 应用贝叶斯公式

        下图中的各种概率可以根据样本计算得到。

朴素贝叶斯(Naive Bayes)

2.3 对概率计算公式取对数,从而连乘变为连加

        作为机器学习的算法,必然少不了模型的训练,概率模型函数的训练就是依据已有的样本,把一些计算过程的固定参数进行计算保存。

朴素贝叶斯(Naive Bayes)

        对于数学来讲,上述模型还可以进一步进行简化。简化的理论如下:GMM分类模型就是进一步简化得到的结果。

朴素贝叶斯(Naive Bayes)

三,python代码实现

3.1代码解析

3.1.1读取数据集

        依据算法流程,首先将需要的数据利用一定的数据结构放入内存。或者利用excel可视化进行操作计算得到各种所需的数据结构也可行。

朴素贝叶斯(Naive Bayes)

3.1.2 计算P(X|Y)

朴素贝叶斯(Naive Bayes)

3.1.3模型数据计算结果解读

        朴素贝叶斯最终需要计算一些概率,模型训练就是将要用到的各种参数进行计算并保存,当得到新样本时,将样本的特征矩阵代入就可以计算。

朴素贝叶斯(Naive Bayes)

3.1.4模型的使用

朴素贝叶斯(Naive Bayes)

3.2python代码

import numpy as np

def createDataSet():
    dataSet = [[0, 0, 0, 0, 'no'],     #数据集,平面二维N×D
            [0, 0, 0, 1, 'no'],
            [0, 1, 0, 1, 'yes'],
            [0, 1, 1, 0, 'yes'],
            [0, 0, 0, 0, 'no'],
            [1, 0, 0, 0, 'no'],
            [1, 0, 0, 1, 'no'],
            [1, 1, 1, 1, 'yes'],
            [1, 0, 1, 2, 'yes'],
            [1, 0, 1, 2, 'yes'],
            [2, 0, 1, 2, 'yes'],
            [2, 0, 1, 1, 'yes'],
            [2, 1, 0, 1, 'yes'],
            [2, 1, 0, 2, 'yes'],
            [2, 0, 0, 0, 'no']]
    labels = ['年龄', '有工作', '有自己的房子', '信贷情况']        #特征标签
    return dataSet, labels                             #返回数据集和分类属性


# 获得 P(X|Y)
def trainPbmodel_X(feats):
    N,D = np.shape(feats) #N个满足条件的样本,每个样本D个特征
   
    model = {}
    # 对每一维度的特征进行概率统计
    for d in range(D):
        data = feats[:,d].tolist() #获取所有样本每个特征所组成的列表
        keys = set(data) # 列表变集合,实现去重,获取特征的取值个数,如年龄类别分为老中幼,那么keys里面存三个数据
        N = len(data) #样本个数
        model[d] ={}
        for key in keys:
            model[d][key] = float(data.count(key)/N)
    return model

# datas: list格式 每个元素表示1个特征序列    
# labs:  list格式 每个元素表示一个标签
def trainPbmodel(datas,labs):
   
    # 定义模型
    model = {}
    # 获取分类的类别
    keys = set(labs)
    for key in keys:
        # 获得P(Y)
        Pbmodel_Y = labs.count(key)/len(labs) #每个类别的概率
        
        # 收集标签为Y的数据
        index = np.where(np.array(labs)==key)[0].tolist() #[2, 3, 7, 8, 9, 10, 11, 12, 13],类别为Y的样本序号
        feats = np.array(datas)[index] #[2, 3, 7, 8, 9, 10, 11, 12, 13],类别为Y的样本的特征矩阵
        # print(index)
        # print(feats)
        
        # 获得 P(X|Y)
        Pbmodel_X = trainPbmodel_X(feats)
        
        # 模型保存
        model[key]={}
        model[key]["PY"] = Pbmodel_Y
        model[key]["PX"] = Pbmodel_X

    return model
    
# feat : list格式 一条输入特征
# model: 训练的概率模型
# keys :考察标签的种类 
def getPbfromModel(feat,model,keys):
    results ={}
    eps = 0.00001
    for key in keys:
        # 获取P(Y)
        PY = model.get(key,eps).get("PY")
        
        # 分别获取 P(X|Y)
        model_X = model.get(key,eps).get("PX")
        list_px=[]
        for d in range(len(feat)):
            pb = model_X.get(d,eps).get(feat[d],eps)
            list_px.append(pb)
        
        result = np.log(PY) + np.sum(np.log(list_px))
        results[key]= result
    return results

if __name__ == '__main__':        
    
    '''实验一  自制贷款数据集'''
    
    # 获取数据集
    dataSet, labels = createDataSet()
    
    # 截取数据和标签
    datas = [i[:-1] for i in dataSet] # 特征矩阵
    labs = [i[-1] for i in dataSet] #每个样本的类别1×N
    
    # 获取标签种类
    keys = set(labs) # keys是{'yes', 'no'},集合去掉相同的标签

    
    # 进行模型训练
    model = trainPbmodel(datas,labs)
    print(model)
    
    # 根据输入数据获得预测结果
    feat = [0,0,0,1]
    result = getPbfromModel(feat,model,keys)
    print(result)
    
    # 遍历结果找到概率最大值进行数据
    for key,value in result.items():
        if(value == max(result.values())):
            print("预测结果是",key)
    

四,总结

        朴素贝叶斯算法最终算的是一系列概率,这些概率与样本的特征有关,如果有N个类别就需要计算N个概率,其中概率最大的就是样本所属类别。

        在计算这些概率的时候使用到了贝叶斯定理,贝叶斯公式中的个别数据需要使用数据集计算的到,也就是模型参数的训练。这些参数如下:

朴素贝叶斯(Naive Bayes)文章来源地址https://www.toymoban.com/news/detail-441020.html

到了这里,关于朴素贝叶斯(Naive Bayes)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 29基于贝叶斯(Bayes)判别的机场航班延误因素分析(附matlab程序)

    1. 简述       学习目标:  基于贝叶斯判别的机场航班延误因素分析                           利用所创建的朴素贝叶斯分类器对象ObjBayes,对训练样本进行判别                        并利用贝叶斯预测误差统计          中国民航业近年来快速发展,航班量增多,航

    2024年02月11日
    浏览(31)
  • Bayes-RF,基于贝叶斯Bayes优化算法优化随机森林RF分类预测(二分类及多分类皆可)-附代码

    Bayesian Optimization(贝叶斯优化)是一种用于超参数调优的技术,对于类似随机森林(Random Forest,简称RF)的机器学习算法非常重要。随机森林是一种集成学习方法,它在训练过程中构建多个决策树,并输出这些树的类别众数(分类问题)或平均预测值(回归问题)。 以下是贝

    2024年04月10日
    浏览(37)
  • 基于weka平台手工实现朴素贝叶斯分类

    B事件发生后,A事件发生的概率可以如下表示: p ( A ∣ B ) = p ( A ∩ B ) P ( B ) (1) p(A|B)=frac{p(Acap B)}{P(B)}tag{1} p ( A ∣ B ) = P ( B ) p ( A ∩ B ) ​ ( 1 ) A事件发生后,B事件发生的概率可以如下表示: p ( B ∣ A ) = p ( A ∩ B ) P ( A ) (2) p(B|A)=frac{p(Acap B)}{P(A)}tag{2} p ( B ∣ A ) = P ( A ) p

    2024年02月13日
    浏览(46)
  • 机器学习-基于朴素贝叶斯的垃圾邮件分类

    概率论是许多机器学习算法的基础,此篇博客会给出一些使用概率论进行分类的方法。 首先从一个最简单的概率分类器开始,然后给出一些假设来学习朴素贝叶斯分类器。我们称之为“朴素”,是因为整个形式化过程只做最原始、最简单的假设。 我们还将构建另一个分类器

    2024年02月02日
    浏览(48)
  • python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一、朴素贝叶斯算法 1.概述 2.推导过程 二、实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog.csdn.net/weixin_59450364/article/details/124343350 1.概述        朴素贝叶斯法(Naive Bayes model)是基于贝叶斯定

    2024年02月07日
    浏览(88)
  • 基于朴素贝叶斯分类器的西瓜数据集(实战)

    最近刚开始学习机器学习中的朴素贝叶斯分类器,用西瓜数据集做了一下,最后结果预测正确率75%,其中运用到的python语法并不复杂,适合小白观看。 目录 朴素贝叶斯分类器思想的自然语言描述: 详细步骤在代码中说明 朴素贝叶斯分类器其实就是计算先验概率和每一个属性

    2024年02月11日
    浏览(36)
  • 机器学习——基于朴素贝叶斯分类算法实现垃圾邮件分类

    贝叶斯定理: 贝叶斯理论指的是,根据一个已发生事件的概率,计算另一个事件的发生概率。贝叶斯理论从数学上的表示可以写成这样:  ,在这里A和B都是事件, P(B)P(B)不为0。 在贝叶斯定理中: 1. P(A) 称为”先验概率”,即在B事件发生之前,我们对A事件概率的一个判断。如

    2024年02月04日
    浏览(54)
  • 基于朴素贝叶斯的垃圾邮件分类Python实现

    垃圾邮件的问题一直困扰着人们,传统的垃圾邮件分类的方法主要有\\\"法\\\"和\\\"校验码法\\\"等,然而这两种方法效果并不理想。其中,如果使用的是“”法,垃圾邮件中如果这个被拆开则可能识别不了,比如,“中奖”如果被拆成“中 ~~~ 奖”可能会识别不了。

    2024年02月02日
    浏览(43)
  • 第四章 基于概率论的分类方法:朴素贝叶斯

    朴素贝叶斯 优点:在数据较少的情况下仍然有效,可以处理多类别问题。 缺点:对于输⼊数据的准备⽅式较为敏感。 适⽤数据类型:标称型数据。 假设类别为 c 1 , c 2 c_1,c_2 c 1 ​ , c 2 ​ : 如果 p 1 ( x , y ) p 2 ( x , y ) p1(x,y) p2(x,y) p 1 ( x , y ) p 2 ( x , y ) ,那么类别为 c 1 c_1 c

    2024年02月13日
    浏览(45)
  • 【机器学习实战】-基于概率论的分类方法:朴素贝叶斯

    【机器学习实战】读书笔记 **朴素贝叶斯:**称为“ 朴素 ”的原因,整个形式化过程只做最原始、最简单的假设,特征之间没有关联,是统计意义上的独立。 **优点:**在数据较少的情况下仍然有效,可以处理多类别问题。 **缺点:**对于输入数据的准备方式较为敏感。 **适

    2024年03月25日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包