本文是個人學習筆記,内容主要涉及MultinomialNB(Naive Bayes)對sklearn内置的fetch_20newsgroups——新聞資料抓取器從網際網路上即時下載下傳的新聞文本資料進行多類分類。
樸素貝葉斯模型被廣泛應用于網際網路新聞的分類、垃圾郵件的篩選等分類任務,它單獨考量每一次元特征被分類的條件機率,然後綜合這些機率對其所在的特征向量做出分類預測,即“假設各個次元上的特征被分類的條件機率之間是互相獨立的”,該假設使得模型預測需要估計的參數規模從指數數量級減少到線性數量級,極大地節約了計算時間和空間。該模型在訓練時沒考慮各個特征之間的聯系,對于資料特征關聯性較強的分類任務表現不好。
from sklearn.datasets import fetch_20newsgroups #fetch_20newsgroups是新聞資料抓取器
news=fetch_20newsgroups(subset='all') #fetch_20newsgroups即時從網際網路下載下傳資料
print(len(news.data))
print(news.data)
from distutils.version import LooseVersion as Version
from sklearn import __version__ as sklearn_version
from sklearn import datasets
if Version(sklearn_version) < '0.18':
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data, news.target, test_size=, random_state=)
from sklearn.feature_extraction.text import CountVectorizer
#特征抽取,将文本特征向量化
vec=CountVectorizer()
X_train=vec.fit_transform(X_train)
X_test=vec.transform(X_test)
from sklearn.naive_bayes import MultinomialNB
mnb=MultinomialNB()
mnb.fit(X_train,y_train)
y_predict=mnb.predict(X_test)
from sklearn.metrics import classification_report
print('The accuracy of Navie Bayes Classifier is',mnb.score(X_test,y_test))
print(classification_report(y_test,y_predict,target_names=news.target_names))