朴素贝叶斯分类算法应该是统计学味道最浓的一款算法。统计学有两大学派,分别是频率学派和贝叶斯学派。
朴素贝叶斯分类算法的核心要义正是贝叶斯学派中的贝叶斯公式。
贝叶斯公式的4个重要概念:
朴素贝叶斯(Naive Bayes)由两部分组成,”Naive“是一种带有假设的限定条件,”Bayes“指贝叶斯公式,因此朴素贝叶斯指的是在”朴素“假设条件下使用”贝叶斯公式“。
贝叶斯的核心是条件概率,\(P(B|A)\) 越大,说明一旦发生了 \(A\) ,就越有可能发生 \(B\) ,两者可能存在较高的相关性,相关性就是贝叶斯要表达的思想。
相关性并非因果性。
用贝叶斯进行选择
举例
班上10位女同学,其中一位叫“安吉”,光看背影猜中的谁是安吉利的概率是 \(P(安吉)=10\%\) ,这就是先验概率。
班上女同学一共三种发型,扎马尾的概率大概为 \(P(马尾) = 30\%\) ,而安吉非常喜欢扎马尾,概率 \(P(马尾|安吉) = 70\%\) 。
如果此时从背影看到一位扎马尾的女同学,根据贝叶斯公式:
\[P(马尾) \cdot P(安吉|马尾) = P(安吉) \cdot P(马尾|安吉) \]可以得出:
\[P(安吉|马尾) = \frac{P(安吉) \cdot P(马尾|安吉)}{P(马尾)} = \frac{10\% \cdot 70\%}{30\%} = 23.3\% \]如果把例子中的“扎马尾”看作女同学数据样本的一种特征,把“是不是安吉”看作分类问题,那么其实就是用贝叶斯公式解决分类问题的基本思路。
当然,例子中只有“是否扎马尾”一个特征,而现实中特征数量远不止这一个。
“Naive”就是简单的认为特征之间彼此独立,使得贝叶斯公式的计算可以大大简化。
贝叶斯公式:
\[P(y|x) = \frac{P(y)P(x|y)}{P(x)} \]在公式中,\(P(y)\)称为先验概率,\(P(y|x)\)称为后验概率,而\(P(x|y)\)则称作似然度。
把贝叶斯公式中的\(y\)看作某个类别,把\(x\)当做特征,那么公式变成:
\[P(y|x_1,\cdots,x_n) = \frac{P(y)P(x_1,\cdots,x_n|y)}{P(x_1,\cdots,x_n)} \]特征值越多,要统计这些特征同时出现的概率就越困难。因此朴素贝叶斯做了一个“naive”的假设,即特征之间是相互独立、互不影响的。
如此一来,式子就能化简。某个特征的似然度就能简化为:
\[P(x_i|x_1,\cdots,x_{i-1},x_{i+1},\cdots,x_n) = P(x_i|y) \]所以,在“naive”假设下,求后验概率就变成了:
\[P(y|x_1,\cdots,x_n) \propto P(y) \prod_{i=1}^n P(x_i|y) \]这里不太理解为啥就直接变成正比了,解释的看不懂。
朴素贝叶斯的优化方法
朴素贝叶斯的学习过程是通过比较不同特征与类之间的似然关系,最后把似然度最大的那个类作为预测结果。
数学表达式如下:
\[\hat{y} = \arg \max_y P(y) \prod_{i=1}^n P(x_i|y) \]不太理解。。。
朴素贝叶斯分类算法信息表
使用朴素贝叶斯算法,需要三步:
基于贝叶斯的算法模型相关类库都在sklearn.naive_bayes
包中。
根据似然度计算方法不同,朴素贝叶斯可分为4种子算法类,本文介绍多项式朴素贝叶斯(Multinomial NaiveBayes)的类MultinomialNB
。
用法如下:
from sklearn.datasets import load_iris # 导入朴素贝叶斯模型中的多项式朴素贝叶斯分类算法 from sklearn.naive_bayes import MultinomialNB # 鸢尾花数据集 X, y = load_iris(return_X_y=True) # 训练模型 clf = MultinomialNB().fit(X, y) # 使用模型进行分类预测 clf.predict(X)
预测结果如下:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
使用默认的性能评估器评分:
clf.score(X, y)
性能得分如下:
0.9533333333333334
朴素贝叶斯分类算法以统计学概率论为数学基础,可解释性较强。在垃圾邮件筛选、文本分类领域效果较好。如果数据分布情况与朴素的假设冲突,特征之间具有明显关联性时,就不适合使用朴素贝叶斯算法。
朴素贝叶斯分类算法特点
算法使用案例
朴素贝叶斯算法用于垃圾邮件识别效果良好。