樸素貝葉斯法(二) Python實現篇

2021-09-25 23:33:55 字數 3493 閱讀 9748

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...