You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BernoulliNB分类器代码工作原理解析及第5行逻辑疑问

Bernoulli Naive Bayes分类器代码逻辑解析

这段代码是伯努利朴素贝叶斯分类器中统计类别-特征出现次数的核心步骤,用来为后续计算条件概率做准备,以下是逐行拆解:

整体功能

针对数据集中的每个类别,统计该类别样本里每个二元特征(0/1取值)出现的总次数(因为伯努利模型的特征只有“出现(1)”和“不出现(0)”两种状态,求和等价于统计1的个数)。

逐行详解

  • counts = {}:创建一个空字典,用来存储「类别标签」对应「特征计数数组」的键值对。
  • for label in np.unique(y)::遍历数据集中所有不重复的类别标签(np.unique(y)会自动去除y中的重复值,比如y是[0,1,0,1]时,会得到[0,1]两个类别)。
  • counts[label] = X[y == label].sum(axis=0):这行是核心,拆解成三步理解:
    1. y == label:生成一个和y长度相同的布尔数组,数组中为True的位置,对应原数据中属于当前label类别的样本。
    2. X[y == label]:用上述布尔数组对特征矩阵X做行筛选,得到一个子矩阵——仅包含当前类别下的所有样本,行是样本,列是特征。
    3. .sum(axis=0):沿着列方向(axis=0代表按列聚合)求和。对每个特征列来说,把该类别所有样本的特征值(0或1)相加,结果就是这个特征在当前类别中出现的总次数。

直观示例

假设特征矩阵X和标签y如下:

X = np.array([[1,0,1],
              [0,1,1],
              [1,1,0],
              [0,0,1]])
y = np.array([0,1,0,1])
  • 当label=0时,y == 0得到[True, False, True, False],筛选X后得到子矩阵[[1,0,1],[1,1,0]],sum(axis=0)计算结果为[2,1,1]——意思是类别0中,第1个特征出现2次,第2个特征出现1次,第3个特征出现1次。
  • 当label=1时,筛选后的X子矩阵是[[0,1,1],[0,0,1]],求和结果为[0,1,2]——类别1中第1个特征出现0次,第2个出现1次,第3个出现2次。

这些计数结果是伯努利朴素贝叶斯计算条件概率的基础,后续会结合拉普拉斯平滑(避免概率为0)和类别样本总数,得到每个特征在对应类别下的出现概率。

内容的提问来源于stack exchange,提问作者Maedeh Rahimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:32:40