在机器学习系列中,继一堆文章之后,在这篇文章中,我们将详细了解Naive Bayes算法。这个算法很简单,而且在大多数情况下很有效。在开始学习该算法之前,先快速了解一下其他机器学习算法。
什么是Naive Bayes?
奈何贝叶斯分类器是一个基于贝叶斯定理的分类算法集合。我们不能说Naive Bayes是一种单一的算法,它实际上是一个算法家族,所有的算法都有一个共同的原则,即每一对分类特征都是相互独立的。这种分类器是简单而最有效的分类算法之一,它有助于建立快速的机器学习模型,可以快速做出预测。
天真贝叶斯模型很容易建立,对非常大的数据集特别有用。这种算法主要用于情感分析、垃圾邮件过滤、推荐系统等。
天真贝叶斯的工作原理
奈何贝叶斯是一种基于贝叶斯定理的分类技术,假设预测因子之间是独立的。简单地说,Naive Bayes分类器假设一个类别中某个特定特征的存在与任何其他特征的存在都是无关的。
例如,如果一个水果是黄色的、圆形的、直径约3英寸的,就可能被认为是芒果。即使这些特征相互依赖或依赖于其他特征的存在,所有这些特性都独立地促成了这个水果是苹果的概率,这就是为什么它被称为Naive。
现在,我们将讨论在建立奈何贝叶斯算法时所遵循的步骤。
第1步:首先,将数据集转换为频率表,其中包括出现的次数。
第2步:然后,通过找到预测者的概率来创建一个似然表。
**第3步:**现在,使用奈何贝叶斯方程来计算每个类别的后验概率。
**第4步:**后验概率最高的类别就是预测的结果。
贝叶斯定理
我们已经知道,贝叶斯定理是奈何贝叶斯算法的基础。贝叶斯定理是一个用于计算条件概率的简单数学公式。条件概率是指在已经发生的另一事件的概率下,找到一个事件发生的概率。贝叶斯定理在数学上被表述为以下公式:
P(A|B)是后验概率--假设A对观察到的事件B的概率。
P(B|A)是可能性概率--鉴于假设的概率为真,证据的概率。
P(A) 是先验概率--观察证据前假设的概率。
P**(B)**是边缘概率--证据的概率。
贝叶斯定理根据对可能与事件有关的条件的先验知识,计算出事件发生的条件概率。
奈何贝叶斯的例子
让我们通过一个例子来理解奈何贝叶斯。我们假设有两枚硬币,从样本空间中计算出得到两个尾巴和至少一个头的前两个概率。现在在这个样本空间中,让A是第二枚硬币是尾巴的事件,B是第一枚硬币是头的事件。同样,我们把它颠倒过来,因为我们想知道第二个事件会是什么。
现在,我们将找出给定B的A的概率
P(A|B) = [ P(B|A) * P(A) ] / P(B)
= [ P(第一个硬币是头,第二个硬币是尾) * P(第二个硬币是尾)]/ P(第一个硬币是头)
= [ (1/2) * (1/2) ] / (1/2)
P(A|B) = 1/2 = 0.5
Naive Bayes的类型
有三种类型的奈何贝叶斯,如高斯奈何贝叶斯、多项式奈何贝叶斯和伯努利奈何贝叶斯。
高斯奈何贝叶斯(Gaussian Naive Bayes
在高斯奈夫贝叶斯中,当预测因子为连续值而非离散时,我们假设这些值是从高斯分布中取样的。
多项式奈何贝叶斯
在多项式奈何贝叶斯中,分类器使用的特征或预测因子是文档中出现的词的频率。这种类型的Naive Bayes主要用于文档分类问题,即一个文档是否属于体育、政治、技术等类别。
伯努利奈夫贝叶斯
伯努利奈夫贝叶斯与多项式奈夫贝叶斯类似,但预测因子是布尔变量。我们用来预测类变量的参数只占是或不是的值。例如,一个词是否在文本中出现。
在Python中实现Naive Bayes
让我们开始实施Naive Bayes,导入我们的项目将使用的虹膜数据集。接下来,我们将从sklearn库中加载我们的虹膜数据集到代码中。
# Importing the iris dataset from sklearn libraryfrom sklearn.datasets import load_iris
# Loading the iris datasetdataset = load_iris()
加载数据后,指定自变量和结果变量。
# Store the independent variables (X) and outcome (y)
X = dataset.datay = dataset.target
为了确定我们的模型在训练数据以外的数据上是否表现良好,我们可以将数据分成两部分,一部分用来训练我们的模型,称为训练数据,另一部分用来测试我们模型的性能,称为测试数据。train_test_split方法正是这样做的,我们给它我们的数据和test_size,即作为测试数据的数据比例。
# Importing the train_test_split methodfrom sklearn.model_selection import train_test_split
# Splitting the data into training and testing setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)
现在我们有了训练和测试数据,让我们创建GaussianNB()对象并对训练数据进行训练。为了训练数据,我们像往常一样使用fit() 方法。让我们开始吧。
# Training the modelfrom sklearn.naive_bayes import GaussianNBmodel = GaussianNB()model.fit(X_train, y_train)
# Making predictions on the testing datay_pred = model.predict(X_test)
现在让我们通过找出测试数据集的准确度分数来检查模型的准确程度。准确率是指比较实际响应值(y_test)和预测响应值(y_pred)。对于这个模型,它的准确率为0.95,意味着大约95%的预测是正确的。
# Importing accuracy_score methodfrom sklearn.metrics import accuracy_score
# Calculating the accuracy scoreprint(accuracy_score(y_test, y_pred))
因此,我们已经用python中的sklearn库成功建立了我们的Naive Bayes模型。你可以用其他数据集进行实验,以获得对该算法的良好理解。接下来,我们将讨论Naive Bayes分类器的优点和缺点。
奈何贝叶斯的优点
- 奈何贝叶斯是预测一类数据集的快速和简单的ML算法之一。
- 它可以用于二进制以及多类分类。
- 与其他算法相比,它在多类预测中表现良好。
Naive Bayes的缺点
- 如果一个分类变量有一个类别,而这个类别在训练数据集中没有观察到,那么该模型将分配一个0(零)的概率,并且无法进行预测。这通常被称为**"零频率"。**
- Naive Bayes也被称为一个糟糕的估计器,所以概率输出不能太认真。
- Naive Bayes假设所有的特征都是独立或不相关的,所以它不能学习特征之间的关系。
总结
在这篇文章中,我们详细了解了机器学习算法--Naive Bayes的概况。我们讨论了它的工作原理,例子,在python中的实现,以及最后的优点和缺点。