1. 程式人生 > >sklearn——樸素貝葉斯文字分類5

sklearn——樸素貝葉斯文字分類5

在這次的貝葉斯試驗中,用到了交叉驗證,就是假如把資料集分成10份,每次取其中的一份作為test資料,會得到10個測試的準確率,我們可以求10份的平均值,作為這一次的準確率。

當我們求出測試集的矩陣大小為(18846, 173452),我們可以看出17萬個詞,其實在選擇特徵時用不了這麼多,接下來我們看一下選擇特徵維數為多少時沒會出現好的結果。

程式碼:

from sklearn.datasets import fetch_20newsgroups
from sklearn.cross_validation import cross_val_score
from sklearn.feature_extraction.text import CountVectorizer
import matplotlib.pyplot as plt
from sklearn.naive_bayes import MultinomialNB
news=fetch_20newsgroups(subset='all')
X,Y=news.data,news.target
k=list(range(10000,170000,10000))
k_score=[]
for i in k:
    count=CountVectorizer(analyzer='word',stop_words='english' ,max_features=i)
    X_count=count.fit_transform(X)
    mnb_count=MultinomialNB()
#     mnb_count.fit(X_count,Y)
    scores=cross_val_score(mnb_count,X_count,Y,cv=10,scoring='accuracy')
    score=scores.mean()
    print(score)
    print("維數",X_count.get_shape())
    k_score.append(score)
plt.plot(k,k_score)
plt.show()

結果:


看圖我們可以看出在選擇特徵為10萬時,準確率是最高的,之後就會下降,說明出現了過擬合的現象。所以我們選擇10萬個特徵就可以啦