朴素贝叶斯
朴素贝叶斯中的朴素一词的来源是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。朴素贝叶斯经常会用于文本分类,它的思想是基于条件概率和联合概率:
条件概率:事件A在另外一个事件B已经发生的条件下发生的概率
记作:P(A|B)
特性:P(A1,A2|B) = P(A1|B)P(A2|B)
注意:此条件概率的成立,是由于A1,A2相互独立的结果
联合概率:包含多个条件,且所有条件同时成立的概率
记作:P(A,B)
特性:P(A, B) = P(A)P(B)
贝叶斯公式:
W为给定文档的特征值(频数统计,预测文档提供),C为文档类别
为防止计算出的分类概率为0,引入拉普拉斯平滑系数:
α为指定的系数,一般为1;m为训练文档中统计出来的特征词个数
朴素贝叶斯算法在sklearn中的API:
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
朴素贝叶斯分类
alpha:拉普拉斯平滑系数
示例:20类新闻分类
数据集来源:sklearn.datasets新闻数据抓取器fetch_20newsgroups
使用朴素贝叶斯分类步骤:
1. 获取新闻的数据,20个类别
1 | news = fetch_20newsgroups(subset = 'all' ) |
2. 进行数据集分割
1 | x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size = 0.3 ) |
3. 对文本数据,进行特征抽取
1 2 3 | tf = TfidfVectorizer() x_train = tf.fit_transform(x_train) x_test = tf.transform(x_test) |
4. estimator估计器训练
1 2 | mlb = MultinomialNB(alpha = 1.0 ) mlb.fit(x_train, y_train) |
5. 进行预测
1 | y_predict = mlb.predict(x_test) |
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer def nbcls(): """ 朴素贝叶斯对新闻数据集进行预测 :return: """ # 获取新闻的数据,20个类别 news = fetch_20newsgroups(subset = 'all' ) # 进行数据集分割 x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size = 0.3 ) # 对于文本数据,进行特征抽取 tf = TfidfVectorizer() x_train = tf.fit_transform(x_train) x_test = tf.transform(x_test) # estimator估计器流程 mlb = MultinomialNB(alpha = 1.0 ) mlb.fit(x_train, y_train) # 进行预测 y_predict = mlb.predict(x_test) print ( "预测每篇文章的类别:" , y_predict[: 100 ]) print ( "真实类别为:" , y_test[: 100 ]) print ( "预测准确率为:" , mlb.score(x_test, y_test)) return None nbcls() |
取前100篇新闻的预测的新闻分类结果及准确率:
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期