2.樸素貝葉斯演算法
阿新 • • 發佈:2018-12-16
樸素貝葉斯程式碼(原理很簡單) 直接上程式碼
import numpy as np from collections import Counter,defaultdict class Nbayes: def __init__(self): self.p_prior={} self.p_condiction={} def fit(self,x_train,y_train): #首先求出y_train的長度 N=len(y_train)#N=y_train.shape[0] c_y=Counter(y_train) for key,var in c_y.items(): self.p_prior[key]=var/N#求出各個y所佔的概率 #接下來求條件概率 for d in range(x.train.shape[0]): xd_y=default(int) vector=x_train[:,d] for x,y in zip(vextor,y_train): xd_y[(x,y)]+=1 for key,var in xd_y.items(): self.p_condiction[(d,key[0],key[1])]=var/c_y(key[1]) return #寫測試 def predict(self,x_test): p=defaultdict() for y,y1 in self.p_prior.items(): temp=y1 for d,xd in enumerate(x):#列舉型別 temp*=slef.p_condiction[(d,xd,y)] # 分母P(X)相同,故直接儲存聯合概率分佈即可 p[y]=temp return max(p,key=p.get) if __name__ == '__main__': data = np.array([[1, 0, -1], [1, 1, -1], [1, 1, 1], [1, 0, 1], [1, 0, -1], [2, 0, -1], [2, 1, -1], [2, 1, 1], [2, 2, 1], [2, 2, 1], [3, 2, 1], [3, 1, 1], [3, 1, 1], [3, 2, 1], [3, 2, -1]]) X_data = data[:, :-1] y_data = data[:, -1] clf = NBayes() clf.fit(X_data, y_data) print(clf.p_prior, '\n')##每個特徵的概率 print(clf.p_condition,'\n') print(clf.predict(np.array([2, 0])))
寫完了,這就是朴樹貝葉斯