
基于Python数据挖掘的文本数据的分类与分析
3.选择分类算法(朴素贝叶斯(必做)、SVM/其他等),训练文本分类器,理解所选的分类算法的建模原理、实现过程和相关参数的含义;5.对测试集的分类结果利用正确率和召回率进行分析评价:计算每类正确率、召回率,计算总体正确率和召回率。2.语料库的数据预处理,包括文档建模,如去噪,分词,建立数据字典,使用词袋模型或主题模型表达文档等;3.测试集文档数:>=50000 篇;4.分组完成实验,组员数量=10
·
目录
- 数据获取 2
- 数据预处理 2
- 建立词典 4
- 生成词向量 6
- 贝叶斯分类器 7
- SVM 10
- 逻辑回归 12
- 实验总结与反思 14
实验一 文本数据的分类与分析
【实验目的】
1.掌握数据预处理的方法,对训练集数据进行预处理;
2.掌握文本建模的方法,对语料库的文档进行建模;
3.掌握分类算法的原理,基于有监督的机器学习方法,训练文本分类器;
4.利用学习的文本分类器,对未知文本进行分类判别;
5.掌握评价分类器性能的评估方法。
【实验类型】
数据挖掘算法的设计与编程实现。
【实验要求】
1.文本类别数:>=10 类;
2.训练集文档数:>=50000 篇;每类平均 5000 篇。
3.测试集文档数:>=50000 篇;每类平均 5000 篇。
4.分组完成实验,组员数量<=3,个人实现可以获得实验加分。
【实验内容】
利用分类算法实现对文本的数据挖掘,主要包括:
1.语料库的构建,主要包括利用爬虫收集 Web 文档等;
2.语料库的数据预处理,包括文档建模,如去噪,分词,建立数据字典,使用词袋模型或主题模型表达文档等;
注:使用主题模型,如 LDA 可以获得实验加分;
3.选择分类算法(朴素贝叶斯(必做)、SVM/其他等),训练文本分类器,理解所选的分类算法的建模原理、实现过程和相关参数的含义;
4.对测试集的文本进行分类
5.对测试集的分类结果利用正确率和召回率进行分析评价:计算每类正确率、召回率,计算总体正确率和召回率。
【实验分析与总结】
"""
SVM建模与评价
"""
import pickle
import time
import numpy as np
import pandas as pd
from scipy.sparse import load_npz
from sklearn import metrics
from sklearn.svm import SVC
class_list = {'财经': 'Economics', '房产': 'House', '社会': 'Society', '时尚': 'Fashion', '教育': 'Education',
'科技': 'Technology', '时政': 'Politics', '体育': 'PE', '游戏': 'Game', '娱乐': 'Entertainment'}
coo_test = load_npz('coo_test.npz')
# print(coo_test)
coo_train = load_npz('coo_train.npz')
# print(coo_train)
class_arr = np.array([int(i / 5000) for i in range(50000)])
model = SVC(kernel='rbf', C=6, gamma=0.001)
start = time.time()
model.fit(coo_train.tocsr(), class_arr)
end = time.time()
print('Train time: %s Seconds' % (end - start))
start = time.time()
pre = model.predict(coo_test.tocsr())
end = time.time()
print('Test time: %s Seconds' % (end - start))
print(pre)
with open('pkls/svm_pre.pkl', 'wb') as f:
pickle.dump(pre, f)
# with open('pkls/svm_pre.pkl', 'rb') as f:
# pre = pickle.load(f)
# 混淆矩阵
C = metrics.confusion_matrix(class_arr, pre)
confusion_matrix = pd.DataFrame(C, columns=class_list.values(),
index=class_list.values())
confusion_matrix.to_csv('Confusion_Matrix_SVM.csv')
with open('pkls/confusion_matrix_svm.pkl', 'wb') as f:
pickle.dump(C, f)
print("混淆矩阵为:\n", C)
# 计算准确率(accuracy)
accuracy = metrics.accuracy_score(class_arr, pre)
print("准确率为:\n", accuracy)
# 计算精确率(precision)
precision = metrics.precision_score(class_arr, pre, average=None)
print("精确率为:\n", precision)
print('均值{:.4f}\n'.format(sum(precision) / 10))
# 计算召回率(recall)
recall = metrics.recall_score(class_arr, pre, average=None)
print("召回率为:\n", recall)
print('均值{:.4f}\n'.format(sum(recall) / 10))
# 计算F1-score(F1-score)
F1_score = metrics.f1_score(class_arr, pre, average=None)
print("F1值为:\n", F1_score)
cp = metrics.classification_report(class_arr, pre)
print("---------------分类报告---------------\n", cp)
更多推荐
所有评论(0)