Machine Learning With Python 简明教程

Classification Algorithms - Naïve Bayes

Introduction to Naïve Bayes Algorithm

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

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

此处,P(L | fatures) 是类的后验概率。

P(L) 是类的先验概率。

P(fatures | L) 是可能性,即给定类的预测变量的概率。

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

Building model using Naïve Bayes in Python

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

Gaussian Naïve Bayes

它是最简单的朴素贝叶斯分类器,假设来自每个标签的数据都是从一个简单的正态分布中获取的。

Multinomial Naïve Bayes

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

Bernoulli Naïve Bayes

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

Example

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

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

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

现在,通过使用 Scikit learn 的 make_blobs() 函数,我们可以生成具有正态分布的点团,如下所示−

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)

Output

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

Pros

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

  1. 朴素贝叶斯分类易于实现且速度快。

  2. 它的收敛速度比逻辑回归等判别模型更快。

  3. 它需要的训练数据更少。

  4. 它本质上具有高度可伸缩性,或者它们随预测器和数据点的数量线性扩展。

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

  6. 朴素贝叶斯分类算法可以用于二元分类和多类分类问题。

Cons

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

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

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

Applications of Naïve Bayes classification

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

Real-time prediction − 由于易于实现和快速计算,它可用于进行实时预测。

Multi-class prediction − 朴素贝叶斯分类算法可用于预测目标变量的多个类的后验概率。

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

Recommendation system − 除了协同过滤等算法之外,朴素贝叶斯还构成一个推荐系统,该系统可用于过滤未见信息并预测用户是否会喜欢给定的资源。