朴素贝叶斯是一个实用性很强的分类模型,不过线性分类器和支持向量机分类器(基于线性假设的模型)不同,朴素贝叶斯的构造基础是贝叶斯理论
这个模型的基本数学假设是:各个维度上的特征被分类的条件概率之间是相互独立的。
朴素贝叶斯模型有着广泛的实际应用环境,特别是在文本分类的任务中间,包括互联网新闻的分类,垃圾邮件的筛选等等。
一:以经典的20类新闻文本作为测试数据。
(1)读取20类新闻文本的数据细节
print(len(news.data))
print(news.data[0])
不同于前面的样例数据,这些文本数据既没有被设定特征,也没有数字化的量度。因此,再交给朴素贝叶斯分类器学习之前,要对数据作进一步的处理。
(2)20类新闻文本数据分割
#从sklearn.model_selection导入train_test_split
from sklearn.model_selection import train_test_split
#随机采样25%的数据样本作为测试集
X_train,X_test,y_train,y_test=train_test_split(news.data,news_traget,news_size=0.25,random_state=33)
(3)首先将文本转化为特征向量,然后利用朴素贝叶斯模型从训练数据中估计参数,最后利用这些概率参数对同样转化为特征向量的测试新闻样本进行分类预测。
使用朴素贝叶斯分类器对新闻文本数据进行类别预测
#从sklearn.feature_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.navie_bayes里导入朴素贝叶斯模型
from sklearn.navie_bayes import MultinomialNB
#使用默认配置初始化朴素贝叶斯模型
mnb=MultinomailNB()
$利用训练数据对模型参数进行估计
mnb.fit(X_train,y_train)
#对测试样本进行类别预测,结果存储在变量y_predict中
y_predict=mnb.predict(X_test)
(4)性能评估,对朴素贝叶斯分类器在新闻文本数据上的表现性能进行评估
#从sklearn.metrics里导入classifiercation_report用于详细的分类性能描述
from sklearn.metrics import classification_report
print('The accuracy of navie bayes classifier id',mnb.score(X_test,y_test))
print(classification_report(y_test,y_predict,target_names=news.target_names))
(5)特点分析:朴素贝叶斯模型被广泛应用于海量互联网文本分类任务。由于其较强的特征条件独立假设,使得模型预测所需要估计的参数规模从幂指数量级向线性量级减少,极大地节约了内存消耗和计算时间。但是也正是受这种强假设的限制模型训练时无法将各个特征之间的联系考量在内,使得该模型在其他数据特征关联性较强的分类任务上的性能表现不佳