今天學習了有關貝葉斯分類器的基本知識
例:用sklearn中的樸素貝葉斯庫函數(shù)做分類
代碼如下:
import numpy as np
#導入高斯樸素貝葉斯
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
x = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
y = np.array([1,1,1,2,2,2])
clf =GaussianNB()
clf.fit(x,y)
GaussianNB(priors = None)
print(clf.predict([[-0.8,-1]]))
輸出:[1]
例:用貝葉斯做拼寫檢查
代碼如下:
import re
import collections
alphabet = 'abcdefghijklmnopqrstuvwxyz'
# 把語料中的單詞全部抽取出來, 轉成小寫, 并且去除單詞中間的特殊符號
def words(text): return re.findall('[a-z]+', text.lower())
# 返回詞頻
def train(features):
model = collections.defaultdict(lambda: 1)#給沒有出現(xiàn)但要返回的詞默認lambda: 1
for f in features:
model[f] += 1
return model
NWORDS = train(words(open('./data/big.txt').read()))#字典格式{單詞:單詞頻率}
#返回所有與單詞 w 編輯距離為 1 的集合
def edits1(word):
n = len(word)
return set([word[0:i]+word[i+1:] for i in range(n)] + # 刪除
[word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] + # 交換
[word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet] + # 替換
[word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet]) # 插入
#返回所有與單詞 w 編輯距離為 2 的集合
#在這些編輯距離小于2的詞中間, 只把那些正確的詞作為候選詞
def edits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1))
def known(words): return set(w for w in words if w in NWORDS)
#如果known(set)非空, candidate 就會選取這個集合, 而不繼續(xù)計算后面的
def correct(word):
candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
return max(candidates, key=lambda w: NWORDS[w])
correct('laste')
輸出:last
例:用貝葉斯算法做新聞分類。
算法涉及:1、用jieba分詞器;2、TF_IDF提取關鍵字;3、LDA主題模型;4、使用貝葉斯進行分類。
代碼鏈接如下:使用貝葉斯做新聞分類