由於自己太懶,不想看太長的**,所以我就呼叫的sklearn庫的樸素貝葉斯類,資料集選擇的是這個部落格中自己構造的資料集,該部落格自己實現了樸素貝葉斯類,想自己編寫乙個樸素貝葉斯函式的讀者可以參考這個部落格。
下面是用sklearn庫實現樸素貝葉斯分類:
from functools import
reduce
import numpy as np
from sklearn.*****_bayes import gaussiannb
defloaddataset()
:"""構造資料集"""
wordslist =[[
'週六'
,'公司'
,'一起'
,'聚餐'
,'時間'],
['優惠'
,'返利'
,'打折'
,'優惠'
,'金融'
,'理財'],
['喜歡'
,'機器學習'
,'一起'
,'研究'
,'歡迎'
,'貝葉斯'
,'演算法'
,'公式'],
['公司'
,'發票'
,'稅點'
,'優惠'
,'增值稅'
,'打折'],
['北京'
,'今天'
,'霧霾'
,'不宜'
,'外出'
,'時間'
,'在家'
,'討論'
,'學習'],
['招聘'
,'兼職'
,'日薪'
,'保險'
,'返利']]
classvec =[0
,1,0
,1,0
,1]return wordslist, classvec
defdoc2veclist
(doclist)
:"""將資料集合並"""
a =list
(reduce
(lambda x, y:
set(x)
|set
(y), doclist)
)# 相同的詞合併成為乙個詞,最終的結果是乙個列表,裡面沒有重複的詞
# reduce()方法:以本題為例,函式是set(x)|set(y),則要迭代的從doclist中取出兩個詞進行函式計算
return a
allwordsvec = doc2veclist(doclist)
# 形成乙個沒有重複的詞的詞彙表
print
(allwordsvec)
# ['研究', '增值稅', '在家', '不宜', '兼職', '外出', '貝葉斯', '喜歡', '週六', '發票', '今天', '稅點', '公司', '一起', '保險', '演算法', '日薪', '公式', '北京', '理財', '打折', '霧霾', '招聘', '金融', '時間', '歡迎', '討論', '返利', '機器學習', '聚餐', '優惠', '學習']
defword2vec
(veclist, inputwords)
:"""詞袋模型"""
resultvec =[0
]*len(veclist)
for word in inputwords:
if word in veclist:
resultvec[veclist.index(word)]+=
1else
:print
('沒有發現此單詞'
)return np.array(resultvec)
# 將上面形成的詞彙表轉換成數字,以第乙個資料為例,['週六', '公司', '一起', '聚餐', '時間'],
#『週六』出現在詞彙表的第9個位置,所以詞彙表的第9個位置記為1,
#同理,『公司』,『一起』,『聚餐』,『時間』出現的位置都記為1,其餘位置記為0,
#最終形式是[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 1, 0, 0, 0, 0, 1, 0, 0]
trainmat =
list
(map
(lambda x: word2vec(allwordsvec, x)
, doclist)
)print
(trainmat)
# [array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
#0, 0, 1, 0, 0, 0, 0, 1, 0, 0]), array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
#0, 1, 0, 0, 0, 1, 0, 0, 2, 0]), array([1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0,
#0, 0, 0, 1, 0, 0, 1, 0, 0, 0]), array([0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
# 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]), array([0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
#0, 0, 1, 0, 1, 0, 0, 0, 0, 1]), array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,
#1, 0, 0, 0, 0, 1, 0, 0, 0, 0])]
# 由於特徵都是列表形式,所以要轉換成矩陣的形式
classvec = np.array(classvec)
print
(classvec.shape)
# (6,) 標籤是一維
trainmat = np.array(trainmat)
print
(trainmat.shape)
# (6, 32) 特徵是二維
clf = gaussiannb(
)
clf.fit(trainmat, classvec)
# 訓練模型
testwords =
['公司'
,'聚餐'
,'討論'
,'貝葉斯'
]# 測試資料
testvec = word2vec(allwordsvec, testwords)
# 轉換成詞袋模型
testvec = np.array(testvec)
testvec = np.expand_dims(testvec, axis=0)
# 把特徵轉換為二維,shape=(1,32)
clf.predict(testvec)
# 輸出0,分類正確
Sklearn實現樸素貝葉斯
sklearn 實現樸素貝葉斯 在scikit learn中,一共有3個樸素貝葉斯的分類演算法類。分別是gaussiannb,multinomialnb和bernoullinb。其中gaussiannb就是先驗為高斯分布的樸素貝葉斯,multinomialnb就是先驗為多項式分布的樸素貝葉斯,而be...
Sklearn實現樸素貝葉斯
sklearn 實現樸素貝葉斯 在scikit learn中,一共有3個樸素貝葉斯的分類演算法類。分別是gaussiannb,multinomialnb和bernoullinb。其中gaussiannb就是先驗為高斯分布的樸素貝葉斯,multinomialnb就是先驗為多項式分布的樸素貝葉斯,而be...
樸素貝葉斯基礎概念 例項
假設乙個鎮里有60 男性和40 女性。女性穿褲子的人數和穿裙子的人數一樣,所有男性都穿褲子 正常男性都穿褲子 乙個人在遠處隨機看到了乙個穿褲子的人,這個人是男生還是女生?為什麼?a 數女性事件,b 是穿的是褲子的事件 p a 是看到是女性的概率,在這裡是40 p a 是看到是男性的概率,在這裡是60...