朴素贝叶斯分类器:求给定类别下特征条件概率的入门指导请求
朴素贝叶斯分类器特征概率计算入门指导
我正在学习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
相关产品推荐
相关产品推荐

