Machine Learning學習筆記(六)樸素貝葉斯法(Naive Bayes)

樸素貝葉斯法(Naive Bayes)

Naive Bayes的算法原理簡單,不多加贅述。

參考博文:https://blog.csdn.net/AMDS123/article/details/70173402

關鍵:假設特徵獨立。


 

樸素貝葉斯代碼實現

見博文:https://blog.csdn.net/lsldd/article/details/41542107

from matplotlib import pyplot
import scipy as sp
import numpy as np
from sklearn.datasets import load_files
from sklearn.cross_validation import train_test_split
from sklearn.feature_extraction.text import  CountVectorizer
from sklearn.feature_extraction.text import  TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import classification_report
 
'''
movie_reviews = load_files('data')
#保存
sp.save('movie_data.npy', movie_reviews.data)
sp.save('movie_target.npy', movie_reviews.target)
'''
 
#讀取
movie_data   = sp.load('movie_data.npy')
movie_target = sp.load('movie_target.npy')
x = movie_data
y = movie_target
 
#BOOL型特徵下的向量空間模型,注意,測試樣本調用的是transform接口
count_vec = TfidfVectorizer(binary = False, decode_error = 'ignore',\
                            stop_words = 'english')
 
 
#加載數據集,切分數據集80%訓練,20%測試
x_train, x_test, y_train, y_test\
    = train_test_split(movie_data, movie_target, test_size = 0.2)
x_train = count_vec.fit_transform(x_train)
x_test  = count_vec.transform(x_test)
 
 
#調用MultinomialNB分類器
clf = MultinomialNB().fit(x_train, y_train)
doc_class_predicted = clf.predict(x_test)
    
#print(doc_class_predicted)
#print(y)
print(np.mean(doc_class_predicted == y_test))
 
#準確率與召回率
precision, recall, thresholds = precision_recall_curve(y_test, clf.predict(x_test))
answer = clf.predict_proba(x_test)[:,1]
report = answer > 0.5
print(classification_report(y_test, report, target_names = ['neg', 'pos']))

輸出結果如下所示:
             precision    recall  f1-score   support
        neg       0.78      0.87      0.83       135
        pos       0.87      0.77      0.82       145
avg / total     0.83      0.82      0.82       280
如果進行多次交叉檢驗,可以發現樸素貝葉斯分類器在這個數據集上能夠達到80%以上的準確率。如果你親自測試一下,會發現KNN分類器在該數據集上只能達到60%的準確率,相信你對樸素貝葉斯分類器應該能夠刮目相看了。而且要知道,情感分類這種帶有主觀色彩的分類準則,連人類都無法達到100%準確。

要注意的是,我們選用的樸素貝葉斯分類器類別:MultinomialNB,這個分類器以出現次數作爲特徵值,我們使用的TF-IDF也能符合這類分佈。

其他的樸素貝葉斯分類器如GaussianNB適用於高斯分佈(正態分佈)的特徵,而BernoulliNB適用於伯努利分佈(二值分佈)的特徵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章