芝麻HTTP:記scikit-learn貝葉斯文本分類的坑,scikit-learn貝葉斯

來源:互聯網
上載者:User

芝麻HTTP:記scikit-learn貝葉斯文本分類的坑,scikit-learn貝葉斯

基本步驟:

1、訓練素材分類:

我是參考官方的目錄結構:

每個目錄中放對應的文本,一個txt檔案一篇對應的文章:就像下面這樣

 

需要注意的是所有素材比例請保持在相同的比例(根據訓練結果酌情調整、不可比例過於懸殊、容易造成過擬合(通俗點就是大部分文章都給你分到素材最多的那個類別去了))

廢話不多說直接上代碼吧(測試代碼的醜得一逼;將就著看看吧)

需要一個小工具: pip install chinese-tokenizer

這是訓練器:

import reimport jiebaimport jsonfrom io import BytesIOfrom chinese_tokenizer.tokenizer import Tokenizerfrom sklearn.datasets import load_filesfrom sklearn.feature_extraction.text import CountVectorizer, TfidfTransformerfrom sklearn.model_selection import train_test_splitfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.externals import joblibjie_ba_tokenizer = Tokenizer().jie_ba_tokenizer# 載入資料集training_data = load_files('./data', encoding='utf-8')# x_train txt內容 y_train 是類別(正 負 中 )x_train, _, y_train, _ = train_test_split(training_data.data, training_data.target)print('開始建模.....')with open('training_data.target', 'w', encoding='utf-8') as f:    f.write(json.dumps(training_data.target_names))# tokenizer參數是用來對文本進行分詞的函數(就是上面我們結巴分詞)count_vect = CountVectorizer(tokenizer=jieba_tokenizer)tfidf_transformer = TfidfTransformer()X_train_counts = count_vect.fit_transform(x_train)X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)print('正在訓練分類器.....')# 多項式貝葉斯分類器訓練clf = MultinomialNB().fit(X_train_tfidf, y_train)# 儲存分類器(好在其它程式中使用)joblib.dump(clf, 'model.pkl')# 儲存向量化(坑在這兒!!需要使用和訓練器相同的 向量器 不然會報錯!!!!!! 提示 ValueError dimension mismatch··)joblib.dump(count_vect, 'count_vect')print("分類器的相關資訊:")print(clf)

下面是是使用訓練好的分類器分類文章:

需要分類的文章放在predict_data目錄中:照樣是一篇文章一個txt檔案

# -*- coding: utf-8 -*-# @Time    : 2017/8/23 18:02# @Author  : 哎喲臥槽# @Site    : # @File    : 貝葉斯分類器.py# @Software: PyCharm import reimport jiebaimport jsonfrom sklearn.datasets import load_filesfrom sklearn.feature_extraction.text import CountVectorizer, TfidfTransformerfrom sklearn.externals import joblib  # 載入分類器clf = joblib.load('model.pkl') count_vect = joblib.load('count_vect')testing_data = load_files('./predict_data', encoding='utf-8')target_names = json.loads(open('training_data.target', 'r', encoding='utf-8').read())#     # 字串處理tfidf_transformer = TfidfTransformer() X_new_counts = count_vect.transform(testing_data.data)X_new_tfidf = tfidf_transformer.fit_transform(X_new_counts)# 進行預測predicted = clf.predict(X_new_tfidf)for title, category in zip(testing_data.filenames, predicted):    print('%r => %s' % (title, target_names[category]))

這個樣子將訓練好的分類器在新的程式中使用時候 就不報錯: ValueError dimension mismatch··

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.