本文共 1845 字,大约阅读时间需要 6 分钟。
目录
分类算法 - 朴素贝叶斯算法
1、概率基础
2、朴素贝叶斯介绍
朴素贝叶斯算法使用前提:特征独立(“朴素”,就是特征独立的意思)
问题:
求某一篇文章是什么类型的?(科技、娱乐、...)
那么我们可以先求这篇文章是各个类型的概率,哪个类型的概率大,那么文章就是什么类型的。
求解:
ps:m为训练文档中统计出的特征词的种类的个数
sklearn.naive_bayes.MultiomialNB
sklearn.naive_bayes.MultiomialNB(alpha = 1.0)
这里的alpha:拉普拉斯平滑系数。目的是防止分类时某一类别的概率为0
默认alpha = 1.0,不用改。
20个新闻组数据集包含20个主题的18000个新闻组帖子,给测试集的新闻进行分类。
1、加载20类新闻数据,并进行分割
2、生成文章特征词
3、朴素贝叶斯estimator流程进行预估
from sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.preprocessing import StandardScalerfrom sklearn.datasets import load_iris, fetch_20newsgroupsfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.metrics import classification_reportimport pandas as pdimport numpy as npdef naviebayes(): """ 朴素贝叶斯进行文本分类 :return: None """ # TODO 获取数据集 news = fetch_20newsgroups(subset='all') # print(news.target_names) # 文章的类别 # TODO 进行数据分割 x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25) # TODO 对数据集进行特征抽取 tf = TfidfVectorizer() # 以训练集当中的词的列表进行每篇文章的词的重要性统计['a','b','c'] x_train = tf.fit_transform(x_train) print(tf.get_feature_names()) x_test = tf.transform(x_test) # TODO 进行朴素贝叶斯算法预测 mlt = MultinomialNB(alpha=1.0) # print(x_train) # sparse矩阵 print(x_train.toarray()) mlt.fit(x_train, y_train) y_predict = mlt.predict(x_test) print("预测的文章类别为:", y_predict) # 得出准确率 print("准确率为:", mlt.score(x_test, y_test)) # 得出精确率和召回率 print("每个类别的精确率和召回率:", classification_report(y_test, y_predict, target_names=news.target_names))if __name__ == '__main__': naviebayes()
support表示预测时,划分为某个类别的个数。
算法不需要调参
缺点:当训练集误差大,结果误差也大。当文章的某些词不是重要的,反应文章主题类别的词,就会影响结果。
转载地址:http://fdrgn.baihongyu.com/