報告內(nèi)容僅供學(xué)習(xí)參考,請獨(dú)立完成作業(yè)和實(shí)驗喔~
一、報告摘要
1.1 實(shí)驗要求
(1)了解樸素貝葉斯與半樸素貝葉斯的區(qū)別與聯(lián)系,掌握高斯分布、多項式分布和伯努利分布的樸素貝葉斯計算方法。
(2)編程實(shí)現(xiàn)樸素貝葉斯分類器,基于多分類數(shù)據(jù)集,使用樸素貝葉斯分類器實(shí)現(xiàn)多分類預(yù)測,通過精確率、召回率和F1值度量模型性能。
1.2 實(shí)驗思路
\qquad 使用Python讀取數(shù)據(jù)集信息并生成對應(yīng)的樸素貝葉斯分類器,隨后使用生成的分類器實(shí)現(xiàn)多分類預(yù)測,并根據(jù)精確率、召回率和F1值度量模型性能。
1.3 實(shí)驗結(jié)論
\qquad 本實(shí)驗訓(xùn)練了一個高斯分布樸素貝葉斯分類器,并可獲得0.94以上的F1度量值,即可準(zhǔn)確的完成鳶尾花分類任務(wù)。
二、實(shí)驗內(nèi)容
2.1 方法介紹
(1)樸素貝葉斯
\qquad
樸素貝葉斯(Naive Bayes)是基于貝葉斯定理與特征獨(dú)立假設(shè)的分類方法。使用樸素貝葉斯方法時,首先基于訓(xùn)練數(shù)據(jù),基于特征條件獨(dú)立假設(shè)學(xué)習(xí)輸入與輸出的聯(lián)合概率分布;隨后對于給定的X,利用貝葉斯定理求解后驗概率最大的輸出標(biāo)簽。
樸素貝葉斯本質(zhì)屬于生成模型,學(xué)習(xí)生成數(shù)據(jù)的機(jī)制,也就是聯(lián)合概率分布。
(2)半樸素貝葉斯
\qquad
半樸素貝葉斯是適當(dāng)考慮一部分屬性之間的相互依賴信息,其中“獨(dú)依賴估計”(One-Dependent Estimator,簡稱ODE)是半樸素分類中最常用的一種策略。所謂“獨(dú)依賴估計”,也就是假設(shè)每個屬性在分類類別之外最多僅依賴于一個其他屬性。
\qquad
與基于特征的條件獨(dú)立性假設(shè)開展的樸素貝葉斯方法相比,其最大的區(qū)別就是半樸素貝葉斯算法放寬了條件獨(dú)立假設(shè)的限制,考慮部分屬性之間的相互依賴信息。但兩者有共同特點(diǎn):假設(shè)訓(xùn)練樣本所有屬性變量的值都已被觀測到,即訓(xùn)練樣本是完整的。
(3)高斯分布樸素貝葉斯計算方法
\qquad
使用條件:所有特征向量都是連續(xù)型特征變量且符合高斯分布。
\qquad
概率分布密度:
(4)多項式樸素貝葉斯計算方法
\qquad
使用條件:所有的特征變量都是離散型變量且符合多項式分布。
\qquad
概率分布密度:
(5)伯努利分布樸素貝葉斯計算方法
\qquad
使用條件:所有的特征變量都是離散型變量且符合伯努利分布。
\qquad
概率分布密度:
2.2 實(shí)驗細(xì)節(jié)
2.2.1 實(shí)驗環(huán)境
硬件環(huán)境:Intel? Core? i5-10300H CPU + 16G RAM
軟件環(huán)境:Windows 11 家庭中文版 + Python 3.8
2.2.2 實(shí)驗過程
(1)劃分?jǐn)?shù)據(jù)集
\qquad
按照實(shí)驗要求,本次數(shù)據(jù)集劃分采用隨機(jī)劃分80%數(shù)據(jù)用于訓(xùn)練,其余20%數(shù)據(jù)用于測試。使用sklearn庫的train_test_split()方法劃分?jǐn)?shù)據(jù),代碼如下:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
(2)訓(xùn)練樸素貝葉斯分類方法
\qquad
由于實(shí)驗數(shù)據(jù)中四個特征變量均為連續(xù)型特征變量,我們?nèi)绻枰褂酶咚狗植紭闼刎惾~斯的話,只需要驗證他是否符合高斯分布即可。這里使用Q-Q圖來驗證數(shù)據(jù)是否符合高斯分布,如果數(shù)據(jù)符合高斯分布,則該Q-Q圖趨近于落在y=x線上,繪制的代碼如下:
from scipy.stats import probplot
probplot(data,dist='norm',plot=plt)
plt.title('sepal length')
plt.show()
\qquad
繪制的到結(jié)果如下,依次為4個特征向量的Q-Q圖??梢钥闯?,4個特征向量整體趨勢大致符合高斯分布,可以嘗試使用高斯分布樸素貝葉斯分類方法。
\qquad 使用sklearn庫的GaussianNB()方法訓(xùn)練分類器,代碼如下:
clf = GaussianNB()
clf.fit(X_train, y_train)
(3)評價分類器
\qquad
使用精確率、召回率、F1度量值對分類器作為評價指標(biāo),使用sklearn庫中的accuracy_score()、precision_score()、recall_score()、f1_score()方法進(jìn)行計算,具體代碼如下:
y_pred = clf.predict(X_test)
print(precision_score(y_test, y_pred, average=None))
print(recall_score(y_test, y_pred, average=None))
print(f1_score(y_test, y_pred, average=None))
(4)使用分類器進(jìn)行預(yù)測
\qquad
我們選取測試集的最后一條數(shù)據(jù)進(jìn)行預(yù)測,觀察分類器計算得到的概率、分類結(jié)果與真實(shí)標(biāo)簽的內(nèi)容。具體代碼如下:
y_proba = clf.predict_proba(X_test[:1])
y_pred_num = clf.predict(X_test[:1])[0]
print("預(yù)測值:"+str(y_pred_num)+ " "+label[y_pred_num])
print("預(yù)計的概率值:", y_proba)
print("實(shí)際值:"+str(y_test[:1][0])+ " "+label[y_test[:1][0]])
\qquad
得到的預(yù)測結(jié)果如下圖所示,可以看出分類器成功完成分類預(yù)測。
2.2.3 實(shí)驗與理論內(nèi)容的不同點(diǎn)
\qquad
樸素貝葉斯分類器的計算方法不難,在代碼實(shí)現(xiàn)時,可以直接使用sklearn提供的GaussianNB()方法快速實(shí)現(xiàn)。
\qquad
GaussianNB()方法提供兩個參數(shù),分別為priors和var_smoothing,即先驗概率和所有特征的最大方差添加比例。var_smoothing作用是在估計方差時,為了追求估計的穩(wěn)定性,將所有特征的方差中最大的方差以var_smoothing給出的比例添加到估計的方差中,默認(rèn)為1e-9。
\qquad
其余一個不同是在數(shù)據(jù)的預(yù)處理上,由于數(shù)據(jù)集給出的原始數(shù)據(jù)集是將特征向量與標(biāo)簽同時給出,且標(biāo)簽為字符型的鳶尾花種類名,不方便后續(xù)操作。因此我們將數(shù)據(jù)預(yù)處理為X、y兩個數(shù)組,分別為特征向量和標(biāo)簽,同時將y中標(biāo)簽重新映射為整數(shù)編號,以方便后續(xù)處理,具體對照關(guān)系如下:
2.3 實(shí)驗數(shù)據(jù)介紹
\qquad
實(shí)驗數(shù)據(jù)為來自UCI的鳶尾花三分類數(shù)據(jù)集Iris Plants Database。
\qquad
數(shù)據(jù)集共包含150組數(shù)據(jù),分為3類,每類50組數(shù)據(jù)。每組數(shù)據(jù)包括4個參數(shù)和1個分類標(biāo)簽,4個參數(shù)分別為:萼片長度sepal length、萼片寬度sepal width、花瓣長度petal length、花瓣寬度petal width,單位均為厘米。分類標(biāo)簽共有三種,分別為Iris Setosa、Iris Versicolour和Iris Virginica。
\qquad
數(shù)據(jù)集格式如下圖所示:
\qquad
為方便后續(xù)使用,該數(shù)據(jù)集需要進(jìn)行特征向量與標(biāo)簽分割以及標(biāo)簽編號,具體處理方式在2.2.3部分已進(jìn)行介紹。
2.4 評價指標(biāo)介紹
\qquad
評價指標(biāo)選擇精確率P、召回率R、F1度量值F1,計算公式如下:
P
=
T
P
T
P
+
F
P
P=\frac{TP}{TP+FP}
P=TP+FPTP?
R
=
T
P
T
P
+
F
N
R=\frac{TP}{TP+FN}
R=TP+FNTP?
F
1
=
2
?
P
?
R
P
+
R
F1=\frac{2*P*R}{P+R}
F1=P+R2?P?R?
\qquad
具體代碼實(shí)現(xiàn)時,可以直接調(diào)用sklearn庫中的相應(yīng)方法進(jìn)行計算。
2.5 實(shí)驗結(jié)果分析
\qquad
根據(jù)計算,對于二分類數(shù)據(jù)集,可以得到如下結(jié)果:
三、總結(jié)及問題說明
\qquad
本次實(shí)驗的主要內(nèi)容為使用樸素貝葉斯分類鳶尾花三分類數(shù)據(jù)集,并計算生成模型的精確度Precision、召回率Recall和F1度量值,從而對得到的模型進(jìn)行評測,評價性能好壞。
\qquad
在本次實(shí)驗中,未遇到很難解決的問題,得到的分類模型性能較好,可以較準(zhǔn)確的完成鳶尾花的分類任務(wù)。文章來源:http://www.zghlxwxcb.cn/news/detail-490986.html
四、參考文獻(xiàn)
[1] 周志華. 機(jī)器學(xué)習(xí)[M]. 清華大學(xué)出版社, 2016.
[2] 樸素貝葉斯算法_經(jīng)典算法之樸素貝葉斯[EB/OL]. [2022-4-29]. https://blog.csdn.net/weixin_39637975/article/details/111373577.
[3] sklearn.naive_bayes.GaussianNB — scikit-learn 1.1.0 documentation[EB/OL]. [2022-4-29]. https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html.文章來源地址http://www.zghlxwxcb.cn/news/detail-490986.html
附錄:實(shí)驗代碼
import numpy as np
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
import random
label = ['Iris Setosa','Iris Versicolour','Iris Virginica']
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 使用高斯樸素貝葉斯進(jìn)行計算
clf = GaussianNB()
clf.fit(X_train, y_train)
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
# 評估
y_pred = clf.predict(X_test)
print(precision_score(y_test, y_pred, average=None))
print(recall_score(y_test, y_pred, average=None))
print(f1_score(y_test, y_pred, average=None))
# 預(yù)測
y_proba = clf.predict_proba(X_test[:1])
y_pred_num = clf.predict(X_test[:1])[0]
print("預(yù)測值:"+str(y_pred_num)+ " "+label[y_pred_num])
print("預(yù)計的概率值:", y_proba)
print("實(shí)際值:"+str(y_test[:1][0])+ " "+label[y_test[:1][0]])
到了這里,關(guān)于機(jī)器學(xué)習(xí)實(shí)驗 - 樸素貝葉斯分類器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!