sklearn——樸素貝葉斯文字分類
阿新 • • 發佈:2019-01-01
在不去除停用詞的情況下用樸素貝進行文字分類
# 從sklearn.datasets裡匯入20類新聞文字資料抓取器。 from sklearn.datasets import fetch_20newsgroups # 從網際網路上即時下載新聞樣本,subset='all'引數代表下載全部近2萬條文字儲存在變數news中。 news = fetch_20newsgroups(subset='all') # 從sklearn.cross_validation匯入train_test_split模組用於分割資料集。 from sklearn.cross_validation import train_test_split # 對news中的資料data進行分割,25%的文字用作測試集;75%作為訓練集。 X_train, X_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25, random_state=33) # 從sklearn.feature_extraction.text裡匯入CountVectorizer from sklearn.feature_extraction.text import CountVectorizer # 採用預設的配置對CountVectorizer進行初始化(預設配置不去除英文停用詞),並且賦值給變數count_vec。 count_vec = CountVectorizer() # 只使用詞頻統計的方式將原始訓練和測試文字轉化為特徵向量。 #學習詞彙的詞典並返回文件矩陣。 X_count_train = count_vec.fit_transform(X_train) #不進行學習直接轉換文件document-term矩陣 X_count_test = count_vec.transform(X_test) # 從sklearn.naive_bayes裡匯入樸素貝葉斯分類器。 from sklearn.naive_bayes import MultinomialNB # 使用預設的配置對分類器進行初始化。 mnb_count = MultinomialNB() # 使用樸素貝葉斯分類器,對CountVectorizer(不去除停用詞)後的訓練樣本進行引數學習。 mnb_count.fit(X_count_train, y_train) # 輸出模型準確性結果。 print ('The accuracy of classifying 20newsgroups using Naive Bayes (CountVectorizer without filtering stopwords):', mnb_count.score(X_count_test, y_test)) # 將分類預測的結果儲存在變數y_count_predict中。 y_count_predict = mnb_count.predict(X_count_test) # 從sklearn.metrics 匯入 classification_report。 from sklearn.metrics import classification_report # 輸出更加詳細的其他評價分類效能的指標。 print (classification_report(y_test, y_count_predict, target_names = news.target_names))
結果: