Почему результаты градиентного спуска так далеки от результатов? - PullRequest
1 голос
/ 23 апреля 2019

Я поиграюсь с пакетом 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 для коэффициентов. Я вполне уверен, что проблема заключается где-то в настройках функций (то есть я их неправильно настраиваю), но я не могу понять, где.

Спасибо.

...