Python實現樸素貝葉斯分類器
阿新 • • 發佈:2019-01-07
# -*-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")