朴素贝叶斯实战:新闻文本分类

Posted Python大数据与人工智能

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了朴素贝叶斯实战:新闻文本分类相关的知识,希望对你有一定的参考价值。

击上方
“蓝色字”
可关注我们!


今日分享:基于贝叶斯模型的新闻文本分类


一:流程

1、从网站下载获取数据集,该数据集也是由sklearn提供的,不过由于数据集较大(其实也就15M左右),因此需要在使用时从网站直接下载(如若下载不成功,请在本QQ学习群获取)

2、数据集划分

3、进行特征工程,对新闻文本数据进行 TF-IDF 提取

4、实例化贝叶斯估计器,训练,预测


二:数据集介绍


该新闻数据集大约包含11314个新闻文本,共20大类


(单个新闻文本示例)


朴素贝叶斯实战:新闻文本分类

(类别编码及实际类别描述)


三:代码演示


#导入相关库
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report


def naba():
   '''朴素贝叶斯新闻文本分类'''
   
   #获取数据集 网络下载获取 参数表明将训练集和测试集的数据全部下载
   news = fetch_20newsgroups(subset='all')
   
   #划分数据集
   x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25)
   
   #对文本进行特征提取
   tf = TfidfVectorizer()
   
   x_train = tf.fit_transform(x_train)
   
#     print(tf.get_feature_names())
   
   x_test = tf.transform(x_test)
   
   #贝叶斯实例化
   mlt = MultinomialNB(alpha=1.0)
   
   mlt.fit(x_train,y_train)
   
   y_predict = mlt.predict(x_test)
   
   print('预测的文章类别为:',y_predict)
   
   print('准确率为:',mlt.score(x_test,y_test))
   
   print('每个类别的精确率和召回率:',
         classification_report(y_test,y_predict,target_names = news.target_names))
   
   
if __name__ == '__main__':
   naba()


输出结果

预测的文章类别为:
[16  6  4 ... 13 14 14]

准确率为:
0.8539898132427843

每个类别的精确率和召回率:
                          precision    recall  f1-score   support

            alt.atheism       0.84      0.78      0.81       179
          comp.graphics       0.94      0.73      0.82       271
comp.os.ms-windows.misc       0.87      0.83      0.85       250
comp.sys.ibm.pc.hardware       0.79      0.77      0.78       254
  comp.sys.mac.hardware       0.87      0.87      0.87       234
         comp.windows.x       0.92      0.91      0.92       239
           misc.forsale       0.92      0.72      0.81       248
              rec.autos       0.91      0.90      0.90       245
        rec.motorcycles       0.91      0.96      0.93       248
     rec.sport.baseball       0.96      0.95      0.96       243
       rec.sport.hockey       0.93      0.98      0.96       253
              sci.crypt       0.81      0.98      0.88       251
        sci.electronics       0.85      0.85      0.85       237
                sci.med       0.96      0.90      0.93       247
              sci.space       0.88      0.95      0.92       263
 soc.religion.christian       0.56      0.98      0.71       241
     talk.politics.guns       0.73      0.99      0.84       222
  talk.politics.mideast       0.92      0.97      0.95       237
     talk.politics.misc       0.97      0.60      0.74       192
     talk.religion.misc       0.93      0.16      0.27       158

            avg / total       0.87      0.85      0.85      4712









或在后台回复:加群

以上是关于朴素贝叶斯实战:新闻文本分类的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战教程:朴素贝叶斯实战篇之新浪新闻分类

机器学习—朴素贝叶斯

机器学习基础——朴素贝叶斯做文本分类代码实战

《机器学习实战》基于朴素贝叶斯分类算法构建文本分类器的Python实现

python实现随机森林逻辑回归和朴素贝叶斯的新闻文本分类

NLP实战系列朴素贝叶斯文本分类实战