1. 程式人生 > >Scikit-Learn機器學習之監督學習模型案例集-新聞/郵件文字內容分類(樸素貝葉斯演算法模型)

Scikit-Learn機器學習之監督學習模型案例集-新聞/郵件文字內容分類(樸素貝葉斯演算法模型)

最簡單的辦法

下載'20news-bydate.pkz', 放到C:\\Users\[Current user]\scikit_learn_data 下邊就行.

2.1. 手動下載 檔案

    存放到scikit_learn_data/20news_home/下 解壓開

2.2 改site-package/sklearn/datasets/twenty_newsgroups.py裡的函式: download_20newsgroups

 註釋掉下邊程式碼:執行自動合併成 20news-bydate_py3.pkz

# logger.info("Downloading dataset from %s (14 MB)", ARCHIVE.url)
# archive_path = _fetch_remote(ARCHIVE, dirname=target_dir)
#
# logger.debug("Decompressing %s", archive_path)
# tarfile.open(archive_path, "r:gz").extractall(path=target_dir)
# os.remove(archive_path)

from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')

# 檢視資料規模和細節
print(len(news.data))

# 從 sklearn.cross_validation 中匯入 train_test_split 用於資料分割
from sklearn.model_selection import train_test_split
# 從使用 train_test_split,利用隨機種子 random_state 取樣 25% 的資料作為測試資料集
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 裡選擇匯入特徵值向量轉化模組 CounterVectorizer
from sklearn.feature_extraction.text import CountVectorizer

# 建立 特徵值向量轉化模組物件
vec = CountVectorizer()
# 標準化訓練資料集
X_train = vec.fit_transform(X_train)
# 標準化測試資料集
X_test = vec.transform(X_test)

# 從sklearn.naive_bayes裡選擇匯入 MultinomialNB
from sklearn.naive_bayes import MultinomialNB

# 使用樸素貝葉斯分類器物件
mnb = MultinomialNB()
# 模型訓練
mnb.fit(X_train, y_train)

score=mnb.score(X_test,y_test)
print(score)

# 匯入模型評估模組
from sklearn import metrics
result = mnb.predict(X_test)
from sklearn.metrics import classification_report
report=classification_report(y_test,result,target_names=news.target_names)
print(report)

# 建立兩個文章中出現的詞或短語
docs_new = ['God is love', 'OpenGL on thr GPU is fast']
# 特徵值向量化轉換
X_new_counts = vec.transform(docs_new)
# 全文檢索
predict = mnb.predict(X_new_counts)
# 迴圈輸出詞語或斷句出現在的分類中
for index in predict:
    print(news.target_names[index])