統計學習方法學習筆記3——樸素貝葉斯模型
樸素貝葉斯屬于:概率模型、參數化模型、和生成模型
目錄
1.樸素貝葉斯基本方法
2.后驗概率最大化的含義
3.樸素貝葉斯算法:
樸素貝葉斯python實現4.1:
class Navie_Bayes():
def __init__(self, x_train, y_train, x_test, y_test=None):
self.x, self.y, self.xs, self.ys = x_train, y_train, x_test, y_test
def fit(self):
a, b = self.x.shape
tmp_x_0, tmp_y_0, tmp_x_1, tmp_y_1 = [], [], [], []
for i in range(a):
if self.y[i] == 1:
tmp_x_0.append(self.x[i])
tmp_y_0.append(self.y[i])
else:
tmp_x_1.append(self.x[i])
tmp_y_1.append(self.y[i])
# 求先驗概率
p_ck1 = len(tmp_y_0) / a
p_ck0 = 1 - p_ck1
# 求y=1條件概率
tmp_1, tmp_2, tmp_3 = [], [], []
tmp_S, tmp_M, tmp_L = [], [], []
for j in range(len(tmp_y_0)):
if int(tmp_x_0[j][0]) == 1:
tmp_1.append(tmp_x_0[j])
elif int(tmp_x_0[j][0]) == 2:
tmp_2.append(tmp_x_0[j])
else:
tmp_3.append(tmp_x_0[j])
for v in range(len(tmp_y_0)):
if tmp_x_0[v][1] == 'S':
tmp_S.append(tmp_x_0[v])
elif tmp_x_0[v][1] == 'M':
tmp_M.append(tmp_x_0[v])
else:
tmp_L.append(tmp_x_0[v])
# 求y=-1條件概率
tmp_1_, tmp_2_, tmp_3_ = [], [], []
tmp_S_, tmp_M_, tmp_L_ = [], [], []
for j_ in range(a-len(tmp_y_0)):
if int(tmp_x_1[j_][0]) == 1:
tmp_1_.append(tmp_x_1[j_])
elif int(tmp_x_1[j_][0]) == 2:
tmp_2_.append(tmp_x_1[j_])
else:
tmp_3_.append(tmp_x_1[j_])
for v_ in range(a-len(tmp_y_0)):
if tmp_x_1[v_][1] == 'S':
tmp_S_.append(tmp_x_1[v_])
elif tmp_x_1[v_][1] == 'M':
tmp_M_.append(tmp_x_1[v_])
else:
tmp_L_.append(tmp_x_1[v_])
# 后驗概率
p_y1 = p_ck1 * (len(tmp_2)/len(tmp_y_0)) * (len(tmp_S)/len(tmp_y_0))
p_y2 = p_ck0 * (len(tmp_2_)/(a-len(tmp_y_0))) * (len(tmp_S_)/(a-len(tmp_y_0)))
if p_y1 > p_y2:
print('預測結果為:',1)
return 1
else:
print('預測結果為:',-1)
return -1
def main():
x_train = np.array([[1, 'S'], [1, 'M'], [1, 'M'], [1, 'S'], [1, 'S'], [2, 'S'], [2, 'M'], [2, 'M'],
[2, 'L'], [2, 'L'], [3, 'L'], [3, 'M'], [3, 'M'], [3, 'L'], [3, 'L']])
y_train = np.array([-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1])
x_test = np.array([2, 'S'])
navie_bayes = Navie_Bayes(x_train, y_train, x_test)
navie_bayes.fit()
結果:
樸素貝葉斯sklearn實現作業4.1
# 令s=1,m=2, l=3
x_train = np.array([[1, 1], [1, 2], [1, 2], [1, 1], [1, 1], [2, 1], [2, 2], [2, 2],
[2, 3], [2, 3], [3, 3], [3, 2], [3, 2], [3, 3], [3, 3]])
y_train = np.array([-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1])
x_test = np.array([2, 2])
navie_bayes_gauss = GaussianNB()
navie_bayes_multi = MultinomialNB(alpha=2.0, class_prior=None, fit_prior=True)
navie_bayes_bou = BernoulliNB(alpha=2.0,binarize = 3.0,fit_prior=True)
tt = [navie_bayes_gauss, navie_bayes_multi, navie_bayes_bou]
tt_str = ['GaussianNB', 'BernoulliNB','MultinomialNB']
for items, name in zip(tt, tt_str):
items.fit(x_train, y_train)
xx = items.predict_proba(x_test.reshape(1, -1))
print('%s 模型的預測概率為:'%name, xx)
貝葉斯的優缺點:
由于貝葉斯是對條件概率分布的條件獨立性假設,那么在數據集比較小的時候它會有比較好的效果,但是當數據集比較大的時候,誤差會隨意數據集的增大而增大,這個時候它的效果可能還不如邏輯回歸等模型。
在小型數據集上,樸素貝葉斯更容易產生偏差,這可以防止其擬合噪聲。
智能推薦
《統計學習方法》代碼全解析——第四部分樸素貝葉斯
1.樸素貝葉斯法是典型的生成學習方法。生成方法由訓練數據學習聯合概率分布 (,) P(X,Y) ,然后求得后驗概率分布 (|) P(Y|X) 。具體來說,利用訓練數據學習 (|) P(X|Y) 和 () P(Y) 的估計,得到聯合概率分布: (,)=()(|) 概率估計方法可以是極大似然估計或貝葉斯估計。 2.樸素貝葉斯法的基本假設是條件獨立性 這是一個較強的假...
(每天一點點)統計學習方法——樸素貝葉斯法
1、概率論基礎 貝葉斯原理就是求解后驗概率。如果已知p(x|c)要求p(c|x),我們可以使用貝葉斯公式進行求解。 貝葉斯公式: ps:圖片出處 樸素貝葉斯分類器中的樸素指的是特征樣本之間相互獨立。 2、舉個栗子 已在線社區留言板為例子,我們要屏蔽侮辱性言論。對此問題我們建立兩個類別:侮辱性和非侮辱性。我們先定一個詞典,比如[dog,love,cute…],然后把一條留言分成詞向量[...
統計學習方法第四章(樸素貝葉斯)及Python實現及sklearn實現
1原理 樸素貝葉斯 貝葉斯:根據貝葉斯定理p(y|x) = p(y)p(x|y)/p(x).選擇p(y|x) 最大的類別作為x的類別。可知樸素貝葉斯是監督學習的生成模型(由聯合概率分布得到概率分布)。選擇p(y|x) 最大的類別時,分母相同,所以簡化為比較 p(y)p(x|y)的大小。 樸素: 計算p(x|y)的概率,假設x是n維向量,每維向量有sn個取值可能,則就要計算類別*(sn的n次方)次。...
統計學習方法第四章:樸素貝葉斯法(naive Bayes),貝葉斯估計及python實現
統計學習方法第二章:感知機(perceptron)算法及python實現 統計學習方法第三章:k近鄰法(k-NN),kd樹及python實現 統計學習方法第四章:樸素貝葉斯法(naive Bayes),貝葉斯估計及python實現 統計學習方法第五章:決策樹(decision tree),CART算法,剪枝及python實現 統計學習方法第五章:決策樹(decision tree),ID3算法,C...
樸素貝葉斯算法學習筆記
計算公式 缺陷:受樣本個數限制,若某個屬性值在訓練集中沒有與某個同類同時出現過,如P清脆|是=P (敲聲=清脆|好瓜=是)=0/8=0,則連乘公式 h (好瓜=是)則必為零,其他屬性取任意值都不能改變這一結論。 修正方法:拉普拉斯平滑處理 算法處理過程 原始的樸素貝葉斯只能處理離散數據,連續數據使用高斯樸素貝葉斯(Gaussian Naive Bayes)完成分類任務。 當處理***連續數據***...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...