Я изо всех сил пытаюсь сделать функцию градиентного спуска, которая у меня уже есть, в одну для стохастического градиентного спускаУ меня есть следующее:
gd <- function(f, grad, y, X, theta0, npars, ndata, a, niters) {
theta <- matrix(data=NA, nrow=niters, ncol=npars)
cost <- vector(mode="numeric", length=niters)
theta[1, ] <- theta0
cost[1] <- f(y, X, theta0, ndata)
for (i in 2:niters) {
theta[i, ] <- theta[i-1, ]-a*grad(y, X, theta[i-1, ], ndata)
cost[i] <- f(y, X, theta[i, ], ndata)
}
return(list(theta=theta, cost=cost))
}
Этот код работает нормально.Я пытаюсь сделать это так, вместо ndata <- 1000
, у меня есть 100 точек случайной выборки.Я попытался изменить вторую часть на
for (i in 2:niters) {
samp <- sample(ndata, nsubsamples)
theta[i, ] <- theta[i-1, ]-a*grad(y[samp,], X[samp,], theta[i-1, ], nsubsamples)
cost[i] <- f(y, X, theta[i, ], nsubsamples)
, но я получаю сообщение об ошибке:
Ошибка в y [samp,]: неверное количество измерений.
My y
- это столбец из набора данных с именем simulated_data
с 1000 наблюдениями.При попытке получить из него 100 случайных выборок (nsubsamples = 100 и ndata = 1000, simulated_data[samp,]$y
работает, но simulated_data$y[samp,]
нет. Но мой y
должен быть определен как simulated_data$y
.
.Мне интересно, есть ли более простой способ добавить случайную выборку, и, если бы я это сделал, остальная часть моего кода была правильной (поскольку я немного запутался, если мне нужно было использовать ndata
или nsubsamples
для theta[i]
и cost[i]
.