个人博客转至:tybai.com

无聊就想打码,打码使我快乐


Fork me on GitHub

朴素贝叶斯算法

最为广泛的两种分类模型是 决策树模型(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

posted on 2017-01-16 10:52  TTyb  阅读(429)  评论(0编辑  收藏  举报

导航


不用多久

我就会升职加薪

当上总经理

出任CEO

迎娶白富美

走上人生巅峰

Pulpit rock