Я поиграюсь с пакетом gradDescent
на некоторых выдуманных данных, чтобы почувствовать это. Насколько я понимаю, я должен получать аналогичные результаты как от линейной регрессии, так и от градиентного спуска, когда я применяю одни и те же данные, которые генерируются из линейного уравнения, но выходные данные сильно отличаются.
В то время как lm
дает мне разумные оценки трех коэффициентов (все из которых были установлены на 5), градиентный спуск, кажется, идет вверх. Я не думаю, что рассматриваемый набор данных нуждается в масштабировании функции, поэтому я не использовал его, что привело к оценочным коэффициентам порядка 10 ^ 22. Когда я добавил масштабирование объектов, все оценочные коэффициенты упали ниже 1. В любом случае, я не могу получить результат, даже отдаленно близкий к ожидаемым.
(Я пытался отключить сеанс и начать заново, но результаты были такими же.)
Вот как генерируется набор данных:
N <- 100
n <- 10
x1 <- runif(N, 12, 40)
x2 <- runif(N, 10, 35)
x3 <- runif(N, 8, 25)
coef <- 5
dev <- 5
y <- coef*x1 + coef*x2 + coef*x3 + rnorm(N, 0, dev)
data <- as.data.frame(cbind(x1, x2, x3, y))
names(data) <- c("x1", "x2", "x3", "y")
Я использую gradDescent
для алгоритма градиентного спуска, используя следующие версии.
gradDescentR.learn(data, featureScaling = TRUE,
scalingMethod = "MINMAX", learningMethod = "GD", control = list(),
seed = NULL)
gradDescentR.learn(data, featureScaling = FALSE,
scalingMethod = "MINMAX", learningMethod = "GD", control = list(),
seed = NULL)
Я ожидаю, что gradDescent
вернет значения около 5 для коэффициентов. Я вполне уверен, что проблема заключается где-то в настройках функций (то есть я их неправильно настраиваю), но я не могу понять, где.
Спасибо.