Неизвестное использование функций в исходном коде методаgnast.naiveBayes в пакете e1071 - PullRequest
0 голосов
/ 27 октября 2018

Я не понимаю, как работает метод 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))
            })
        }
    })
... 

Все работает нормально, когда я использую наивный байесовский классификатор из пакета, но это довольно странно из-за этих несоответствий.Кто-нибудь может объяснить мне мои сомнения?

1 Ответ

0 голосов
/ 27 октября 2018

Всего в двух строках над фрагментом кода в основном то, что вы ожидаете:

isnumeric <- sapply(newdata, is.numeric)
islogical <- sapply(newdata, is.logical)

То есть isnumeric и islogical не являются функциями, они являются корректно определенными логическими векторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...