2.1.1.3朴素贝叶斯

模型介绍:与基于假设的模型(线性分类器和支持向量机分类器)不同的是,朴素贝叶斯分类器的构造基础是贝叶斯理论。
朴素贝叶斯分类器会单独考量每一个维度特征被分类的条件概率,进而综合这些概率并对其所在的特征向量做出分类预测。因此,这个模型的基本数字假设是:各个维度上的特征被分类的条件概率是相互独立的。

读取20类新闻文本的数据细节
#从sklearn.datasets里导入新闻数据抓取器fetch_20newsgroups
from sklearn.datasets import fetch_20newsgroups
#与之前预存的数据不同,fetch_20newsgroups需要即时从互联网下载数据
news=fetch_20newsgroups(subset='all')
#查验数据规模和细节
print(len(news.data))

18846

print(news.data[0])

不同于前面的样例数据,这些文本数据既没有被设定特征,也没有数字化的量度。因此,在交给朴素贝叶斯分类器学习之前,要对数据做进一步处理。不过在此之前,对数据进行分割并且随机采样出一部分用于测试。

20类新闻文本数据分割
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(news.data,news.target,test_size=0.25,random_state=33)
使用朴素贝叶斯分类器对新闻文本数据进行类别预测
#从sklearn.feauture_extraction.text里导入用于文本特征向量转化模块。
from sklearn.feature_extraction.text import CountVectorizer
vec=CountVectorizer()
X_train=vec.fit_transform(X_train)
X_test=vec.transform(X_test)
#从sklearn.naive_bayes里导入朴素贝叶斯模型
from sklearn.naive_bayes import MultinomialNB
#从使用默认配置初始化朴素贝叶斯模型
mnb=MultinomialNB()
#利用训练数据对模型参数进行估计
mnb.fit(X_train,y_train)
#对测试样本进行类别预测,结果存储在变量y_predict中
y_predict=mnb.predict(X_test)
对朴素贝叶斯分类器在新闻文本数据进行类别预测的表现性能进行评估
from sklearn.metrics import classification_report
print('The Accuracy of LinearSVC is',mnb.score(X_test,y_test))

The Accuracy of LinearSVC is 0.839770797963

print(classification_report(y_test,y_predict,target_names=news.target_names))
特点分析

朴素贝叶斯分类器被广泛应用于海量互联网文本分类任务。由于其较强的特征条件独立假设,使得模型预测所需要估计的参数规模从幂指数量级向线性量级减少,极大地节约了内存消耗的计算时间。但是,也正是受这种强假设的限制,模型训练时无法将各个特征之间的联系考量在内,使得该模型在其他数量特征关联性较强的分类任务上的性能表现不佳。

你可能感兴趣的:(2.1.1.3朴素贝叶斯)