Я реализую свою функцию в R и пытаюсь по результатам определить, соответствует ли она ожиданиям.Функция, которую я пытаюсь оценить:
Функция работает нормально, пока я не увеличу размер своей матрицы данных (например, она работает для N =10, но не тогда, когда N = 12, и пример будет опубликован ниже.)
Я уверен, что что-то связано с моей реализацией или проблемами с переполнением.
# Generate Sample Data
gen.sample <- function(n){
x <- runif(n,min = -5,max = 5)
y <- ifelse(x < 0,-1,1)
return(data.frame(x,y))
}
# Objective function L_D
obj_fun <- function(X,y,alpha){
N <- length(X)
inner.product <- numeric(N)
for(i in 1:N){
for(k in 1:N){
inner.product[k] <- alpha[i]*alpha[k]*
y[i]*y[k]*(t(as.numeric(X[i]))%*%as.numeric(X[k]))
}
}
L_D <- sum(alpha) - 0.5*sum(inner.product)
return(L_D)
}
# L_D works when N = 10
set.seed(4997)
options(digits = 4,scipen = -4)
N = 10
sample.data <- gen.sample(n=N)
X.data <- sample.data$x
y.vec <- sample.data$y
alpha.vector <- matrix(rep(c(-5,-4,-3,-2,-1,0,1,2,3,4,5),11*N),ncol = 11, nrow = N, byrow = TRUE)
for(j in 1:N){
alpha.vector[j,2] <- rnorm(1,5,5)
}
for(i in 1:N){
print(obj_fun(X = X.data, y = y.vec, alpha = alpha.vector[i,]))
}
# It produces all NA when N = 12
set.seed(4997)
options(digits = 4,scipen = -4)
N = 12
sample.data <- gen.sample(n=N)
X.data <- sample.data$x
y.vec <- sample.data$y
alpha.vector <- matrix(rep(c(-5,-4,-3,-2,-1,0,1,2,3,4,5),11*N),ncol = 11, nrow = N, byrow = TRUE)
for(j in 1:N){
alpha.vector[j,2] <- rnorm(1,5,5)
}
for(i in 1:N){
print(obj_fun(X = X.data, y = y.vec, alpha = alpha.vector[i,]))
}
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
Чтопойдет не так?Я не вижу проблемы.
Любая помощь будет отличной!