分类:贝叶斯分类之新闻组数据组学习(查看数据类型的方法)(环境:Pycharm)

时间:2021-05-04 16:34:58   收藏:0   阅读:0

1、查看数据类型:
type(数据)(在下面的探究中会标注出来)
2、初步探究(重点是机器学习模型只能处理数值数据,所以新闻样本集里的每一个文本样本都要转为TF-IDF向量。)
from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer news=fetch_20newsgroups() print(news.data[0]) #输出news.data数据里的第一行数据内容 print(type(news.data[0]))#查看news.data数据的类型,查看第一行数据内容就行 vectorizer=TfidfVectorizer() vdata=vectorizer.fit_transform(news.data) print(vdata.shape) #11314个样本转为TF-IDF向量 print(vdata.nnz) #非零元素数量
注:新闻样本集里的一个文本样本大多是几百个字符,转为TF-IDF向量后,特征维超过13万个,而每个样本的非零特征维平均只有158个,可见这个数据集是非常稀疏的,适用于先验分布为多项式分布的朴素贝叶斯分类模型MultinomialNB
(在Scikit-learn朴素贝叶斯模块naive_bayes中,一共有三个朴素贝叶斯分类模型类,其中GaussianNB是先验分布为高斯分布的朴素贝叶斯,MultinomialNB是先验分布为多项式分布的朴素贝叶斯,BernoulliNB是先验分布为伯努利分布的朴素贝叶斯)

3、数据集整体再探究
from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer #TF-IDF向量 from sklearn.naive_bayes import MultinomialNB #导入多项式分布的朴素贝叶斯模型 from sklearn.model_selection import train_test_split as tsplit from sklearn.metrics import classification_report #导入分类结果报告函数 X,y=fetch_20newsgroups(return_X_y=True) #获取新闻数据集合分类标签集 vectorizer=TfidfVectorizer() vdata=vectorizer.fit_transform(X) #文本转为TF-IDF向量 x_train,x_test,y_train,y_test=tsplit(vdata,y,test_size=0.1) m=MultinomialNB() #实例化多项式分布的朴素贝叶斯分类模型 m.fit(x_train,y_train) #模型训练 precision=m.score(x_test,y_test) print("测试集分类准确率:%0.2f"%precision) y_pred=m.predict(x_test) report=classification_report(y_test,y_pred) print("测试集分类结果报告:\n",report)

4、贝叶斯分类是基于朴素贝叶斯算法的模型,朴素贝叶斯的假设每个输入变量都是独立的。朴素贝叶斯分类模型的原理是:在给出的待分类样本中,找出当前条件下出现概率最大的类别,此类别即为待分类样本的所属类别。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!