作为机器学习课程作业的一部分,我正在实现一个不使用任何外部库的朴素贝叶斯分类器。
我的训练数据集X有8个特征和一个二元标签,共有800行;我已经按类别计算了每个特征的均值和标准差的1:8向量,以及两个类别的先验概率。
为了评估分类器在训练数据集上的准确性,我想生成一个具有相同维度(i=800, j=8)的矩阵Y,其中每个元素y_ij 定义为
y_ij = dnorm(x_ij, mean = mean_j, sd_j, log = T)
我尝试过使用sweep, apply 和 lapply 但都没有成功。我现在卡住了,不幸的是,这更多是由于对R语言的不熟悉,而不是对算法的理解。非常感谢您的帮助。
回答:
可能有更好的数据设置方法,但如果你已经有了X
以及均值和标准差的两个向量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) })
🐙