朴素貝葉斯
朴素貝葉斯是經典的機器學習算法之一,也是為數不多的基於概率論的分類算法。在機器學習分類算法中,朴素貝葉斯和其他絕多大的分類算法都不同,比如決策樹,KNN,邏輯回歸,支持向量機等,他們都是判別方法,也就是直接學習出特征輸出Y和特征X之間的關系,要么是決策函數,要么是條件分布。但是朴素貝葉斯卻是生成方法,這種算法簡單,也易於實現。
1.基本概念
朴素貝葉斯:貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。而朴素貝葉斯分類時貝葉斯分類中最簡單,也是最常見的一種分類方法。
貝葉斯公式:

先驗概率P(X):先驗概率是指根據以往經驗和分析得到的概率。
后驗概率P(Y|X):事情已經發生,要求這件事情發生的原因是由某個因素引起的可能性的大小,后驗分布P(Y|X)表示事件X已經發生的前提下,事件Y發生的概率,叫做事件X發生下事件Y的條件概率。
后驗概率P(X|Y):在已知Y發生后X的條件概率,也由於知道Y的取值而被稱為X的后驗概率。
朴素:朴素貝葉斯算法是假設各個特征之間相互獨立,也是朴素這詞的意思,那么貝葉斯公式中的P(X|Y)可寫成:
朴素貝葉斯公式:
2,貝葉斯算法簡介
貝葉斯方法源域它生前為解決一個“逆概”問題寫的一篇文章。其要解決的問題:
正向概率:假設袋子里面有N個白球,M個黑球,你伸手進去摸一把,摸出黑球的概率是多大
逆向概率:如果我們事先不知道袋子里面黑白球的比例,而是閉着眼睛摸出一個(或者好幾個)球,觀察這些取出來的球的顏色之后,那么我們可以就此對袋子里面的黑白球的比例做出什么樣的推測。
那么什么是貝葉斯呢?
- 1,現實世界本身就是不確定的,人類的觀察能力是有局限性的
- 2,我們日常觀察到的只是事物表明上的結果,因此我們需要提供一個猜測
NaiveBayes算法,又稱朴素貝葉斯算法。朴素:特征條件獨立;貝葉斯:基於貝葉斯定理。屬於監督學習的生成模型,實現監督,沒有迭代,並有堅實的數學理論(即貝葉斯定理)作為支撐。在大量樣本下會有較好的表現,不適用於輸入向量的特征條件有關聯的場景。
朴素貝葉斯會單獨考量每一維獨立特征被分類的條件概率,進而綜合這些概率並對其所在的特征向量做出分類預測。因此,朴素貝葉斯的基本數據假設是:各個維度上的特征被分類的條件概率之間是相互獨立的。它經常被用於文本分類中,包括互聯網新聞的分類,垃圾郵件的篩選。
朴素貝葉斯分類時一種十分簡單的分類算法,叫他朴素貝葉斯分類時因為這種方法的思想真的很朴素,朴素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,即認為此待分類項屬於哪個類別。
3.貝葉斯算法的推導過程
聯合概率:表示兩件事共同發生(數學概念上的交集)的概念,A和B的聯合概率表示為
P(AnB)。
根據條件概率的定義,在事件B發生的條件下事件A發生的概率為:
同樣地,在事件A發生的條件下事件B發生的概率為:
結合這兩個方程式,我們可以得到:
這個引理有時稱為概率乘法規則。上式兩邊同時除以P(A),若P(A)是非零的,我們可以得到貝葉斯定理:
事件X在事件Y發生的條件下的概率,與事件Y在事件X發生的條件下的概率是不一樣的;然而這兩者是有確定關系的,貝葉斯定理就是這種關系的陳述。

4.朴素貝葉斯分類的優缺點
優點:
(1) 算法邏輯簡單,易於實現
(2)分類過程中時空開銷小
缺點:
理論上,朴素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因為朴素貝葉斯模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。
而在屬性相關性較小時,朴素貝葉斯性能最為良好。對於這一點,有半朴素貝葉斯之類的算法通過考慮部分關聯性適度改進。
5.代碼實現
import pandas as pd
import numpy as np
import time
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB, BernoulliNB, MultinomialNB
from sklearn.metrics import precision_score, recall_score
from sklearn.metrics import f1_score
data = np.load('datapca.npz')
word_vector = data['word_vectors']
label = data['label']
X_train, X_test, y_train, y_test = train_test_split(word_vector,label, test_size=0.8, random_state=int(time.time()))
gnb = GaussianNB()
gnb.fit(
X_train,
y_train
)
y_pred = gnb.predict(X_test)
y_pred.shape
y_test.shape
y_test[0]
right=0
for i in range(len(y_pred)):
if(y_pred[i]==y_test[i]):
right+=1
print("accuracy:%f"%(right/len(y_pred)))
print("precision:%f"%(precision_score(y_test, y_pred)))
print("recall:%f"%(recall_score(y_test, y_pred)))
print("f1:%f"%(f1_score(y_test, y_pred)))
6.數據
鏈接:https://pan.baidu.com/s/1fmccMOFenxeWJtSE_GB4nw?pwd=6666
提取碼:6666
降維前 accuracy:0.553063 降維后accuracy:0.917209
precision:0.953216 precision:0.979962
recall:0.507788 recall:0.923435
f1:0.662602 f1:0.950859
參考文章:
1.[Python機器學習筆記:朴素貝葉斯算法 - 戰爭熱誠 - 博客園 (cnblogs.com)](https://www.cnblogs.com/wj-1314/p/10560870.html#:~:text=Python機器學習筆記:朴素貝葉斯算法. 朴素貝葉斯是經典的機器學習算法之一,也是為數不多的基於概率論的分類算法。.,對於大多數的分類算法,在所有的機器學習分類算法中,朴素貝葉斯和其他絕大多數的分類算法都不同。. 比如決策樹,KNN,邏輯回歸,支持向量機等,他們都是判別方法,也就是直接學習出特征輸出Y和特征X之間的關系,要么是決策函數,要么是條件分布。. 但是朴素貝葉斯卻是生成方法,該算法原理簡單,也易於實現。.)
2.帶你理解朴素貝葉斯分類算法 - 憶臻的文章 - 知乎 https://zhuanlan.zhihu.com/p/262621511. 1.