Machine Learning 简明教程

Machine Learning - Naive Bayes Algorithm

朴素贝叶斯算法是一种基于贝叶斯定理的分类算法。该算法假设特征相互独立,这就是将其称为“朴素”算法的原因。它根据特征的概率计算样本属于特定类别的概率。例如,如果一部手机具有触摸屏、互联网功能和良好的摄像头,则可以将其视为智能手机。即使所有这些特征都相互依赖,但所有这些特征都独立地影响了该手机是智能手机的概率。

在贝叶斯分类中,主要兴趣是找到后验概率,即给定某些观测特征的标签概率,即 P(𝐿L | 特征)。借助贝叶斯定理,我们可以用定量形式表示如下 −

P\left ( L| 特征\right )=\frac{P\left ( L \right )P\left (特征| L\right )}{P\left (特征\right )}

在此,

  1. $P\left ( L| 特征\right )$ 是类别的后验概率。

  2. $P\left ( L \right )$ 是类别的先验概率。

  3. $P\left (特征| L\right )$ 是似然,即给定类别时预测变量的概率。

  4. $P\left (特征\right )$ 是预测变量的先验概率。

在朴素贝叶斯算法中,我们使用贝叶斯定理来计算样本属于特定类别的概率。我们计算给定类别的样本的每个特征的概率,然后将它们相乘以获得样本属于该类别的可能性。然后,我们将似然与该类别的先验概率相乘,以获得样本属于该类别的后验概率。我们对每个类别重复此过程,然后选择具有最高概率的类别作为样本的类别。

Types of Naive Bayes Algorithm

朴素贝叶斯算法有三种类型 −

  1. Gaussian Naive Bayes − 当特征是服从正态分布的连续变量时,使用此算法。它假设每个特征的概率分布都是高斯的,这意味着它是一个钟形曲线。

  2. Multinomial Naive Bayes − 当特征是离散变量时,使用此算法。它通常用于特征是文档中单词频率的文本分类任务中。

  3. Bernoulli Naive Bayes − 当特征是二进制变量时,使用此算法。它也通常用于特征是单词在文档中是否存在或不存在的文本分类任务中。

Implementation in Python

下面,我们将用 Python 实现高斯朴素贝叶斯算法。我们将使用鸢尾花数据集,这是一个用于分类任务的流行数据集。它包含 150 个鸢尾花样本,每个样本都有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。这些花属于三类:山鸢尾、杂色鸢尾和维吉尼亚鸢尾。

首先,我们将导入必要的库并加载数据集 −

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# load the iris dataset
iris = load_iris()

# split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.35, random_state=0)

然后,我们创建一个高斯朴素贝叶斯分类器的实例,并在训练集上对其进行训练 −

# Create a Gaussian Naive Bayes classifier
gnb = GaussianNB()

#fit the classifier to the training data:
gnb.fit(X_train, y_train)

现在,我们可以使用训练好的分类器对测试集进行预测 −

#make predictions on the testing data
y_pred = gnb.predict(X_test)

我们可以通过计算其准确性来评估分类器的性能——

#Calculate the accuracy of the classifier
accuracy = np.sum(y_pred == y_test) / len(y_test) print("Accuracy:", accuracy)

Complete Implementation Example

下面给出了一个完整的贝叶斯分类算法在 python 中使用鸢尾花数据集的实现示例——

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# load the iris dataset
iris = load_iris()

# split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.35, random_state=0)

# Create a Gaussian Naive Bayes classifier
gnb = GaussianNB()

#fit the classifier to the training data:
gnb.fit(X_train, y_train)

#make predictions on the testing data
y_pred = gnb.predict(X_test)

#Calculate the accuracy of the classifier
accuracy = np.sum(y_pred == y_test) / len(y_test)
print("Accuracy:", accuracy)

当你执行这个程序时,它将产生以下输出——

Accuracy: 0.9622641509433962