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 库中找到以下三种类型的朴素贝叶斯模型−
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)
Pros & Cons
Applications of Naïve Bayes classification
以下是朴素贝叶斯分类的一些常见应用程序 −
Real-time prediction − 由于易于实现和快速计算,它可用于进行实时预测。
Multi-class prediction − 朴素贝叶斯分类算法可用于预测目标变量的多个类的后验概率。
Text classification − 由于多类预测的特性,朴素贝叶斯分类算法非常适合文本分类。这就是它也用于解决垃圾邮件过滤和情绪分析等问题的原因。
Recommendation system − 除了协同过滤等算法之外,朴素贝叶斯还构成一个推荐系统,该系统可用于过滤未见信息并预测用户是否会喜欢给定的资源。