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

朴素贝叶斯分类器:求给定类别下特征条件概率的入门指导请求

朴素贝叶斯分类器特征概率计算入门指导

我正在学习Naïve Bayes Classifier,现有一个向量矩阵:

  • 部分向量类别标签为1(代表boy),其余为0(代表girl)
  • 每个向量包含128个特征,特征值仅为0或-1
  • 需要计算给定y=0或1时,每个特征为0或-1的概率

已获得初始代码(见下方),课程要求避免使用循环。我尝试用对boy类向量的特征求和后做除法、girl类同理的思路,但无法通过自动评分测试,仅需入门指导,不要直接给答案。

def naivebayesPXY(X,Y):
    """
    naivebayesPXY(X, Y) returns [posprob,negprob]
    
    Input:
        X : n input vectors of d dimensions (nxd)
        Y : n labels (-1 or +1) (n)
    
    Output:
        posprob: probability vector of p(x_alpha = 1|y=1)  (d)
        negprob: probability vector of p(x_alpha = 1|y=-1) (d)
    """
    
    # add one positive and negative example to avoid division by zero ("plus-one smoothing")
    n, d = X.shape
    X = np.concatenate([X, np.ones((2,d)), np.zeros((2,d))])
    Y = np.concatenate([Y, [-1,1,-1,1]])
    
    
    return posprob,negprob

无循环实现核心指导

  • 分离正负样本:用NumPy布尔索引直接提取对应类别的特征矩阵,例如X_pos = X[Y == 1]、X_neg = X[Y == -1],无需遍历每个样本。
  • 修正特征值映射:你的特征值是0/-1,但函数输出要求的是p(x_alpha=1|y=类别),必须明确两者的对应关系——比如原特征为0时是否对应x_alpha=1,原特征为-1时是否对应x_alpha=0,这是你之前思路可能出错的关键。
  • 按列统计特征出现次数:对分离后的样本矩阵,用np.sum(..., axis=0)按列求和,直接得到每个特征在对应类别中满足x_alpha=1的样本数,axis=0确保统计的是每个特征维度的总和。
  • 结合平滑计算概率:代码已经追加了拉普拉斯平滑的样本,计算概率时分母要包含这些新增样本(比如正类总样本数是len(X_pos)),分子是特征出现次数加上平滑的对应计数,最终得到每个特征的条件概率。

常见排查点

  • 特征值映射逻辑是否和输出要求的概率定义匹配?
  • 求和时是否正确设置了axis参数,确保按特征维度统计?
  • 计算总样本数时是否包含了代码中追加的平滑样本?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:32:35