我们已经知道贝叶斯分类器就是个算概率、选最大的玩意儿,朴素贝叶斯是其中最“天真”但最好用的版本。但光知道原理还不够,你得知道:它到底有哪些兄弟姐妹?在实际中能干啥?以及——真要用代码实现,该怎么做?
下篇就聊这三件事。
一、贝叶斯分类器有哪些类型?
按对数据分布的假设不同,主要分这么几种(从简单到复杂):
1. 朴素贝叶斯(Naive Bayes)
上面已经介绍了。它假设特征之间相互独立。根据特征的数据类型,又分三种小类:
高斯朴素贝叶斯:假设特征是连续值,并且服从正态分布。比如身高、体重、温度。
多项式朴素贝叶斯:适用于“计数”型特征,比如文本里某个词出现了几次。常用于文本分类。
伯努利朴素贝叶斯:特征是0/1二元值,比如“邮件里有没有出现‘免费’这个词”。也是文本分类的常见选择。
2. 贝叶斯网络(Bayesian Network)
朴素贝叶斯的“独立假设”太强了。贝叶斯网络放松了这个假设,允许部分特征之间有依赖关系,用一张有向图来表示“谁依赖谁”。
比如:判断是否下雨,可以依赖“湿度”和“气压”,而“湿度”和“气压”之间又有关系。贝叶斯网络可以建模这种复杂的依赖,但代价是计算量大很多,而且需要事先知道依赖结构(或者从数据中学习)。
3. TAN(树增强朴素贝叶斯)
这是朴素贝叶斯和完全贝叶斯网络的折中:允许每个特征最多依赖一个其他特征,形成一个树状结构。比朴素贝叶斯更准,又比通用贝叶斯网络简单。
4. 半朴素贝叶斯分类器
这类方法只考虑部分特征之间的依赖,比如通过聚类把特征分成几组,组内独立、组间允许依赖。算是“适度放松假设”。
实际中最常用的,99%的情况就是朴素贝叶斯。因为简单、快速、在小数据上表现好,而且对噪声不敏感。剩下的1%是贝叶斯网络,用在医疗诊断、故障诊断等需要解释因果关系的场景。
二、贝叶斯分类器有什么作用?(真的在用,不是吹)
作用1:垃圾邮件过滤(最经典的战场)
90年代末到2000年代初,几乎所有邮箱的垃圾邮件过滤器都基于朴素贝叶斯。它看邮件的每个词,计算“这封邮件是垃圾的概率”,超过阈值就扔进垃圾箱。直到今天,很多轻量级过滤器还在用它。
作用2:文本分类(情感分析、新闻分类)
评论是好评还是差评?看“喜欢、棒、垃圾”这些词的频率。
新闻属于体育、娱乐还是科技?用贝叶斯分类器训练几千篇新闻后,它就能自动归类。
作用3:推荐系统的“冷启动”
当你刚注册一个APP,还没任何行为数据时,贝叶斯分类器可以根据你的年龄、性别、地域(先验)来推荐初始内容。等有了行为数据,再切换到协同过滤。
作用4:医疗辅助诊断
给定症状(发烧、咳嗽、乏力),计算每种疾病的概率。贝叶斯分类器天生输出概率,医生可以看“感冒80%,新冠15%,流感5%”,而不是一个硬结论。
作用5:异常检测(如信用卡欺诈)
正常交易的分布是已知的(先验),来了新交易,计算它属于“正常”的概率。如果概率极低,就标记为可疑。贝叶斯方法能给出“可疑程度”,而不是简单的“是/否”。
总结一句话:只要你需要做分类,并且希望得到概率而不是硬标签,贝叶斯分类器就值得一试。
三、怎么构建一个贝叶斯分类器?(三步走,不写代码也能懂)
假设你要做一个“天气适不适合打网球”的分类器,特征有“天气状况(晴/阴/雨)”、“湿度(高/中/低)”、“风力(强/弱)”。标签是“打”或“不打”。
第一步:准备数据(统计频次)
你收集了14天的历史数据。先数一下:
总共14天,其中9天打了网球,5天没打。→ 先验概率 P(打)=9/14,P(不打)=5/14。
然后数每个特征在每个类别下的次数:
在“打”的9天里,天气为晴的有2天,阴的有4天,雨的有3天。→ P(晴|打)=2/9,P(阴|打)=4/9,P(雨|打)=3/9。
湿度、风力同理。
第二步:来了新样本,计算概率
新的一天:天气=晴,湿度=高,风力=强。
我们要算:
P(打|晴,高,强) ∝ P(打) × P(晴|打) × P(高|打) × P(强|打)
P(不打|晴,高,强) ∝ P(不打) × P(晴|不打) × P(高|不打) × P(强|不打)
把之前统计的数字乘起来,得到两个“未归一化的概率”(就是没除以分母的那个数)。
第三步:比较大小,做出决定
哪个乘积大,就分到哪一类。
如果P(打|...)的乘积是0.02,P(不打|...)的乘积是0.15,那就选“不打”。
一个坑: 如果某个特征值在训练数据里从没出现过(比如“打网球的日子里从没有过强风”),那P(强|打)=0,整个乘积就变成0了。这显然不合理——没出现过不代表不可能。
解决办法:拉普拉斯平滑。简单说就是每个计数都加一个很小的数(通常加1),避免出现0概率。比如原来P(强|打)=0/9,平滑后变成(0+1)/(9+3)=1/12。
贝叶斯分类器就像一个经验丰富的老侦探——它把你过去的经验(先验)和眼前的线索(证据)结合起来,用概率说话。虽然有时候它“天真”地假设所有线索互不相关,但这份天真反而让它又快又稳,尤其适合文本、医疗、过滤这些场景。
下次你打开邮箱的垃圾箱,或者看到APP给你推荐“你可能喜欢”的东西,心里可以默默说一句:这背后,可能就是一个贝叶斯分类器在默默干活。