朴素贝叶斯方法是基于贝叶斯定理的一组有监督学习算法,即简单的假设每对特征之间相互独立。
贝叶斯公式:
下面这个例子就是使用朴素贝叶斯,根据关键词对文章进行分类。
示例:
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
def article_category():
"""
http://sklearn.apachecn.org/cn/0.19.0/modules/naive_bayes.html
朴素贝叶斯,根据关键词对文章内容进行分类
20newsgroups中的数据形式:
['文章1','文章2',.....,'文章n']
整体是一个数组,文章n代表一段文字
:return:
"""
#加载20newsgroups数据源,里面主要是英文报刊杂志的文章整理
#categories指明要加载的文章类别,sunset指明要加载训练集
categories = ['alt.atheism','soc.religion.christian','comp.graphics','sci.med']
twenty_train = fetch_20newsgroups(subset='train',categories=categories)
#计算所有文章的TFIDF
tfidf_transformer = TfidfVectorizer()
print(twenty_train.data)
X_train_tfidf = tfidf_transformer.fit_transform(twenty_train.data)
# print(X_train_tfidf)
# 构建多项式朴素贝叶斯模型
#创建对象 alpha:平滑参数
clf = MultinomialNB(alpha=1.0)
#训练
clf.fit(X_train_tfidf,twenty_train.target)
#需要判断类别的两篇文章
docs_new = ['Chemical reaction','Intel CPU is good']
#将要判断的文章向量化
X_new_tfidf = tfidf_transformer.transform(docs_new)
#进行预测
predicted = clf.predict(X_new_tfidf)
#zip 将数组a[1,2,3] b['a','b','c']变为[(1,'a'),(2,'b'),(3,'c')]
for doc,category in zip(docs_new,predicted):
print('%r => %s'%(doc,twenty_train.target_names[category]))
if __name__ == '__main__':
article_category()