当我调用sample()函数时,为什么R告诉我在prob分布中有NA?

时间:2017-03-26 01:21:27

标签: bootstrapping adaboost boosting

当我尝试运行以下功能时,我遇到了问题。我得到的确切错误是:Error in sample.int(length(x), size, replace, prob) : NA in probability vector

我使用print(t)行来查看它停止的位置,它似乎是第10次迭代,此时,我看到NA中是否有w个值概率向量,但没有。最小值大约为10e-5。

有没有人有任何想法导致此错误?概率向量中的值是否可能很小,以至于R将它们解释为NA

我对函数的调用:

boosted_prediction <- boost_LS(x_train, y_train, x_test, 1500)

我的功能:

boost_LS <- function (x, y, x_test, ts) {
  n <- nrow(x)
  w <- matrix(rep(1 / n, n), n, 1)
  boost_pred <- matrix(0, nrow(x_test), 1)
  for (t in 1:ts) {
    bootstrap_index <- sample(1:n, size = n, replace = TRUE, prob = w)
    bootstrap_x <- as.matrix(x[bootstrap_index, ])
    bootstrap_y <- as.matrix(y[bootstrap_index])
    ls_w <- solve(t(bootstrap_x) %*% bootstrap_x) %*% t(bootstrap_x) %*% bootstrap_y
    pred <- sign(bootstrap_x %*% ls_w)
    e_t <- sum(w[bootstrap_y != pred])
    a_t <- 0.5 * log((1 - e_t) / e_t)
    w_hat <- matrix(0, n, 1)
    for (i in 1:n) {
      w_hat[i, 1] <- w[i, 1] * exp(-a_t * bootstrap_y[i, 1] * pred[i, 1])
    }
    w <- w_hat / sum(w_hat)
    boost_pred <- boost_pred + (a_t * (x_test %*% ls_w))
  #  print(t)
  }
  return(sign(boost_pred))
}

编辑: 所以,我发现我的错误率(e_t)在6-7次迭代后变为0,所以我的新权重概率向量(a_t)将转到Inf,弄乱了我的概率向量...

现在这不是一个调试问题,更多的是AdaBoost算法的逻辑问题。如果有人有任何提示,将不胜感激!

0 个答案:

没有答案