今天我們要來用python實作Naïve bayes,首先老樣子的第一步,先載入資料集,這次的資料集一樣是iris資料集。將特徵(feature)設為x、標籤(label)設為y。
from sklearn import datasets
data = datasets.load_iris()
x = data.data
y = data.target
下一步使用train_test_split套件,將iris資料集分為訓練集以及測試集,筆者這邊的訓練集與測試集比例為7:3。讀者們可以根據自己的喜好或是多次試驗去調整比例。
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 42)
接著利用sklearn套件中的naive_bayes函式庫來建構Naïve bayes模型,筆者這邊使用的是GaussianNB,其他還有像是MultinomialNB、BernoulliNB許多其他的Naïve bayes模型可以做選擇。讀者們可以嘗試看看其他的Naïve bayes模型,看看會不會有更好的結果。
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(x_train, y_train)
接下來我們可以自定義一個函式來看看模型的準確度,內容是簡單的對比預測結果和實際是是否相同。
def accuracy(real, predictions):
n = 0
for i, p in enumerate(predictions):
if (real[i] == p):
n += 1
return n / len(real)
最後利用predict函式獲得預測結果過後,將結果丟進剛剛定義的函式之中獲得準確度,筆者這邊所獲得的準確度為97.78%左右。
predictions = model.predict(x_test)
print(f"Accuracy: {accuracy(y_test, predictions)}")