当我尝试运行以下功能时,我遇到了问题。我得到的确切错误是: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算法的逻辑问题。如果有人有任何提示,将不胜感激!