樸素貝葉斯通常是用於文本分類,通過計算每種類別的概率,其中尋找最大的概率所在的類別,即爲結果分類。
樸素的意思爲假定文本屬性之間是相互獨立的。
有時需要用到拉布拉斯平滑係數。
優點:對缺失值不敏感,速度快。
缺點:由於假設樣本特徵相互獨立,所以樣本屬性關聯強的時候,分類效果不好。
下面以20條新聞爲例:
首先引入類
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
然後定義函數:
def nb_news():
#樸素貝葉斯對新聞進行分類
#1 獲取數據
news=fetch_20newsgroups(subset="all")
# 2.劃分數據集
x_train,x_test,y_train,y_test=train_test_split(news.data,news.target)
# 3.特徵工程:tfidf
transfer=TfidfVectorizer()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test) #此處若用fit_transform,會報維度不匹配的錯誤
# 4.樸素貝葉斯
estimator=MultinomialNB()
estimator.fit(x_train,y_train)
# 5.模型評估
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比對真實值和預測值:\n", y_test == y_predict)
# 2.計算準確率
score = estimator.score(x_test, y_test)
print("準確率爲:\n", score)
return None
結果爲: