赞
踩
朴素贝叶斯(Naive Bayes)是一个非常简单,但是实用性很强的分类模型,与基于线性假设的模型(线性分类器和支持向量机分类器)不同,朴素贝叶斯分类器的构造基础是贝叶斯理论。
抽象一些的说,朴素贝叶斯分类器会单独考量每一维度特征被分类的条件概率,进而综合这些概率并对其所在的特征向量做出分类预测。因此,这个模型的基本数学假设是:各个维度上的特征被分类的条件概率之间是相互独立的。
对朴素贝叶斯算法更深入的理论介绍可以参考这几篇博客:
带你彻彻底底搞懂朴素贝叶斯公式
深入理解朴素贝叶斯(Naive Bayes)
朴素贝叶斯分类(Nave Bayes)
朴素贝叶斯模型有着广泛的实际应用环境,特别是在文本分类的任务中,包括互联网新闻的分类,垃圾邮件的筛选等。
本文使用Scikit-learn中集成的经典的20类新闻文本作为实验数据。
需要提醒的是,本文中的数据没有预存,需要实时从网上下载,而在墙内下载速度有点慢,因此建议翻墙下载。
下面我们先看下数据:
from sklearn import datasets
news = datasets.fetch_20newsgroups(subset='all')
print(len(news.data)) #news.data的数据格式为list
print(news.data[0])
从图中我们可以看到,我们的原始数据包含是18846条文本的列表,共有20个类别。由于原始数据中既没有被设定特征,也没有数字化量度。因此在交给朴素贝叶斯分类器学习之前,要对数据进行进一步的处理。
下面开始进行分析
from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import classification_report #获取数据 news = datasets.fetch_20newsgroups(subset='all') #将数据拆分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25, random_state=33) #导入文本特征向量转化模块,并将文本特征向量化 vec = CountVectorizer() X_train = vec.fit_transform(X_train) X_test = vec.transform(X_test) #注意这个函数与上面的不一样 #使用默认配置初始化朴素贝叶斯模型 mnb = MultinomialNB() #利用训练数据对模型参数进行估计,并进行预测 mnb.fit(X_train, y_train) y_predict = mnb.predict(X_test) #输出预测结果 print('The Accuracy of Naive Bayes:', mnb.score(X_test, y_test)) print(classification_report(y_test, y_predict, target_names=news.target_names))
通过上图的结果可以看出,朴素贝叶斯对4712个测试样本分类准确性约83.977,结果还是比较不错的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。