理解朴素贝叶斯
贝叶斯定理是一个优美的定理,看到这样的定理让人很舒服。朴素贝叶斯在特定场景上有着很好的应用。本文是我对朴素贝叶斯的理解总结。
场景
我们假定这样一个场景:我们想知道当一个患者拥有发作性咳嗽
、胸闷
这两个症状时,他罹患哮喘
的可能性有多大。
这个场景可以表达成求$P(哮喘|发作性咳嗽,胸闷)$
回顾贝叶斯定理
贝叶斯定理指明了先验概率和后验概率的关系:$P(B|A)=\frac{P(B)P(A|B)}{P(A)}$。即A发生后发生B的概率等于B的概率乘以B发生后A发生的概率除以A的概率。
使用朴素贝叶斯
使用链式法则,并假定特征之间是独立的(这就是朴素),本例场景可以使用朴素贝叶斯求解:
$P(哮喘|发作性咳嗽,胸闷)=\frac{P(哮喘)P(发作性咳嗽|哮喘)P(胸闷|哮喘)}{P(发作性咳嗽)P(胸闷)}$
整个问题转换成了人群中罹患哮喘的概率,哮喘患者中有发作性咳嗽的概率,哮喘患者中发生胸闷的概率,人群中有发作性咳嗽的概率,人群中有胸闷的概率之间的计算,将未知转换成了已知。
朴素贝叶斯分类
发作性咳嗽和胸闷还可能是支气管炎的症状。那么当患者拥有这2个症状的时候,到底是哮喘的几率大还是支气管炎的几率大呢?这就是一个分类的问题。求解这个问题,可以分别算出哮喘和支气管炎的概率做比较即可。
但考虑到在这2个概率计算中,分母部分完全相同。所以他们之前的概率比较可以抛却分母直接比较分子。我们直接将分母随便用个常量Z代替。
$P(哮喘|发作性咳嗽,胸闷)=\frac{1}{z}P(哮喘)P(发作性咳嗽|哮喘)P(胸闷|哮喘)$
$P(支气管炎|发作性咳嗽,胸闷)=\frac{1}{z}P(支气管炎)P(发作性咳嗽|支气管炎)P(胸闷|支气管炎)$
在实际应用中这些概率完全可以提前算好放在那里,对于每一个新的计算请求,就变成了调用公式来计算,所以效率很高。
朴素贝叶斯的局限性
朴素贝叶斯的主要优点是有稳定的理论基础,不依赖于大量数据,算法效率很高。但它在实际运用中有一些局限性。
朴素贝叶斯假设特征之间相互独立,这个假设在实际应用中往往是不成立的。在本例中,发作性咳嗽可能会诱使胸闷,很难说它俩是独立的。在属性个数比较多或者属性之间相关性较大时,分类效果不好。
需要知道先验概率。在本例中,$P(哮喘)$,$P(支气管炎)$是多少呢?是用某医院近些年的入院患者的概率?还是去看整个社会人群的概率?它取决于你框定的样本,框的方式有很多种,因此有些时候会因为样本问题导致分类效果不佳。