app开发者平台在数字化时代的重要性与发展趋势解析
1013
2022-08-25
朴素贝叶斯算法
最为广泛的两种分类模型是 决策树模型(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 = ['晴朗', '寒冷', '高', '有风']
将上述事件记为 E , E = [E1, E2, E3, E4] , 当A、B相互独立时,由:
得贝叶斯定理:
得:
又因为4个指标是相互独立的,所以:
带入计算得到:
P(yes|E)*P(E)=2/9×3/9×3/9×3/9×9/14=0.0053P(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
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~