Неизвестное использование функций в исходном коде метода gnast.naiveBayes в пакете e1071
Я не понимаю, как работает метод realt.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))
})
}
})
...
Все работает нормально, когда я использую наивный байесовский классификатор из пакета, но это довольно странно из-за этих несоответствий. Кто-нибудь может объяснить мне мои сомнения?
1 ответ
Всего две строки над отрывком кода - это то, что вы ожидаете:
isnumeric <- sapply(newdata, is.numeric)
islogical <- sapply(newdata, is.logical)
То есть, isnumeric
а также islogical
не являются функциями, они являются корректно определенными логическими векторами.