python機器學習之樸素貝葉斯分類器

樸素貝葉斯通常是用於文本分類,通過計算每種類別的概率,其中尋找最大的概率所在的類別,即爲結果分類。

樸素的意思爲假定文本屬性之間是相互獨立的。

有時需要用到拉布拉斯平滑係數。

優點:對缺失值不敏感,速度快。

缺點:由於假設樣本特徵相互獨立,所以樣本屬性關聯強的時候,分類效果不好。

下面以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

結果爲:

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