📜  分类算法-朴素贝叶斯

📅  最后修改于: 2020-12-10 05:37:13             🧑  作者: Mango


朴素贝叶斯算法简介

朴素贝叶斯算法是一种基于应用贝叶斯定理的分类技术,其中强烈假设所有预测变量彼此独立。简而言之,假设是某个类中某个要素的存在独立于同一类中其他任何要素的存在。例如,如果一部电话具有触摸屏,互联网设施,优质的摄像头等,则可以认为它是智能的。尽管所有这些功能都相互依赖,但它们独立地有助于该电话成为智能电话。

在贝叶斯分类中,主要的兴趣是找到后验概率,即给定某些观察到的特征的标签的概率ð’ƒ(ð¿|ð’“ð”ð’Žð’¡ð’¢ð’ ð’)。借助贝叶斯定理,我们可以将其定量表示为:

$$ P(L |功能)= \ frac {P(L)P(功能| L)} {ð’ƒ(ð’“ð”ð’Žð’¡ð’¢ð’Ÿð“ð’) } $$

此处,ð’ƒ(ð¿|ð’“”’ð’Žð’¡

ð’ƒ(ð¿)是分类的先验概率。

ð’ƒ(ð’“ð’ð’Žð’¡ð’¢ð’Ÿð’ð’|ð¿)是可能性,它是给定类别的预测变量的概率。

ð’ƒ(ð’“ð’ð’Žð’¡ð’¢ð’Ÿð’ð’)是预测变量的先验概率。

在Python使用朴素贝叶斯模型

Scikit learning是Python库,它是最有用的库,可帮助我们在Python建立Naive Bayes模型。在Scikit学习Python库下,我们有以下三种Naive Bayes模型:

高斯朴素贝叶斯

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

多项式朴素贝叶斯

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

伯努利·朴素贝叶斯

另一个重要模型是伯努利·朴素贝叶斯,其中的特征被假定为二进制(0和1)。带有“单词袋”模型的文本分类可以是BernoulliNaïveBayes的一种应用。

根据我们的数据集,我们可以选择上述任何朴素贝叶斯模型。在这里,我们正在用Python实现高斯朴素贝叶斯模型-

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

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

现在,通过使用Scikit learning的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)

输出

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]]
)

优点缺点

优点

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

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

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

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

  • 它本质上是高度可伸缩的,或者它们随预测变量和数据点的数量线性增长。

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

  • 朴素贝叶斯分类算法可用于二进制以及多类分类问题。

缺点

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

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

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

朴素贝叶斯分类的应用

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

实时预测-由于其易于实施和快速计算,因此可用于实时预测。

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

文本分类-由于多类预测的功能,朴素贝叶斯分类算法非常适合文本分类。因此,它也可用于解决垃圾邮件过滤和情感分析等问题。

推荐系统–与协同过滤等算法一起,朴素贝叶斯(NaïveBayes)提出了一种推荐系统,该系统可用于过滤看不见的信息并预测用户是否希望使用给定资源的天气。