樸素貝葉斯——分類模型
阿新 • • 發佈:2021-09-04
樸素貝葉斯的簡介,和基本使用sample。
樸素貝葉斯——分類模型
樸素貝葉斯:首先貝葉斯推論就是通過結論推條件。專業點就是先假定先驗概率,然後通過後驗概率來判斷先驗概率的正確性,若不準確,則修正。(感覺好像邏輯迴歸的反向傳播)
然後樸素的意思是:各個因素相互獨立。互不干擾
優點
樸素貝葉斯發源於古典數學理論,有穩定的分類效率。
對缺失資料不太敏感,演算法也比較簡單,常用於文字分類
分類準確度高,速度快
缺點
由於使用了樣本屬性獨立性的假設,所以如果樣本屬性有關聯時其效果不好
鳶尾花
from sklearn.naive_bayes import GaussianNB from sklearn import datasets from sklearn.model_selection import train_test_split iris = datasets.load_iris() feature = iris.data target = iris.target g = GaussianNB() g.fit(x_train,y_train) g.score(x_test,y_test) #0.8333333333333334 # 檢視第一條測試資料的分類 g.predict(x_test[1].reshape((1,-1))) tmp = g.predict_proba(x_test[10].reshape(1,-1)) #獲得預測值,求和=1,注意這裡沒有取log import numpy as np data= np.around(tmp, 2) #保留兩位小數 data
手寫數字
import sklearn.datasets as datasets import numpy as np digist = datasets.load_digits() feature= digist.data target = digist.target x_train,x_test,y_train,y_test = train_test_split(feature,target,test_size=0.1,random_state=2020) #訓練模型 g = GaussianNB() g.fit(x_train,y_train) g.score(x_test,y_test)#0.8333333333333334 y_pred = g.predict(x_test) print('模型分類結果:',y_pred[:10]) print('真實的分類結果:',y_test[:10]) #看各種分類的概率 其中4的概率也是最大的 tmp = g.predict_proba(x_test[3].reshape(1,-1)) data= np.around(tmp, 2) data # g.predict_log_proba(x_test[3].reshape(1,-1)) 這個是把概率取log了,就不會發生很大的精度誤差了
資料使用- 實戰:資料使用fetch_20newsgroups中的資料,包含了20個主題的18000個新聞組的帖子
- 什麼是TF-IDF
- 在資訊檢索中,tf-idf(詞頻-逆文件頻率)是一種統計方法,用以評估一個單詞在一個文件集合或語料庫中的重要程度。
- 如果某個詞或短語在一篇文章中出現的頻率高(即TF高),並且在其他文章中很少出現(即IDF高),則認為此詞或者短語具有很好的類別區分能力,適合用來分類。
import sklearn.datasets as datasets from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import MultinomialNB news = datasets.fetch_20newsgroups(data_home='./') #載入20類新聞資料 feature = news.data#返回的是列表,列表中為一篇篇的文章 target = news.target#返回的ndarray,儲存的是每一篇文章的類別 print(feature[1]) t = TfidfVectorizer() feature_t = t.fit_transform(feature) #提取Tf_idf x_train,x_test,y_train,y_test = train_test_split(feature_t,target,test_size=0.01,random_state=2020) m = MultinomialNB() m.fit(x_train,y_train) m.score(x_test,y_test) #0.868421052631579 m.predict(x_test) m.predict_log_proba(x_test[10])