numpy 使用朴素贝叶斯计算给定Y的X

gjmwrych  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(124)

我正在学习朴素贝叶斯分类器。
我有一个向量矩阵。一些向量具有类标签1(男孩),其他向量具有类标签0(女孩)。
在每个向量中有128个特征。每个特征可以是0或-1。我需要确定每个特征为0或-1的概率,给定y为0或1。
我已经得到了下面的启动代码。课程中的一般指导是避免循环。
我已经通过所有提供的材料无数次,只是不能得到如何做到这一点。我不是在问答案,只是一些指导让我开始。

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

我想我得把男孩向量中的所有特征相加然后除以...然后把女孩向量中的所有特征相加然后除以...什么的
但是我尝试的所有与此相关的东西都没有通过自动评分测试。

nc1teljy

nc1teljy1#

首先,问题中存在混淆,因为文本说x可以是0或-1,y是0或-1,但文档字符串说x_alpha = 1和y=1或y=-1。我假设x是0或1,y是0或1。
您需要计算每个特征为0或-1的概率,假设y为0或1。这可以使用最大似然估计(MLE)通过对每个类别的每个特征为0或-1的次数进行计数,然后除以该类别中的示例总数来完成。
这里是不考虑平滑也不考虑可能的除以0误差的正(y=1)类的示例:

pos_counts = np.sum(X[Y == 1] == -1, axis=0)
total_pos = np.sum(Y == 1) 
posprob = pos_counts / total_pos

相关问题