scikit-learn包中提供了三種常用的樸素貝葉斯演算法:
下文實驗中用的是高斯樸素貝葉斯,主要應用於數值型特徵;
另外兩種為多項式樸素貝葉斯、伯努利樸素貝葉斯,主要應用於文字分類。
關於樸素貝葉斯在文字分類的應用,可閱讀參考
手寫完成樸素貝葉斯分類器進行文字分類
使用sklearn自帶的樸素貝葉斯分類器進行文字分類
from sklearn.*****_bayes import gaussiannb
from sklearn.*****_bayes import multinomialnb
from sklearn.*****_bayes import bernoullinb
詳見原理篇
import *****_bayes as na
import numpy as np
path=r'e:\pyproject\data\eg4.1.xlsx'
data=na.load_excel(path)
data=np.array(data)
x_data=data[:,
:-1]
y_data=data[:,
-1]x=np.array([2
,'s'])
#呼叫自己編寫的庫
clf=na.*****bayes(lambda_=1)
clf.fit(x_data,y_data)
result1=clf.predict(x)
print
('result1: '
,result1)
#呼叫sklearn庫
from sklearn.*****_bayes import gaussiannb
clf2=gaussiannb(
)clf2.fit(x_data,y_data)
result2=clf2.predict(x)
print
('result2: '
,result2)
結果展示
呼叫筆者自己編寫的庫可正確輸出結果 ,而呼叫sklearn庫中的樸素貝葉斯演算法報錯typeerror。
sklearn庫中的高斯樸素貝葉斯演算法只能對數值型資料進行處理,不能處理字元型資料。
import numpy as np
data = np.array([[
1,0,
-1],
[1,1
,-1]
,[1,
1,1]
,[1,
0,1]
,[1,
0,-1
],[2
,0,-
1],[
2,1,
-1],
[2,1
,1],
[2,2
,1],
[2,2
,1],
[3,2
,1],
[3,1
,1],
[3,1
,1],
[3,2
,1],
[3,2
,-1]
])x_data=data[:,
:-1]
y_data=data[:,
-1]x=np.array([2
,0])
#呼叫自己編寫的庫
import *****_bayes as na
clf1=na.*****bayes(lambda_=1)
clf1.fit(x_data,y_data)
result1=clf1.predict(x)
print
('result1: '
,result1)
#呼叫sklearn庫
from sklearn.*****_bayes import gaussiannb
clf2=gaussiannb(
)clf2.fit(x_data,y_data)
result2=clf2.predict(x.reshape(1,
-1))
print
('result2: '
,result2)
結果展示將x (2
)x^x(2)
的字元型資料換成數值型資料後,二者都可輸出正確結果。
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris(
)x_data=iris.data
y_data=iris.target
x_train,x_test,y_train,y_test=train_test_split(x_data,y_data,test_size=
0.3)
#測試集佔總資料集的30%
#呼叫自己編寫的庫
import *****_bayes as na
clf1=na.*****bayes(lambda_=1)
clf1.fit(x_data,y_data)
result1=clf1.predict(x_test)
print
('result1: '
,result1)
#呼叫sklearn庫
from sklearn.*****_bayes import gaussiannb
clf2=gaussiannb(
)clf2.fit(x_train,y_train)
result2=clf2.predict(x_test)
print
('result2: '
,result2)
#計算**準確率
count1=
0for left,right in
zip(result1,y_test)
:if left==right:
count1+=
1print
('accuracy1: '
,count1/
len(y_test)
)count2=
0for left,right in
zip(result2,y_test)
:if left==right:
count2+=
1print
('accuracy2: '
,count2/
len(y_test)
)
結果展示 樸素貝葉斯法
貝葉斯理論體系都是建立在那個眾所周知的貝葉斯公式上,貝葉斯原理簡單,一些名家所言,裡面蘊含著深奧的道理,樸素貝葉斯法是一種簡單的分類方法,在機器學習領域廣泛應用。在網上經常看到各個版本的貝葉斯分類器的實現,不過總是感覺由以下兩點沒有陳述清楚,其一,針對連續型變數的處理沒有給出具體的顯式表示式 其二,...
樸素貝葉斯法
樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法。簡單來說,樸素貝葉斯分類器假設樣本每個特徵與其他特徵都不相關。舉個例子,如果一種水果具有紅,圓,直徑大概4英吋等特徵,該水果可以被判定為是蘋果。儘管這些特徵相互依賴或者有些特徵由其他特徵決定,然而樸素貝葉斯分類器認為這些屬性在判定該水果是否為...
樸素貝葉斯法
文章記錄的內容是參加datawhale的組隊學習統計學習方法 第二版 習題解答過程中的筆記與查缺補漏!參考解答位址 樸素貝葉斯法。解答思路 先回顧一下用極大似然法估計樸素貝葉斯引數的過程。既然是估計引數,那麼先明確一下樸素貝葉斯中有哪些引數 p y c k 和 p x j x j mid y c k...