sklearn——朴素贝叶斯文本分类6
2017-02-21 16:48
260 查看
使用了countVectorizer和TfidfVectorizer两个统计统计模型,来比较使用哪个模型效果更好(其实都知道tfidf比较好,数学之美中比较好讲解),我们将通过图像可以看出两个统计模型的效果,并且使用了交叉验证
结果:
红线是tfidf
蓝线是tf
横坐标是选择输入的词的维度
可以看出使用tfidf只要选择40000时效果最好,增加之后会出现过拟合
tf则选择100000时最佳
#使用交叉验证 from sklearn.datasets import fetch_20newsgroups from sklearn.cross_validation import cross_val_score from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfVectorizer import matplotlib.pyplot as plt from sklearn.naive_bayes import MultinomialNB news=fetch_20newsgroups(subset='all') X,Y=news.data,news.target k=list(range(10000,180000,10000)) k_count_score=[] k_tfidf_score=[] for i in k: #tfidf分类器 tfidf=TfidfVectorizer(analyzer='word',stop_words='english' ,max_features=i) X_tfidf=tfidf.fit_transform(X) mnb_tfidf=MultinomialNB() scores_tfidf=cross_val_score(mnb_tfidf,X_tfidf,Y,cv=10,scoring='accuracy') score_tfidf=scores_tfidf.mean() k_tfidf_score.append(score_tfidf) #tf分类器 count=CountVectorizer(analyzer='word',stop_words='english' ,max_features=i) X_count=count.fit_transform(X) mnb_count=MultinomialNB() scores_count=cross_val_score(mnb_count,X_count,Y,cv=10,scoring='accuracy') score_count=scores_count.mean() print(score_count) d=() d=X_count.get_shape() print("维数",d[1]) k_count_score.append(score_count) plt.xlabel('dimension') plt.ylabel('accuracy') plt.plot(k,k_count_score) plt.plot(k,k_tfidf_score,color='red') plt.legend() plt.show()
结果:
红线是tfidf
蓝线是tf
横坐标是选择输入的词的维度
可以看出使用tfidf只要选择40000时效果最好,增加之后会出现过拟合
tf则选择100000时最佳
相关文章推荐
- 使用sklearn实现朴素贝叶斯文本分类
- 深入朴素贝叶斯与文本分类
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
- 朴素贝叶斯文本分类
- sklearn——朴素贝叶斯文本分类3
- sklearn——朴素贝叶斯文本分类5
- 朴素贝叶斯文本分类简单介绍
- 朴素贝叶斯算法 - 文本分类
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
- 用朴素贝叶斯进行文本分类(上)
- 朴素贝叶斯文本分类(python代码实现)
- sklearn之朴素贝叶斯实战
- [置顶] 《机器学习实战》学习笔记(三)之朴素贝叶斯(下)过滤垃圾邮件、获取区域倾向、搜狗新闻分类 (sklearn)
- 用朴素贝叶斯分类算法做中文文本分类
- 【Kaggle笔记】新闻文本分类(朴素贝叶斯)
- python 利用sklearn中的朴素贝叶斯作文本文类代码
- 朴素贝叶斯进行文本分类——python
- 朴素贝叶斯 sklearn
- NLP系列(2)_用朴素贝叶斯进行文本分类(上)
- 利用Python实现朴素贝叶斯文本分类