zoukankan      html  css  js  c++  java
  • 朴素贝叶斯算法

    最为广泛的两种分类模型是 决策树模型(Decision Tree Model)朴素贝叶斯模型(Naive Bayesian Model,NBM)

    朴素贝叶斯算法思路

    朴素贝叶斯法是基于 贝叶斯定理与特征条件独立假设 的分类方法,按照以前 决策树 的数据,利用朴素贝叶斯进行分类:

    假设存在如下一组信息:

    天气 气温 湿度 外出
    晴朗 高温 无风 no
    晴朗 高温 有风 no
    多云 高温 无风 yes
    下雨 温暖 无风 yes
    下雨 寒冷 正常 无风 yes
    下雨 寒冷 正常 有风 no
    多云 寒冷 正常 有风 yes
    晴朗 温暖 无风 no
    晴朗 寒冷 正常 无风 yes
    下雨 温暖 正常 无风 yes
    晴朗 温暖 正常 有风 yes
    多云 温暖 有风 yes
    多云 高温 正常 无风 yes
    下雨 温暖 有风 no

    将上面的表格整理一下如下:

    天气 yes no 气温 yes no 湿度 yes no yes no 外出 yes no
    晴朗 2 3 高温 2 2 3 4 无风 6 2 外出 9 5
    多云 4 0 温暖 4 2 正常 6 1 有风 3 3
    下雨 3 2 寒冷 3 1

    假设所有的变量都是 独立的 ,那么在以下天气中是否该外出:

    evidence = ['晴朗', '寒冷', '高', '有风']
    

    将上述事件记为 EE = [E1, E2, E3, E4] , 当A、B相互独立时,由:

    得贝叶斯定理:

    得:

    又因为4个指标是相互独立的,所以:

    带入计算得到:

    P(yes|E)*P(E)=2/9×3/9×3/9×3/9×9/14=0.0053
    P(no|E)*P(E)=3/5×1/5×4/5×3/5×5/14=0.0206
    

    外出概率:0.005291005291005291,不外出概率:0.02057142857142857,不适合外出!

    朴素贝叶斯算法代码

    朴素贝叶斯最重要的是构造 训练样本 ,将表:

    天气 yes no 气温 yes no 湿度 yes no yes no 外出 yes no
    晴朗 2 3 高温 2 2 3 4 无风 6 2 外出 9 5
    多云 4 0 温暖 4 2 正常 6 1 有风 3 3
    下雨 3 2 寒冷 3 1

    转化为字典:

    newcondition = {'高温': {'no': 0.4, 'yes': 0.2222222222222222}, '高': {'no': 0.8, 'yes': 0.3333333333333333}, '有风': {'no': 0.6, 'yes': 0.3333333333333333}, '温暖': {'no': 0.4, 'yes': 0.4444444444444444}, '多云': {'yes': 0.4444444444444444}, '寒冷': {'no': 0.2, 'yes': 0.3333333333333333}, '正常': {'no': 0.2, 'yes': 0.6666666666666666}, '下雨': {'no': 0.4, 'yes': 0.3333333333333333}, '无风': {'no': 0.4, 'yes': 0.6666666666666666}, '晴朗': {'no': 0.6, 'yes': 0.2222222222222222}}
    
    newresult = {'no': 0.35714285714285715, 'yes': 0.6428571428571429}
    

    最后相乘计算出概率即可:

    # 判断是否外出
    def judgeresult(newcondition, newresult, weather):
        yesresult = 1
        noresult = 1
        for item in weather:
            # 外出的概率
            yesresult = yesresult * newcondition[item]["yes"]
            noresult = noresult * newcondition[item]["no"]
    
        yesresult = yesresult * newresult["yes"]
        noresult = noresult * newresult["no"]
    
        if yesresult >= noresult:
            print("外出概率:" + str(yesresult) + ",不外出概率:" + str(noresult) + ",适合外出!")
        else:
            print("外出概率:" + str(yesresult) + ",不外出概率:" + str(noresult) + ",不适合外出!")
    

    最终结果为:

    外出概率:0.005291005291005291,不外出概率:0.02057142857142857,不适合外出!
    

    python的完成代码在我的博客上面:

    TTyb

  • 相关阅读:
    推荐系统入门笔记2--信息检索 Lucene
    Mybatis多个参数,其中有hashMap的写法
    Java中fastjson的toJSONString结果为空{}
    Linux中less命令出现ESC乱码
    关于博客
    【Uni-App】关于获取手机系统信息的项目实践
    mysql 服务列表找不到
    服务网格与Istio
    ARM架构服务器如何运行EasyNVR软件提示无法识别二进制文件排查及解决
    关于EasyNVR拉流摄像头的视频流存在视频流锁定机制的问题说明
  • 原文地址:https://www.cnblogs.com/TTyb/p/6288687.html
Copyright © 2011-2022 走看看