27 Python 分类-从概率角度做分类,一文认识朴素贝叶斯

发布时间:2026/5/20 8:12:05

27 Python 分类-从概率角度做分类,一文认识朴素贝叶斯 Python 数据分析入门从概率角度做分类一文认识朴素贝叶斯适合人群Python 初学者 / 数据分析入门 / 机器学习入门 / 教学案例分享前面几篇文章里我们已经陆续认识了几种很有代表性的分类方法K近邻看新样本和谁最像决策树像老师一样一步步做判断随机森林一棵树不够稳那就很多棵树一起判断到了这里再往下学就会碰到另一类非常有代表性的方法从“概率”角度做分类。这就是今天这篇文章要讲的内容朴素贝叶斯Naive Bayes第一次看到这个名字很多人会有点发怵。主要原因有两个听起来像数学味很重“贝叶斯”这个词很容易让人联想到公式其实入门阶段完全不用紧张。你可以先把朴素贝叶斯理解成一句非常直白的话根据一个样本已经表现出来的特征去估计它最有可能属于哪一类。还是拿“学生能否通过技能考核”这个案例来说一个学生平时成绩较高实训成绩也不错出勤率比较稳定还参加过培训那你自然会觉得这个学生最后“通过”的概率应该更大。这其实就是朴素贝叶斯最核心的出发点比较它属于各个类别的可能性谁的概率更大就判给谁。这一篇文章我会继续沿用“学生职业技能考核通过预测”这个统一案例把朴素贝叶斯讲清楚朴素贝叶斯到底在做什么为什么它叫“朴素”它和前面学过的分类方法有什么不同它的核心思想怎么通俗理解高斯朴素贝叶斯是什么如何用 Python 完成一个简单的朴素贝叶斯分类任务一、先从一个很自然的问题开始这个学生“更可能”属于哪一类前面学 K近邻的时候我们的思路是看这个学生和谁最像。学决策树的时候我们的思路是一步一步问问题看最后走到哪一类。而朴素贝叶斯换了一个思路它问的是在已知这些特征的情况下这个学生属于“通过”这类的概率大还是属于“未通过”这类的概率大比如现在有一个学生平时成绩高出勤率高参加过培训那很自然就会想到如果过去“通过”的学生里也经常出现这些特征那这个新学生也更可能属于“通过”这一类这就是概率分类的基本直觉。所以朴素贝叶斯最适合先这样理解它不是先找邻居也不是先画树而是在比较“属于各个类别的可能性”。二、什么是朴素贝叶斯朴素贝叶斯是一类基于贝叶斯定理的分类方法。不过入门阶段真的没必要一开始就被公式吓住。你可以先抓住它最核心的事情给定一个样本的特征分别计算它属于每个类别的可能性最后把它分到概率最大的那一类。比如还是“学生是否通过技能考核”的问题现在来了一个新学生已知他平时成绩不错出勤率高实训成绩也可以那模型会分别去想他属于“通过”的可能性有多大他属于“未通过”的可能性有多大最后谁更大就判给谁。所以你可以把朴素贝叶斯先理解成一句简单的话它是一种“按概率选类别”的分类方法。三、为什么叫“朴素”贝叶斯这个名字其实特别值得解释一下。因为“贝叶斯”本身已经挺学术了前面还加了个“朴素”很多人第一次看会更迷糊。这里的“朴素”说白了就是它做了一个比较强、比较简单的假设。这个假设就是在给定类别的情况下各个特征之间相互独立。第一次看这句话可能还是会觉得抽象。没关系我们继续用学生案例来理解。四、什么叫“给定类别下特征独立”假设现在我们只看“通过”这一类学生。朴素贝叶斯会做一个简化假设平时成绩高不高出勤率高不高是否参加培训这些特征在“已知这个学生属于通过类”的前提下可以先当成彼此独立来看。说白了就是它先假设这些特征不会互相影响。比如一个学生成绩高不代表在模型里出勤率一定也要高是否参加培训也先不和其他特征捆在一起考虑这个假设在现实里未必完全成立。因为真实情况下这些特征往往不是完全独立的。比如成绩高的学生可能出勤率也更高参加培训的学生实训成绩可能更好但朴素贝叶斯为了把问题变得简单、可计算就先做了这样一个“朴素假设”。所以这个名字的意思其实就是贝叶斯方法 一个很朴素的独立性假设这就是“朴素贝叶斯”名字的由来。五、朴素贝叶斯到底在做什么一句话解释核心流程如果把朴素贝叶斯的流程压缩成一句话那就是针对每个类别分别计算“这个样本属于它的可能性”然后选概率最大的类别。还是用学生案例来理解。假设现在有一个新学生平时成绩高出勤率高参加过培训那模型会分别算在“通过”这类学生中出现这些特征的可能性大不大在“未通过”这类学生中出现这些特征的可能性大不大如果第一种可能性更大那就判为“通过”如果第二种更大那就判为“未通过”。所以朴素贝叶斯最本质的逻辑就是分别站在每个类别的角度看这个样本“像不像”这一类。只不过它判断“像不像”的方式不是靠距离而是靠概率。六、它和前面学过的方法有什么明显区别学到这里很多人会问KNN 也能分类决策树也能分类随机森林也能分类那朴素贝叶斯到底不一样在哪其实差别非常明显。K近邻核心思路是看谁和新样本最像。它更强调“距离”和“邻居”。决策树核心思路是一步一步问问题最后走到某个结果。它更强调“条件判断”。随机森林核心思路是很多棵树一起判断减少单棵树的不稳定。它更强调“组合判断”。朴素贝叶斯核心思路是比较样本属于各个类别的概率谁更大就分给谁。它更强调“概率推断”。所以可以用一句话来区分KNN 看相似决策树看规则朴素贝叶斯看概率。七、贝叶斯分类为什么适合做分类因为分类这件事本质上就是在问这个样本到底更应该属于哪一类而朴素贝叶斯刚好非常直接地回答了这个问题你属于 A 类的概率大不大你属于 B 类的概率大不大哪个更大就选哪个所以它其实是一种很自然的分类思路。从方法本身来看贝叶斯分类是一类以贝叶斯定理为基础、采用概率推理方法进行分类的算法。这类方法的好处在于思路清晰分类逻辑直接很适合从“概率角度”理解分类问题八、什么是高斯朴素贝叶斯在实际使用里朴素贝叶斯还有不同类型。其中最常见、也最适合入门数值型数据的是高斯朴素贝叶斯Gaussian Naive Bayes为什么叫“高斯”因为它默认数值型特征在每个类别下近似服从高斯分布也就是常说的正态分布。如果你第一次接触不需要马上深究分布公式。先记住一点就够了当特征是连续数值时常常可以先用高斯朴素贝叶斯来做分类。比如平时成绩实训成绩出勤率这些都是数值型特征就比较适合先用高斯朴素贝叶斯来尝试。除了高斯朴素贝叶斯以外常见的还有多项式朴素贝叶斯伯努利朴素贝叶斯但入门阶段先把高斯朴素贝叶斯理解清楚就够了。九、回到案例朴素贝叶斯怎么判断学生能否通过考核还是用这个统一案例。假设现在有一个新学生平时成绩高实训成绩高出勤率高那朴素贝叶斯会分别去看两件事第一件事如果这个学生属于“通过”类这些特征常见吗如果在历史数据里“通过”的学生通常都具备成绩较高实训较好出勤稳定那这个新学生属于“通过”的可能性就会上升。第二件事如果这个学生属于“未通过”类这些特征常见吗如果在历史数据里“未通过”的学生通常不具备这些特征那这个新学生属于“未通过”的可能性就会下降。最后把这两个结果一比较就能做出分类判断。所以朴素贝叶斯的判断方式其实很像站在每个类别的角度反过来看这个样本出现得是否合理。十、Python 实操之前先说一下用的数据是什么下面代码里依然使用sklearn自带的鸢尾花数据集Iris。这个数据集非常经典包含150 个样本4 个数值特征3 个类别4 个特征分别是花萼长度花萼宽度花瓣长度花瓣宽度模型要做的事情就是根据这 4 个特征判断一朵花属于哪一种鸢尾花。所以这是一个标准的三分类任务。这里继续用它不是因为它和“学生能否通过考核”业务完全一样而是因为它非常适合演示分类模型的基本用法。十一、Python 实操用高斯朴素贝叶斯做一个三分类任务下面直接使用GaussianNB()来完成一个简单分类。fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.naive_bayesimportGaussianNB# 1. 加载鸢尾花数据集irisload_iris()Xiris.data yiris.target# 2. 划分训练集和测试集X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42)# 3. 构建高斯朴素贝叶斯模型nbGaussianNB()# 4. 训练模型nb.fit(X_train,y_train)# 5. 查看模型效果print(测试准确率,nb.score(X_test,y_test))十二、这段代码在做什么这段代码整体非常清楚适合初学者理解。第一步加载数据这里加载的是鸢尾花数据集X是特征y是类别标签第二步划分训练集和测试集还是老思路一部分数据拿来训练一部分数据拿来测试这样可以更客观地看模型在新数据上的表现。第三步创建模型这里最关键的一行是nbGaussianNB()这表示我们使用的是高斯朴素贝叶斯分类器它适合处理数值型特征。第四步训练模型fit()的作用就是让模型根据训练数据学习各类别下的特征分布。第五步输出准确率score()会返回模型在测试集上的分类准确率。所以从整体上看这段代码完成的事情就是用高斯朴素贝叶斯模型去完成一个三分类任务。十三、朴素贝叶斯有什么优点朴素贝叶斯之所以经典不只是因为它名字常见而是因为它确实有一些很实用的优点。1思路清晰它做的事情非常明确计算属于各类别的可能性最后选概率最大的类别这比很多“黑盒模型”更容易从逻辑上理解。2实现简单无论从原理还是从代码层面看它都比较简洁。3在很多问题上效果并不差虽然它做了“特征独立”这种看起来有点理想化的假设但在很多实际任务中它依然能取得不错的分类效果。十四、朴素贝叶斯的局限在哪当然它也不是完美的。最大的特点也是它最大的局限它假设特征在给定类别下是相互独立的。这个假设在真实世界里往往不完全成立。比如在学生案例里平时成绩高的学生出勤率可能也更高参加培训的学生实训成绩可能也更好这些特征显然有可能互相影响。所以朴素贝叶斯的问题就在于为了让模型简单可用它把现实中的复杂关系做了简化。这就是为什么它叫“朴素”。不过也正因为这种简化它才具备了思路简单计算直接容易实现这些优点。十五、这一篇最该记住什么学完这一篇建议至少记住下面几个核心点。1什么是朴素贝叶斯一种基于概率推理的分类方法。2它到底在做什么比较样本属于各个类别的概率谁更大就分给谁。3为什么叫“朴素”因为它假设在给定类别下各个特征之间相互独立。4它和前面的方法有什么不同KNN看相似决策树看规则随机森林看多树组合朴素贝叶斯看概率5高斯朴素贝叶斯适合什么情况适合处理数值型特征的分类任务。十六、结尾总结这一篇文章核心就是想把一个问题讲明白除了“看谁最像”和“一步步做判断”还能不能从概率角度做分类答案就是可以这就是朴素贝叶斯的基本思想。顺着这个问题我们可以得到几个很重要的认识朴素贝叶斯是一种基于贝叶斯定理的分类方法它的核心思路是比较样本属于各类别的可能性它之所以叫“朴素”是因为做了特征独立的简化假设对于数值型数据常见做法是使用高斯朴素贝叶斯它和 KNN、决策树、随机森林代表了很不一样的分类思路如果前面几篇文章更多是在建立相似性分类思维规则分类思维组合分类思维那么这一篇文章建立的就是概率分类思维。这一步想清楚以后后面继续看支持向量机就会更容易感受到同样是分类问题不同算法其实是在用完全不同的视角看问题。十七、课后思考可以试着回答下面几个问题朴素贝叶斯为什么是一种“概率分类”方法它为什么叫“朴素”什么叫“给定类别下特征独立”高斯朴素贝叶斯适合处理什么类型的数据朴素贝叶斯和 KNN、决策树在思路上最大的区别是什么如果这些问题你都能比较顺畅地说清楚那这一部分就已经真正入门了。写在最后朴素贝叶斯这类方法第一次看名字容易觉得“数学味太重”但真正理解以后会发现它其实非常直接不是去找邻居也不是去画树而是直接比较“这个样本更像哪一类的概率”。所以如果你已经把这篇文章读明白了那你对分类问题的理解就已经更完整了一步。接下来继续往下学支持向量机时你会更清楚地看到分类方法之间最大的差别不只是代码长得不同而是它们看问题的方式本身就不同。

相关新闻