為了加深對機器學習演算法的理解,以及熟悉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 引數...