在前面的幾篇部落格中,對樸素貝葉斯的理論知識進行了乙個學習與總結,接下來希望對sklearn庫中的樸素貝葉斯分類器作進一步的學習和說明。
*****_bayes.gaussiannb(priors=none, var_smoothing=1e-09)
包含兩個引數:
① prior:表示類的先驗概率(即,沒有條件下的p(y))。若指定,則不根據資料調整;若不指定,則根據資料計算先驗。
② var_smoothing:通常使用預設值1e-09。
高斯樸素貝葉斯,是假設p(xixi
|y)服從高斯分布(即正態分佈),估計每個特徵下每個類別上的條件概率。
對於每個特徵下的取值,高斯樸素貝葉斯有公式如下:
p(xixi以最大化p(xixi|y) = 12π
σy
2\over}
2πσy2
1exp(-(xi
−μy)
22σy
2\over
2σy2(
xi−
μy)
2)σ
\sigma
σ表示方差;μ
\muμ表示均值
|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 ...