sklearn——樸素貝葉斯文字分類6
阿新 • • 發佈:2019-02-12
使用了countVectorizer和TfidfVectorizer兩個統計統計模型,來比較使用哪個模型效果更好(其實都知道tfidf比較好,數學之美中比較好講解),我們將通過影象可以看出兩個統計模型的效果,並且使用了交叉驗證
#使用交叉驗證 from sklearn.datasets import fetch_20newsgroups from sklearn.cross_validation import cross_val_score from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfVectorizer 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,180000,10000)) k_count_score=[] k_tfidf_score=[] for i in k: #tfidf分類器 tfidf=TfidfVectorizer(analyzer='word',stop_words='english' ,max_features=i) X_tfidf=tfidf.fit_transform(X) mnb_tfidf=MultinomialNB() scores_tfidf=cross_val_score(mnb_tfidf,X_tfidf,Y,cv=10,scoring='accuracy') score_tfidf=scores_tfidf.mean() k_tfidf_score.append(score_tfidf) #tf分類器 count=CountVectorizer(analyzer='word',stop_words='english' ,max_features=i) X_count=count.fit_transform(X) mnb_count=MultinomialNB() scores_count=cross_val_score(mnb_count,X_count,Y,cv=10,scoring='accuracy') score_count=scores_count.mean() print(score_count) d=() d=X_count.get_shape() print("維數",d[1]) k_count_score.append(score_count) plt.xlabel('dimension') plt.ylabel('accuracy') plt.plot(k,k_count_score) plt.plot(k,k_tfidf_score,color='red') plt.legend() plt.show()
結果:
紅線是tfidf
藍線是tf
橫座標是選擇輸入的詞的維度
可以看出使用tfidf只要選擇40000時效果最好,增加之後會出現過擬合
tf則選擇100000時最佳