参考
https://blog.csdn.net/qq_35082030/article/details/70211552
fetch_20newsgroups是sklearn中内置的一个数据集。案例是一个新闻标题分类,整个过程概括起来分为以下几步
- 数据采集
- 特征提取
- 模型训练
- 模型评估
函数原型
##函数原型是这样的。 ''' fetch_20newsgroups(data_home=None,subset='train',categories=None,shuffle=True,random_state=42,remove=(),download_if_missing=True) ''' ''' data_home指的是数据集的地址,如果默认的话,所有的数据都会在'~/scikit_learn_data'文件夹下. subset就是train,test,all三种可选,分别对应训练集、测试集和所有样本。 categories:是指类别,如果指定类别,就会只提取出目标类,如果是默认,则是提取所有类别出来。 shuffle:是否打乱样本顺序,如果是相互独立的话。 random_state:打乱顺序的随机种子 remove:是一个元组,用来去除一些停用词的,例如标题引用之类的。 download_if_missing: 如果数据缺失,是否去下载。 '''
数据采集
from sklearn.datasets import fetch_20newsgroups categories = ['alt.atheism', 'soc.religion.christian', 'comp.graphics', 'sci.med'] twenty_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42)
注:这里根据上面的函数原型可以得知,获取的是训练集
twenty_train.data是一个list类型,每一个元素是str类型,也就是一篇文章。
twenty_train.target则是它的标签。
提取特征
''' 这是开始提取特征,这里的特征是词频统计。 ''' from sklearn.feature_extraction.text import CountVectorizer count_vect = CountVectorizer() X_train_counts = count_vect.fit_transform(twenty_train.data) ''' 这是开始提取特征,这里的特征是TFIDF特征。 ''' from sklearn.feature_extraction.text import TfidfTransformer tfidf_transformer = TfidfTransformer() X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
训练模型
这里我们使用朴素贝叶斯来进行训练,而且使用的是默认值,官网上面有很多参数可以调节这个算法。
''' 使用朴素贝叶斯分类,并做出简单的预测 ''' from sklearn.naive_bayes import MultinomialNB #这是进行训练的过程。 clf = MultinomialNB().fit(X_train_tfidf, twenty_train.target) docs_new = ['God is love', 'OpenGL on the GPU is fast'] X_new_counts = count_vect.transform(docs_new) X_new_tfidf = tfidf_transformer.transform(X_new_counts) #重要的一行在这里,这是进行预测的过程。 predicted = clf.predict(X_new_tfidf) for doc, category in zip(docs_new, predicted): print('%r => %s' % (doc, twenty_train.target_names[category]))