Я не понимаю, как работает метод pregnet.naiveBayes , если есть два неправильных использования функций, то есть isnumeric [attribs [v]] и ISLOGICAL [attribs [v]] .
По моему мнению, должно быть is.numeric (attribs [v]) и is.logical (attribs [v]) , соответственно.
Код ниже:
...
L <- sapply(1:nrow(newdata), function(i) {
ndata <- newdata[i, ]
L <- log(object$apriori) + apply(log(sapply(seq_along(attribs),
function(v) {
nd <- ndata[attribs[v]]
if (is.na(nd)) rep(1, length(object$apriori)) else {
prob <- if (isnumeric[attribs[v]]) {
msd <- object$tables[[v]]
msd[, 2][msd[, 2] <= eps] <- threshold
dnorm(nd, msd[, 1], msd[, 2])
} else object$tables[[v]][, nd + islogical[attribs[v]]]
prob[prob <= eps] <- threshold
prob
}
})), 1, sum)
if (type == "class")
L
else {
## Numerically unstable:
## L <- exp(L)
## L / sum(L)
## instead, we use:
sapply(L, function(lp) {
1/sum(exp(L - lp))
})
}
})
...
Все работает нормально, когда я использую наивный байесовский классификатор из пакета, но это довольно странно из-за этих несоответствий.Кто-нибудь может объяснить мне мои сомнения?