在训练集矩阵中扫描 log-dnorm 以找到对数似然

Sweep a log-dnorm across a training set matrix to find log-likelihood

作为机器学习 class 作业的一部分,我在不使用任何外部库的情况下实现 NaiveBayes classifier。

我的训练数据集 X 有 8 个特征和一个 800 行的二进制标签;我已经通过 class 计算了每个特征的均值和标准差的 1:8 向量,以及两个 classes.

的先验值

为了评估 classifier 在训练数据集上的准确性,我想生成一个具有相同维度 (i=800, j=8) 的矩阵 Y,其中每个元素 y_ij 给出为

y_ij = dnorm(x_ij, mean = mean_j, sd_j, log = T)

我试过扫描、应用和 lapply 都没有成功。我被困住了,不幸的是,这是熟悉 R 而不是理解算法的问题。非常感谢帮助。

可能有更好的数据设置,但如果您已经有 X 和两个均值和 sds 向量,xmeanxsd,您可以使用 sapply.这是一个可重现的例子:

X <- matrix(rnorm(30), 10, 3)
xmean <- apply(X, 2, mean)
xsd <- apply(X, 2, sd)
sapply(1:ncol(X), function(j) { dnorm(X[,j], xmean[j], xsd[j], log = TRUE) })