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

  • 相关阅读:
    IPC---信号量
    static的用法
    模拟对话框的实现
    Dom选择器使用与调试记录
    第一个javascript脚本
    javascript基础总汇
    overflow的量两种模式
    固定标签到页面
    固定标签到某个标签
    固定标签(position: fixed)
  • 原文地址:https://www.cnblogs.com/TTyb/p/6288687.html
Copyright © 2011-2022 走看看