高斯樸素貝葉斯

2021-10-25 07:12:18 字數 3666 閱讀 7091

在前面的幾篇部落格中,對樸素貝葉斯的理論知識進行了乙個學習與總結,接下來希望對sklearn庫中的樸素貝葉斯分類器作進一步的學習和說明。

*****_bayes.gaussiannb(priors=none, var_smoothing=1e-09)
包含兩個引數:

① prior:表示類的先驗概率(即,沒有條件下的p(y))。若指定,則不根據資料調整;若不指定,則根據資料計算先驗。

② var_smoothing:通常使用預設值1e-09。

高斯樸素貝葉斯,是假設p(xixi

​|y)服從高斯分布(即正態分佈),估計每個特徵下每個類別上的條件概率。

對於每個特徵下的取值,高斯樸素貝葉斯有公式如下:

p(xixi

​|y) = 12π

σy

2\over}

2πσy2​

​1​exp(-(xi

−μy)

22σy

2\over

2σy2​(

xi​−

μy​)

2​)σ

\sigma

σ表示方差;μ

\muμ表示均值

以最大化p(xixi

​|y)為目標,高斯樸素貝葉斯會求解出公式中的σ

y\sigma_y

σy​和μ

y\mu_y

μy​,之後再代入x

ix_i

xi​的值,就可以得到乙個p(xixi

​|y)的概率取值。

呼叫演算法庫實現

匯入相應的包

from sklearn.*****_bayes import gaussiannb  # 匯入高斯貝葉斯

from sklearn.datasets import load_digits # 匯入資料集

from sklearn.model_selection import train_test_split # 用於對資料集劃分

資料集

此處選擇的是手寫字型資料集,該資料集包含1797個0-9(每個數字樣本的標籤分別是0-9中的乙個)的手寫數字資料,每個數字由8*8(每個數字樣本有64個特徵)大小的矩陣構成,矩陣中值的範圍是0-16,代表顏色的深度。

digits = load_digits(

)x = digits.data # 樣本

y = digits.target # 標籤

print

(digits.data.shape)

# 樣本個數及特徵個數

print

(numpy.unique(digits.target)

)# 類別

輸出結果:

(

1797,64

)# 1797個樣本,每個樣本有64個特徵值[0

1234

5678

9]# 有0-9 十個類別

完整**
from sklearn.*****_bayes import gaussiannb

from sklearn.datasets import load_digits

from sklearn.model_selection import train_test_split

import numpy

# 64個特徵,多分類問題,類別是10個

# 1. 載入資料集

digits = load_digits(

)x = digits.data # 樣本

y = digits.target # 標籤

# 2. 劃分資料集

x_trainer, x_test, y_trainer, y_test = train_test_split(x, y, test_size=

0.3)

# 3. 呼叫gaussiannb

gnb = gaussiannb(

).fit(x_trainer, y_trainer)

# 4. 檢視**結果

# 4.1 檢視**精確性

gnb_score = gnb.score(x_test, y_test)

# 返回**的精確性accuracy

print

("score:"

, gnb_score)

# 4.1 檢視**結果(對應輸出每乙個類別下的概率)

gnb_prob = gnb.predict_proba(x_test)

# 0-9中概率最大的標籤是樣本的標籤

print

("predict_proba:"

, gnb_prob)

輸出結果:

score: 0.8388888888888889

predict_proba: [

[7.83962044e-247

1.24834410e-038

4.88551557e-076..

.0.00000000e+000

1.71525576e-078

4.93278158e-017][

0.00000000e+000

5.77193722e-030

2.12056943e-092..

.1.00000000e+000

4.12882737e-079

2.94249055e-046][

0.00000000e+000

0.00000000e+000

9.99998601e-001..

.0.00000000e+000

1.93369671e-027

5.40946810e-074].

..[0.00000000e+000

7.78083591e-034

2.72609234e-107..

.0.00000000e+000

3.33923163e-036

1.11247866e-132][

0.00000000e+000

6.24849452e-006

3.75282150e-063..

.0.00000000e+000

8.87371042e-033

9.99993752e-001][

1.00000000e+000

4.82157559e-070

3.46377218e-147..

.0.00000000e+000

2.71845551e-128

1.68767694e-079

]]

結果分析:

在前面的部落格中,根據分析每乙個樣本對應每乙個類別上的概率總和應該為1,此處可以通過**驗證下:

對第一行(第乙個樣本)的所有列(每個類別下的概率)求和:

print(gnb_prob[1, :].sum(

))# 每一行和為1

輸出結果:

1.0

樸素貝葉斯

樸素貝葉斯演算法是一種基於概率統計的分類方法,它主要利用貝葉斯公式對樣本事件求概率,通過概率進行分類。以下先對貝葉斯公式做個了解。對於事件a b,若p b 0,則事件a在事件b發生的條件下發生的概率為 p a b p a b p b 將條件概率稍作轉化即可得到貝葉斯公式如下 p a b p b a ...

樸素貝葉斯

1.準備資料 從文字中構建詞向量 2.訓練演算法 從詞向量計算概率 3.測試演算法 儲存為 bayes.py 檔案 參考 coding utf 8 from numpy import 文字轉化為詞向量 def loaddataset postinglist my dog has flea probl...

樸素貝葉斯

機器學習是將資料轉化為決策面的過程 scikit learn縮寫為sklearn 訓練乙個分類器,學習之後 其處理的準確性 def nbaccuracy features train,labels train,features test,labels test from sklearn.bayes ...