sklearn——樸素貝葉斯文字分類5
阿新 • • 發佈:2019-01-01
在這次的貝葉斯試驗中,用到了交叉驗證,就是假如把資料集分成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萬個特徵就可以啦