20newsgroups数据集是用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。
对于数据集的使用,我们直接使用20newsgroups,在运行程序时,pycharm会提供一个下载数据的位置,点击下载即可。(下载的数据导入方法在下一个图文消息中)
from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import fetch_20newsgroups #导入划分数据集方法 from sklearn.model_selection import train_test_split #导入标准化方法 from sklearn.preprocessing import StandardScaler #导入特征抽取方法 from sklearn.feature_extraction.text import TfidfVectorizer #导入精确率和召回率 from sklearn.metrics import classification_report import pandas as pd def bayes(): """ 通过朴素贝叶斯进行文本分类 :return:None """ 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) #朴素贝叶斯算法的实现 mn = MultinomialNB(alpha=1.0) print(x_train.toarray()) mn.fit(x_train,y_train) y_predict = mn.predict(x_test) print("预测文章类别:",y_predict) #得出准确率 print("准确率为:",mn.score(x_test,y_test)) print("每一个类别的精确率和召回率:" , classification_report(y_test,y_predict,target_names=news.target_names)) return None if __name__ == "__main__": bayes()
代码流程:
1,划分数据集(将数据划分为训练集和测试集)
2,对数据进行特征抽取(方便后期算法的分类)
3,朴素贝叶斯算法的实现