Python机器学习

朴素贝叶斯

Python朴素贝叶斯详细操作教程

朴素贝叶斯算法简介

朴素贝叶斯算法是一种基于贝叶斯定理的分类技术,其中强假设所有预测变量彼​​此独立。简而言之,假设是某个类中某个要素的存在独立于同一类中其他任何要素的存在。例如,如果一部电话具有触摸屏,互联网设施,优质的摄像头等,则可以认为它是智能的。尽管所有这些功能都是相互依赖的,但是它们独立地构成了该电话是智能电话的可能性。
在贝叶斯分类中,主要的兴趣是找到后验概率,即给定某些观察到的特征𝐿(𝐿|𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠)的概率。借助贝叶斯定理,我们可以用以下定量形式表示它-
$$ P(L | features)\:= \:\ frac {P(L)P(features | L)} {P(features}} $$
在这里,(𝐿|𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠)是类别的后验概率。
𝑃(𝐿)是类别的先验概率。
𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠|𝐿)是似然度,它是给定类别的预测变量的概率。
𝑃(𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠)是预测变量的先验概率。

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

Python库,Scikit learning是最有用的库,可帮助我们在Python中构建NaïveBayes模型。在Scikit学习Python库下,我们有以下三种朴素的贝叶斯模型-

高斯朴素贝叶斯

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

多项式朴素贝叶斯

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

伯努利·朴素贝叶斯

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

示例

根据我们的数据集,我们可以选择上述任何朴素贝叶斯模型。在这里,我们正在用Python实现高斯朴素贝叶斯模型-
我们将从所需的导入开始,如下所示-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
现在,通过使用 Scikit Learn make_blobs()函数,我们可以生成具有高斯分布的点的斑点-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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 模型,我们需要导入并使其对象如下所示-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);
现在,我们必须进行预测。可以在生成一些新数据之后执行以下操作-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)
接下来,我们正在绘制新数据以查找其边界-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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);
现在,借助以下代码行,我们可以找到第一和第二个标签的后验概率-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)

输出

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
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)提出了一种推荐系统,可用于过滤看不见的信息并预测用户是否希望使用给定资源的天气。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4