Я использую набор данных Boston в качестве своего ввода, и я пытаюсь построить модель для прогнозирования MEDV (медианные значения занимаемого владельцем жилья в 1000 долларов США) с использованием RM (среднее количество комнат на одно жилье)Разница в значениях Theta между градиентным спуском и линейной моделью в R
Я укрепил следующий код от Digitheads blog, а не так сильно, как вы можете видеть.
Мой код выглядит следующим образом:
#library(datasets)
#data("Boston")
x <- Boston$rm
y <- Boston$medv
# fit a linear model
res <- lm(y ~ x)
print(res)
Call:
lm(formula = y ~ x)
Coefficients:
(Intercept) x
-34.671 9.102
# plot the data and the model
plot(x,y, col=rgb(0.2,0.4,0.6,0.4), main='Linear regression')
abline(res, col='blue')
# squared error cost function
cost <- function(X, y, theta) {
sum((X %*% theta - y)^2)/(2*length(y))
}
# learning rate and iteration limit
alpha <- 0.01
num_iters <- 1000
# keep history
cost_history <- double(num_iters)
theta_history <- list(num_iters)
# initialize coefficients
theta <- matrix(c(0,0), nrow=2)
# add a column of 1's for the intercept coefficient
X <- cbind(1, matrix(x))
# gradient descent
for (i in 1:num_iters) {
error <- (X %*% theta - y)
delta <- t(X) %*% error/length(y)
theta <- theta - alpha * delta
cost_history[i] <- cost(X, y, theta)
theta_history[[i]] <- theta
}
print(theta)
[,1]
[1,] -3.431269
[2,] 4.191125
Согласно Digitheads блога, его значение для тета, используя лм (линейная модель) и его значение от градиента матча спуска, в то время как у меня нет. Разве эти цифры не совпадают?
Как вы можете видеть из графика для различных значений тета, мой последний y-перехват не подсчитывает значение печати (тета) несколько строк вверх?
Может кто-нибудь сделать предложение о том, куда я иду не так?
Я думаю, что это просто требуется время, чтобы сходиться. Если я повторно запустил вашу модель, но увеличил число итераций до 50 тыс. Или 100 тыс., Я получаю тот же результат, что и оценки ols. – gfgm
@GabrielFGeislerMesevage. Да, увеличивая итерации, я получаю то же значение для GD, что и OLS. Пожалуйста, бросьте комментарий в качестве ответа, и я с радостью буду принимать его в качестве правильного ответа. Большое спасибо. – TheGoat
Спасибо. Добавлен комментарий в качестве ответа. – gfgm