贝叶斯算法进行文档分类

from time import time
from sklearn.datasets import load_files

print("加载训练集 ...")
t=time()
news_train=load_files(r'C:\Users\EDZ\PycharmProjects\379\train')#读入内存
print("统计:文档数:{0} ,分类数:{1} ".format(len(news_train.data),len(news_train.target_names)))
print("{0} 秒完成".format(time()-t))

#查看第一篇文档所属类别名称
news_train.target_names[news_train.target[0]]

 

#将文档转为TF-IDF表达的权重信息构成的向量
from sklearn.feature_extraction.text import TfidfVectorizer

print("将训练集转换成向量 ...")
t=time()
vectorizer=TfidfVectorizer(encoding='latin-1')
#TfidfVectotizer 类是用来把所有文档转换为矩阵,该矩阵每行都代表一个文档,
#一行中的每个元素代表一个对应的词语的重要性,词语的重要由TF-IDF来表示。
X_train=vectorizer.fit_transform((d for d in news_train.data))
#fit()先完成语料库分析、提取词典等操作,transform()完成把文档转换为向量的操作
print("样本数:%d,特征数:%d"%X_train.shape)
print("样本[{0}]的非0特征个数:{1}".format(news_train.filenames[0],X_train[0].getnnz()))
#X_train[0].getnnz()获取非0元素的个数

print("加载测试集...")
t=time()
news_test=load_files(r"C:\Users\EDZ\PycharmProjects\379\test")
print("统计:文档数:{0} ,分类数:{1} ".format(len(news_test.data),len(news_test.target_names)))
print("{0} 秒完成".format(time()-t))

X_test=vectorizer.transform((d for d in news_test.data))
#vectorizer 变量是处理训练数据集时用到的向量化的类的实例,
#此处只需要调用 transform ()进行TF-IDF 数值计算即可,不需要再调用 fit ()进行语料库分析
y_test=news_test.target
print("样本数:%d,特征数:%d"%X_test.shape)
print("样本[{0}]的非0特征个数:{1}".format(news_test.filenames[0],X_test[0].getnnz()))
print("{0}秒完成".format(time()-t))

 

 

#模型训练
from sklearn.naive_bayes import MultinomialNB

print("训练模型...".format(time()-t))
t=time()
y_train=news_train.target
clf=MultinomialNB(alpha=0.0001)
#alpha 表示平滑参数,其值越小,越容易造过拟合,其值太大,越容易造成欠拟合
clf.fit(X_train,y_train)
train_score=clf.score(X_train,y_train)
print("训练集得分:{0}".format(train_score))
print("{0}秒完成".format(time()-t))

 

pred=clf.predict(X_test)

from sklearn.metrics import classification_report
print("分类报告:")
print(clf)
print(classification_report(y_test,pred,target_names=news_test.target_names))
#生成准确率、召回率、F1分数清单

 

 

from sklearn.metrics import confusion_matrix#混淆矩阵

cm=confusion_matrix(y_test,pred)
print("混淆矩阵:")
print(cm)

 

#混淆矩阵可视化
import matplotlib.pyplot as plt

def Show_confusion_matrix(cm):
    plt.figure(figsize=(8,8),dpi=144)
    plt.title("Confusion matrix of the classifier")
    ax=plt.gca()#Get Current Axes  获得当前的Axes对象ax
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color ('none') 
    ax.spines['bottom'].set_color ('none') 
    ax.spines['left'].set_color ('none') 
    ax.xaxis.set_ticks_position('none')
    ax.yaxis.set_ticks_position('none')
    ax.set_xticklabels([])
    ax.set_yticklabels([])
    plt.matshow(cm,fignum=1,cmap='gray')
    #把矩阵或者数组绘制成图像的函数  cmap代表一种颜色映射方式
    plt.colorbar();

Show_confusion_matrix(cm)
#除对角线外,其他地方颜色越浅,说明此处错误越多

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值