# -*-coding:utf-8-*-
'''
樸素貝葉斯算法
'''
from __future__ import division
global className
className = "class"
def calc_class(train, classValue):
# 計算分類的概率
_num_cls = 0
_num_trains = len(train)
for t in train:
if t[className] == classValue:
_num_cls += 1
return _num_cls / _num_trains
def calc_attr(train, classValue, attrName, attrValue):
# 計算屬性的概率
_num_cls = 0
_num_attr = 0
for a in train:
if a[className] == classValue:
_num_cls += 1
if a[attrName] == attrValue:
_num_attr += 1
if _num_attr == 0:
_num_attr = 1
return _num_attr / _num_cls
def bayes(train, test, classY, classN):
_prob_Y = calc_class(train, classY)
_prob_N = calc_class(train, classN)
for key,value in test.items():
_prob_Y *= calc_attr(train, classY, key, value)
_prob_N *= calc_attr(train, classN, key, value)
return {classY:_prob_Y,classN:_prob_N}
if __name__=='__main__':
# 訓練數據
train = [
{"outlook":"sunny", "temp":"hot", "humidity":"high", "wind":"weak", "class":"no" },
{"outlook":"sunny", "temp":"hot", "humidity":"high", "wind":"strong", "class":"no" },
{"outlook":"overcast", "temp":"hot", "humidity":"high", "wind":"weak", "class":"yes" },
{"outlook":"rain", "temp":"mild", "humidity":"high", "wind":"weak", "class":"yes" },
{"outlook":"rain", "temp":"cool", "humidity":"normal", "wind":"weak", "class":"yes" },
{"outlook":"rain", "temp":"cool", "humidity":"normal", "wind":"strong", "class":"no" },
{"outlook":"overcast", "temp":"cool", "humidity":"normal", "wind":"strong", "class":"yes" },
{"outlook":"sunny", "temp":"mild", "humidity":"high", "wind":"weak", "class":"no" },
{"outlook":"sunny", "temp":"cool", "humidity":"normal", "wind":"weak", "class":"yes" },
{"outlook":"rain", "temp":"mild", "humidity":"normal", "wind":"weak", "class":"yes" },
{"outlook":"sunny", "temp":"mild", "humidity":"normal", "wind":"strong", "class":"yes" },
{"outlook":"overcast", "temp":"mild", "humidity":"high", "wind":"strong", "class":"yes" },
{"outlook":"overcast", "temp":"hot", "humidity":"normal", "wind":"weak", "class":"yes" },
{"outlook":"rain", "temp":"mild", "humidity":"high", "wind":"strong", "class":"no" },
]
# 測試數據
test = {"outlook":"overcast","temp":"cool","humidity":"high","wind":"strong"}
print bayes(train, test, "yes", "no")
Python實現樸素貝葉斯分類器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.