【机器学习】朴素贝叶斯

2024-09-06 02:04
文章标签 学习 机器 贝叶斯 朴素

本文主要是介绍【机器学习】朴素贝叶斯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3. 朴素贝叶斯

素贝叶斯算法(Naive Bayes)是一种基于贝叶斯定理的简单而有效的分类算法。其“朴素”之处在于假设各特征之间相互独立,即在给定类别的条件下,各个特征是独立的。尽管这一假设在实际中不一定成立,合理的平滑技术和数据预处理仍能使其在许多任务中表现良好。

优点

  • 速度快:由于朴素贝叶斯仅需计算简单的概率,训练和预测的速度非常快。
  • 适用于高维数据:即使在特征数量多的情况下,朴素贝叶斯仍然表现良好,且不会陷入维度灾难。
  • 适合多类分类:朴素贝叶斯可以自然地处理多类分类问题。
  • 鲁棒性:对缺失数据和少量噪声不敏感,能在有限的数据集上表现稳定。

缺点

  • 特征独立假设不成立时效果下降:特征之间若存在高度依赖性,朴素贝叶斯的性能可能会大幅降低。
  • 数据稀疏问题:尤其是多项式和伯努利模型,面对稀疏数据时容易出现概率为零的情况,因此需要平滑技术(如拉普拉斯平滑)来缓解这个问题。
3.1 贝叶斯定理

贝叶斯定理是朴素贝叶斯算法的核心公式,它将后验概率表示为先验概率、似然和证据的关系:

P ( C k ∣ X ) = P ( X ∣ C k ) ⋅ P ( C k ) P ( X ) P(C_k|X) = \frac{P(X|C_k) \cdot P(C_k)}{P(X)} P(CkX)=P(X)P(XCk)P(Ck)

其中:

  • P ( C k ∣ X ) P(C_k|X) P(CkX) 是类别 C k C_k Ck 在给定特征 X X X 下的后验概率;
  • P ( X ∣ C k ) P(X|C_k) P(XCk) 是在类别 C k C_k Ck 下特征 X X X 出现的条件概率(即似然);
  • P ( C k ) P(C_k) P(Ck) 是类别 C k C_k Ck 的先验概率;
  • P ( X ) P(X) P(X) 是边缘概率,可以忽略,因为它对于所有类别 C k C_k Ck 相同。
3.2 极大似然估计

朴素贝叶斯的核心假设是条件独立性,即假设在给定类别的条件下,特征之间相互独立。对于特征向量 X = ( x 1 , x 2 , . . . , x n ) X = (x_1, x_2, ..., x_n) X=(x1,x2,...,xn),我们有:

P ( X ∣ C ) = P ( x 1 ∣ C ) ⋅ P ( x 2 ∣ C ) ⋅ … ⋅ P ( x n ∣ C ) P(X|C) = P(x_1|C) \cdot P(x_2|C) \cdot \ldots \cdot P(x_n|C) P(XC)=P(x1C)P(x2C)P(xnC)

这一假设使得模型简化为每个特征独立对分类结果的贡献。朴素贝叶斯模型的分类过程是通过最大化后验概率来进行的:

C ^ = argmax C P ( C ∣ X ) \hat{C} = \underset{C}{\text{argmax}} \ P(C|X) C^=Cargmax P(CX)

根据贝叶斯定理,可以转换为:

C ^ = argmax C P ( X ∣ C ) ⋅ P ( C ) \hat{C} = \underset{C}{\text{argmax}} \ P(X|C) \cdot P(C) C^=Cargmax P(XC)P(C)

其中 P ( X ∣ C ) P(X|C) P(XC) 的计算可以通过假设特征独立性简化为各个特征的条件概率的乘积。在不知道 P ( C k ) P(C_k) P(Ck) P ( X ∣ C k ) P(X|C_k) P(XCk) 的情况下,我们可以使用极大似然估计来估计这些概率。

1. 先验概率的极大似然估计

对于类别 C k C_k Ck 的先验概率 P ( C k ) P(C_k) P(Ck),假设类别 C k C_k Ck 在训练集中以独立同分布的方式出现。基于极大似然估计,先验概率可以通过类别 C k C_k Ck 出现的频率来估计。设 n n n 是总样本数, I ( y i = C k ) I(y_i = C_k) I(yi=Ck) 为指示函数,当第 i i i 个样本属于类别 C k C_k Ck 时取 1,否则取 0。则先验概率 P ( C k ) P(C_k) P(Ck) 估计为:

P ( C k ) = ∑ i = 1 n I ( y i = C k ) n P(C_k) = \frac{\sum_{i=1}^n I(y_i = C_k)}{n} P(Ck)=ni=1nI(yi=Ck)

这里, I ( ⋅ ) I(\cdot) I() 是指示函数,即当条件成立时值为 1,否则为 0。

2. 条件概率的极大似然估计

条件概率 P ( X ∣ C k ) P(X|C_k) P(XCk) 表示在类别 C k C_k Ck 给定的条件下,特征向量 X X X 出现的概率。假设特征之间条件独立,特征向量 X = ( x 1 , x 2 , … , x m ) X = (x_1, x_2, \ldots, x_m) X=(x1,x2,,xm),则:

P ( X ∣ C k ) = ∏ j = 1 m P ( x j ∣ C k ) P(X|C_k) = \prod_{j=1}^{m} P(x_j|C_k) P(XCk)=j=1mP(xjCk)

我们使用极大似然估计来估计每个特征 x j x_j xj 在类别 C k C_k Ck 下的条件概率。假设第 j j j 个特征是离散的(如词频或二元特征),则:

P ( x j ∣ C k ) = ∑ i = 1 n I ( x i j = 1 and  y i = C k ) ∑ i = 1 n I ( y i = C k ) P(x_j|C_k) = \frac{\sum_{i=1}^n I(x_{ij} = 1 \ \text{and} \ y_i = C_k)}{\sum_{i=1}^n I(y_i = C_k)} P(xjCk)=i=1nI(yi=Ck)i=1nI(xij=1 and yi=Ck)

其中 x i j x_{ij} xij 表示第 i i i 个样本的第 j j j 个特征的取值。这个估计表示第 j j j 个特征在类别 C k C_k Ck 下出现的频率。

3.3 后验概率最大化

我们的目标是最大化后验概率 P ( C k ∣ X ) P(C_k|X) P(CkX),根据贝叶斯定理,可以写为:

P ( C k ∣ X ) = P ( X ∣ C k ) ⋅ P ( C k ) P ( X ) P(C_k|X) = \frac{P(X|C_k) \cdot P(C_k)}{P(X)} P(CkX)=P(X)P(XCk)P(Ck)

由于边缘概率 P ( X ) P(X) P(X) 对所有类别 C k C_k Ck 都相同,在分类问题中我们可以忽略它。因此,最大化后验概率 P ( C k ∣ X ) P(C_k|X) P(CkX) 等价于最大化 P ( X ∣ C k ) ⋅ P ( C k ) P(X|C_k) \cdot P(C_k) P(XCk)P(Ck)

C ^ = argmax C k P ( X ∣ C k ) ⋅ P ( C k ) \hat{C} = \underset{C_k}{\text{argmax}} \ P(X|C_k) \cdot P(C_k) C^=Ckargmax P(XCk)P(Ck)

结合极大似然估计的结果,我们有:

C ^ = argmax C k ( ∏ j = 1 m P ( x j ∣ C k ) ⋅ P ( C k ) ) \hat{C} = \underset{C_k}{\text{argmax}} \ \left( \prod_{j=1}^m P(x_j|C_k) \cdot P(C_k) \right) C^=Ckargmax (j=1mP(xjCk)P(Ck))

由于对数函数是单调递增的,我们可以取对数,将乘法转换为加法,得到更便于计算的公式:

C ^ = argmax C k ( ∑ j = 1 m log ⁡ P ( x j ∣ C k ) + log ⁡ P ( C k ) ) \hat{C} = \underset{C_k}{\text{argmax}} \ \left( \sum_{j=1}^m \log P(x_j|C_k) + \log P(C_k) \right) C^=Ckargmax (j=1mlogP(xjCk)+logP(Ck))

3.4 拉普拉斯平滑

在实际应用中,如果某个特征在类别 C k C_k Ck 中未出现,即 ∑ I ( x i j = 1 and  y i = C k ) = 0 \sum I(x_{ij} = 1 \ \text{and} \ y_i = C_k) = 0 I(xij=1 and yi=Ck)=0,则 P ( x j ∣ C k ) = 0 P(x_j|C_k) = 0 P(xjCk)=0,这会导致整个后验概率 P ( C k ∣ X ) = 0 P(C_k|X) = 0 P(CkX)=0。为了避免这种情况,我们使用拉普拉斯平滑。

拉普拉斯平滑的基本思想是对每个计数增加一个常数 α > 0 \alpha > 0 α>0,通常取 α = 1 \alpha = 1 α=1。经过平滑处理后,条件概率 P ( x j ∣ C k ) P(x_j|C_k) P(xjCk) 的估计变为:

P ( x j ∣ C k ) = ∑ i = 1 n I ( x i j = 1 and  y i = C k ) + α ∑ i = 1 n I ( y i = C k ) + α ⋅ 2 P(x_j|C_k) = \frac{\sum_{i=1}^n I(x_{ij} = 1 \ \text{and} \ y_i = C_k) + \alpha}{\sum_{i=1}^n I(y_i = C_k) + \alpha \cdot 2} P(xjCk)=i=1nI(yi=Ck)+α2i=1nI(xij=1 and yi=Ck)+α

这里的 2 2 2 是因为 x j x_j xj 是二元特征(取值为 0 或 1),如果特征有更多的取值(如多项分布),则分母的平滑项应该为 α ⋅ 取值数 \alpha \cdot \text{取值数} α取值数

3.5 贝叶斯估计

贝叶斯估计是一种将先验知识与数据相结合的概率估计方法。拉普拉斯平滑可以看作是贝叶斯估计的一种特殊形式。通过贝叶斯估计,我们为 P ( x j ∣ C k ) P(x_j|C_k) P(xjCk) 设定一个先验分布,将其与数据观察结合,得到修正后的估计值:

P ( x j ∣ C k ) = ∑ i = 1 n I ( x i j = 1 and  y i = C k ) + α ∑ i = 1 n I ( y i = C k ) + α ⋅ 特征取值数 P(x_j|C_k) = \frac{\sum_{i=1}^n I(x_{ij} = 1 \ \text{and} \ y_i = C_k) + \alpha}{\sum_{i=1}^n I(y_i = C_k) + \alpha \cdot \text{特征取值数}} P(xjCk)=i=1nI(yi=Ck)+α特征取值数i=1nI(xij=1 and yi=Ck)+α

其中 α \alpha α 是平滑参数,通常设置为 1(即拉普拉斯平滑)。当 α > 1 \alpha > 1 α>1 时,平滑效果更强,适合处理极端数据稀疏的情况。

3.7 代码实现

以下是一个简单的朴素贝叶斯分类器实现(以多项式朴素贝叶斯为例):

import numpy as npclass NaiveBayes:def fit(self, X, y):n_samples, n_features = X.shapeself._classes = np.unique(y)n_classes = len(self._classes)# 初始化先验概率和条件概率self._priors = np.zeros(n_classes, dtype=np.float64)self._likelihoods = np.zeros((n_classes, n_features), dtype=np.float64)for idx, c in enumerate(self._classes):X_c = X[y == c]self._priors[idx] = X_c.shape[0] / float(n_samples)self._likelihoods[idx, :] = (X_c.sum(axis=0) + 1) / (X_c.shape[0] + n_features)def predict(self, X):return [self._predict(x) for x in X]def _predict(self, x):posteriors = []for idx, c in enumerate(self._classes):prior = np.log(self._priors[idx])likelihood = np.sum(np.log(self._likelihoods[idx, :]) * x)posteriors.append(prior + likelihood)return self._classes[np.argmax(posteriors)]# 使用实例
X_train = np.array([[1, 0, 1], [1, 1, 0], [0, 1, 1], [0, 0, 1]])
y_train = np.array([0, 0, 1, 1])nb = NaiveBayes()
nb.fit(X_train, y_train)
X_test = np.array([[1, 0, 0], [0, 1, 0]])
predictions = nb.predict(X_test)
print(predictions)

在实际应用中,使用Scikit-learn的GaussianNBMultinomialNBBernoulliNB类可以更高效地实现朴素贝叶斯模型。

这篇关于【机器学习】朴素贝叶斯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140684

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个