分类算法朴素贝叶斯


朴素贝叶斯算法是一种基于应用贝叶斯定理的分类技术,并强烈假设所有预测变量相互独立。简而言之,假设是一个类中某个特征的存在独立于同一类中任何其他特征的存在。例如,如果手机具有触摸屏、互联网设施、良好的摄像头等,则可以认为它是智能手机。尽管所有这些功能相互依赖,但它们独立地影响了手机是智能手机的概率。

在贝叶斯分类中,主要兴趣是找到后验概率,即给定一些观察到的特征的标签概率,?(? | ????????)。借助贝叶斯定理,我们可以将其定量表示如下:

$$P(L |特征)= \frac{P(L)P(特征|L)}{?(????????)}$$

这里,?(? | ????????) 是类的后验概率。

?(?) 是类的先验概率。

?(???????? | ?) 是可能性,它是给定类别的预测器的概率。

?(????????) 是预测变量的先验概率。

在 Python 中使用朴素贝叶斯构建模型


Python 库,Scikit learn 是帮助我们在 Python 中构建朴素贝叶斯模型的最有用的库。 Scikit learn Python库下我们有以下三种朴素贝叶斯模型:

高斯朴素贝叶斯

它是最简单的朴素贝叶斯分类器,假设每个标签的数据来自简单的高斯分布。

多项朴素贝叶斯

另一个有用的朴素贝叶斯分类器是多项朴素贝叶斯,其中假设特征是从简单的多项分布中提取的。这种朴素贝叶斯最适合表示离散计数的特征。

伯努利朴素贝叶斯

另一个重要的模型是伯努利朴素贝叶斯,其中假设特征是二进制的(0 和 1)。 “词袋”模型的文本分类可以是伯努利朴素贝叶斯的应用。

例子

根据我们的数据集,我们可以选择上面解释的任何朴素贝叶斯模型。在这里,我们在 Python 中实现高斯朴素贝叶斯模型:

我们将从所需的导入开始,如下所示:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

现在,通过使用 Scikit learn 的 make_blobs() 函数,我们可以生成具有高斯分布的点的 blob,如下所示:

from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');

接下来,为了使用 GaussianNB 模型,我们需要导入并使其对象如下:

from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);

现在,我们必须进行预测。生成一些新数据后可以这样做:

rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)

接下来,我们正在绘制新数据以找到它的边界:

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);

现在,借助以下代码行,我们可以找到第一个和第二个标签的后验概率:

yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)
array([[0.998, 0.002],
    [1.   , 0.   ],
    [0.987, 0.013],
    [1.   , 0.   ],
    [1.   , 0.   ],
    [1.   , 0.   ],
    [1.   , 0.   ],
    [1.   , 0.   ],
    [0.   , 1.   ],
    [0.986, 0.014]]
)

优点缺点


Pros

以下是使用朴素贝叶斯分类器的一些优点:

  • 朴素贝叶斯分类易于实现且快速。

  • 它将比逻辑回归等判别模型更快地收敛。

  • 它需要更少的训练数据。

  • 它本质上是高度可扩展的,或者它们随着预测变量和数据点的数量线性扩展。

  • 它可以进行概率预测,并且可以处理连续数据和离散数据。

  • 朴素贝叶斯分类算法既可用于二分类问题,也可用于多分类问题。

Cons

以下是使用朴素贝叶斯分类器的一些缺点:

  • 朴素贝叶斯分类最重要的缺点之一是其强大的特征独立性,因为在现实生活中几乎不可能拥有一组完全相互独立的特征。

  • 朴素贝叶斯分类的另一个问题是它的“零频率”,这意味着如果一个分类变量有一个类别但在训练数据集中没有被观察到,那么朴素贝叶斯模型将给它分配一个零概率,它将无法做出一个预言。

朴素贝叶斯分类的应用


以下是朴素贝叶斯分类的一些常见应用:

实时预测 : 由于其易于实现和快速计算,可用于实时预测。

多类预测 :朴素贝叶斯分类算法可用于预测多类目标变量的后验概率。

文本分类 : 由于多类预测的特点,朴素贝叶斯分类算法非常适合文本分类。这就是为什么它也用于解决垃圾邮件过滤和情绪分析等问题。

推荐系统 :与协同过滤等算法一起,朴素贝叶斯提出了一个推荐系统,可用于过滤不可见的信息并预测用户是否喜欢给定资源的天气。