龙空技术网

简单理解朴素贝叶斯分类器实现

你看我独角兽吗 659

前言:

眼前小伙伴们对“贝叶斯分类器的简单理解”大约比较讲究,朋友们都需要了解一些“贝叶斯分类器的简单理解”的相关文章。那么小编在网上搜集了一些关于“贝叶斯分类器的简单理解””的相关文章,希望朋友们能喜欢,小伙伴们快快来了解一下吧!

本文讨论了朴素贝叶斯分类器背后的理论及其实现。

朴素贝叶斯分类器是基于贝叶斯定理的分类算法的集合。它不是一个单一的算法,而是一个算法族,所有算法都有一个共同的原则,即每对被分类的特征都是相互独立的。

首先,让我们考虑一个数据集。考虑一个虚构的数据集,该数据集描述了打高尔夫球的天气条件。给定天气条件,每个元组将条件分类为适合(“是”)或不适合(“否”)打高尔夫球。

数据集分为两部分,即特征矩阵标签

特征矩阵包含数据集的所有向量(行),其中每个向量由相关特征的值组成。在上面的数据集中,特征是“Outlook”、“Temperature”、“Humidity”和“Windy”。标签包含特征矩阵每一行的类变量(预测或输出)的值。在上面的数据集中,类变量名称是“打高尔夫球”。

假设: 朴素贝叶斯的基本假设是每个特征都会产生独立的、平等的对结果的贡献。

关于我们的数据集,这个概念可以理解为:

我们假设没有一对特征是相关的。例如,“热”的温度与湿度无关,或者“多雨”的前景对风没有影响。因此,假设特征是独立的其次,每个特征被赋予相同的权重(或重要性)。例如,仅了解温度和湿度并不能准确预测结果。没有任何属性是无关紧要的,并且假定它们对结果的贡献相同。

**注意:朴素贝叶斯所做的假设在现实世界中通常并不正确。事实上,独立性假设从来都不是正确的,但在实践中往往运作还好。

现在,在转向朴素贝叶斯的公式之前,了解贝叶斯定理很重要。

贝叶斯定理

贝叶斯定理在给定另一个事件已经发生的概率的情况下计算事件发生的概率。贝叶斯定理在数学上表述为以下等式:

其中 A 和 B 是事件并且 P(B) ≠ 0。

基本上,我们试图找到事件A的概率,给定事件B为真。事件B也称为证据P(A)是A的先验(先验概率,即事件发生在证据出现之前的概率)。证据是未知实例(这里是事件 B)的一个属性值。P(A|B)是B的后验概率,即看到证据后事件发生的概率。

现在,关于我们的数据集,我们可以通过以下方式应用贝叶斯定理:

其中,y 是类变量,X 是相关特征向量(大小为n),其中:

为了清楚起见,特征向量和相应类变量的示例可以是:(参考数据集的第一行)

X = (Rainy, Hot, High, False)y = No

所以基本上,这里的 P(y|X) 意味着,假设天气条件是“多雨的前景”、“温度很热”、“高湿度”和“无风”,“不打高尔夫球”的概率。

天真的假设

现在,是时候对贝叶斯定理进行一个朴素的假设,即特征之间的独立性。所以现在我们将证据分成独立的部分。

现在,如果任意两个事件 A 和 B 是独立的,那么:

P(A,B) = P(A)P(B)

因此,我们得出以下结果:

可以表示为:

现在,由于给定输入的分母保持不变,我们可以删除该项:

现在,我们需要创建一个分类器模型。为此,我们找到给定输入集对于变量y的所有可能值的概率,并以最大概率获取输出。

这可以在数学上表示为:

所以,最后,我们剩下的任务是计算 P(y) 和 P(xi | y)。

请注意,P(y) 也称为类别概率,P(xi | y) 称为条件概率

不同的朴素贝叶斯分类器的不同之处主要在于它们对 P(xi | y)的分布所做的假设。

让我们尝试在我们的天气数据集上手动应用上述公式。为此,我们需要对数据集进行一些预计算。

我们需要为X中的每个xi和y中的yj找到 P(xi | yj ) 。所有这些计算都在下表中进行了说明:

因此,在上图中,我们在表中为X 中的每个 x i和 y 中的 y j手动计算了 P(xi |yj )。例如,在温度凉爽的情况下打高尔夫球的概率,即 P(temp. = 凉爽 | 打高尔夫球 = Yes) = 3/9。

此外,我们还需要找到已在表 5 中计算的类别概率 (P(y))。例如,P(打高尔夫球 = 是) = 9/14。

所以现在,我们完成了预计算,分类器也准备好了!

让我们在一组新功能上对其进行测试(我们今天称之为):

today = (Sunny, Hot, Normal, False)

因此,打高尔夫球的概率由下式给出:

不打高尔夫球的概率由下式给出:

由于 P(today) 在两种概率中都很常见,我们可以忽略 P(today) 并找到比例概率为:

现在,因为

通过使总和等于 1(归一化),可以将这些数字转换为概率:

自从

因此,关于打高尔夫球的预测是“是”。

我们上面讨论的方法适用于离散数据。在连续数据的情况下,我们需要对每个特征值的分布做出一些假设。不同的朴素贝叶斯分类器的不同之处主要在于它们对P(x|y)的分布所做的假设。

现在,我们在这里讨论其中一个分类器。

高斯朴素贝叶斯分类器

在高斯朴素贝叶斯中,假设与每个特征关联的连续值服从高斯分布。高斯分布也称为正态分布。绘制时,它会给出一条钟形曲线,该曲线关于特征值的平均值对称,如下所示:

假定特征的可能性是高斯分布的,因此,条件概率由下式给出:

现在,我们看一下使用 scikit-learn 的高斯朴素贝叶斯分类器的实现。

# load the iris datasetfrom sklearn.datasets import load_irisiris = load_iris()# store the feature matrix (X) and response vector (y)X = iris.datay = iris.target# splitting X and y into training and testing setsfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)# training the model on training setfrom sklearn.naive_bayes import GaussianNBgnb = GaussianNB()gnb.fit(X_train, y_train)# making predictions on the testing sety_pred = gnb.predict(X_test)# comparing actual response values (y_test) with predicted response values (y_pred)from sklearn import metricsprint("Gaussian Naive Bayes model accuracy(in %):", metrics.accuracy_score(y_test, y_pred)*100)

输出:

Gaussian Naive Bayes model accuracy(in %): 95.0

其他流行的朴素贝叶斯分类器是:

多项式朴素贝叶斯: 特征向量代表多项式分布生成某些事件的频率。这是通常用于文档分类的事件模型。伯努利朴素贝叶斯:在多元伯努利事件模型中,特征是描述输入的独立布尔值(二进制变量)。与多项式模型一样,该模型在文档分类任务中很受欢迎,其中使用二进制术语出现(即一个词是否出现在文档中)特征而不是术语频率(即文档中一个词的频率)。

当我们到达本文的结尾时,这里有一些要点需要思考:

尽管它们的假设明显过于简化,但朴素贝叶斯分类器在许多现实世界的情况下都运行良好,著名的文档分类和垃圾邮件过滤。他们需要少量的训练数据来估计必要的参数。与更复杂的方法相比,朴素贝叶斯学习器和分类器可以非常快。类条件特征分布的解耦意味着每个分布都可以独立地估计为一维分布。这反过来又有助于缓解维度灾难带来的问题。

标签: #贝叶斯分类器的简单理解 #贝叶斯分类器的简单理解和应用实验报告