機器學習演算法 之樸素貝葉斯的實現

2021-07-10 07:24:07 字數 2235 閱讀 6910

為了加深對機器學習演算法的理解,以及熟悉python,pandas,scikit-learn。現在自己實現一下主要的機器學習演算法,程式記錄如下:

決策樹類的實現程式:

from numpy import *

defloaddataset

(): postinglist=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],

['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],

['my', 'dalmation', 'is', 'so', 'cute', 'i', 'love', 'him'],

['stop', 'posting', 'stupid', 'worthless', 'garbage'],

['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],

['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]

classvec = [0,1,0,1,0,1] #1 is abusive, 0 not

return postinglist,classvec

defgen_label_prob

(label):

sample_len = len(label)

label_dic = {}

for label_val in label:

label_dic[label_val] = label_dic.get(label_val,0)+1

for key in label_dic.keys():

label_dic[key]=float(label_dic[key])/sample_len

return label_dic

defgen_condi_prob

(train_data,label,label_dic):

data_len = len(train_data)

label_set = set(label)

res_dic={}

for data_list in train_data:

for label_val in label_set:

for curr_x in data_list:

key = tuple([curr_x,label_val])

res_dic[key] = res_dic.get(key,0)+1

for key in res_dic.keys():

res_dic[key] = float(res_dic[key])/(data_len*label_dic[key[1]])

return res_dic,label_set

defpredict

(test,res_dic,label_set,label_dic):

prob = {}

for label in label_set:

for curr_x in test:

key=tuple([curr_x,label])

prob[label]=prob.get(label,1)*res_dic.get(key,0)

max_prob=0;max_label=0

for key in prob.keys():

prob[key]=prob[key]*label_dic[key]

if(prob[key]>max_prob):

max_label=key

max_prob=prob[key]

return max_label

defmodel_test

(): train_data,train_label = loaddataset()

label_dic=gen_label_prob(train_label)

res_dic,label_set=gen_condi_prob(train_data,train_label,label_dic)

#x=['quit', 'buying', 'worthless', 'food', 'stupid']

x=['stop']

res_label = predict(x,res_dic,label_set,label_dic)

print res_label

機器學習演算法 樸素貝葉斯

樸素貝葉斯 na ve bayes 屬於監督學習演算法,實現簡單,學習效率高 由於建立在貝葉斯理論之上,涉及到統計學方法,所以在大樣本量下會有較好的表現,當然樣本需要在一定程度上反映真實分布情況。該演算法的一條假設為 輸入的特徵向量的各分量之間兩兩條件獨立。因為這條假設比較嚴格,能夠完全符合該假設的...

機器學習之樸素貝葉斯

寫在前面 本文寫自初學時,若後續學習過程中有新的理解,將不定期進行更新 若文中敘述有誤,望不吝賜教,也將及時修改 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。而樸素樸素貝葉斯分類是貝葉斯分類中最簡單,也是常見的一種分類方法。在理解樸素貝葉斯之前,需要對兩個數...

機器學習之樸素貝葉斯

樸素貝葉斯 1 樸素貝葉斯 2 一 高斯樸素貝葉斯 gaussiannb實現了高斯樸素貝葉斯分類演算法,設假設特徵的可能性是高斯的 p x i y 12 y 2exp xi y 22 y 2 p x i y frac exp frac p xi y 2 y2 exp 2 y2 xi y 2 1 引數...