理解朴素贝叶斯

贝叶斯定理是一个优美的定理,看到这样的定理让人很舒服。朴素贝叶斯在特定场景上有着很好的应用。本文是我对朴素贝叶斯的理解总结。

场景

我们假定这样一个场景:我们想知道当一个患者拥有发作性咳嗽胸闷这两个症状时,他罹患哮喘的可能性有多大。

这个场景可以表达成求$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(支气管炎)$是多少呢?是用某医院近些年的入院患者的概率?还是去看整个社会人群的概率?它取决于你框定的样本,框的方式有很多种,因此有些时候会因为样本问题导致分类效果不佳。

END