芝麻HTTP:记scikit-learn贝叶斯文本分类的坑
2018-06-18 01:00:09来源:未知 阅读 ()
基本步骤:
1、训练素材分类:
我是参考官方的目录结构:
每个目录中放对应的文本,一个txt文件一篇对应的文章:就像下面这样
需要注意的是所有素材比例请保持在相同的比例(根据训练结果酌情调整、不可比例过于悬殊、容易造成过拟合(通俗点就是大部分文章都给你分到素材最多的那个类别去了))
废话不多说直接上代码吧(测试代码的丑得一逼;将就着看看吧)
需要一个小工具: pip install chinese-tokenizer
这是训练器:
import re import jieba import json from io import BytesIO from chinese_tokenizer.tokenizer import Tokenizer from sklearn.datasets import load_files from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import MultinomialNB from sklearn.externals import joblib jie_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 re import jieba import json from sklearn.datasets import load_files from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer from 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··
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python 之 前端开发(HTTP协议、head标签、img标签、a标签、 2019-08-13
- Python Http-server 使用 2019-07-24
- HTTP: Request中的post和get区别 2019-07-24
- RobotFramework + HTTP接口自动化实现 2019-07-24
- 解决pyhton aiohttp ssl:None [[SSL: CERTIFICATE_VERIFY_FA 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash