Как реализовать стохастический градиентный спуск из следующего кода градиентного спуска?(проблема при добавлении случайной выборки) - PullRequest
0 голосов
/ 04 февраля 2019

Я изо всех сил пытаюсь сделать функцию градиентного спуска, которая у меня уже есть, в одну для стохастического градиентного спускаУ меня есть следующее:

  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].

...