在训练集矩阵中扫描 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 向量,xmean
和 xsd
,您可以使用 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) })
作为机器学习 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 向量,xmean
和 xsd
,您可以使用 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) })