Я попытался написать функцию для вычисления градиентного спуска для модели линейной регрессии. Однако ответы, которые я получал, не соответствуют ответам, которые я получаю, используя метод нормальных уравнений.Ошибка при вычислении градиента спуска
Мои данные выборки:
df <- data.frame(c(1,5,6),c(3,5,6),c(4,6,8))
с С (4,6,8) быть значения у.
lm_gradient_descent <- function(df,learning_rate, y_col=length(df),scale=TRUE){
n_features <- length(df) #n_features is the number of features in the data set
#using mean normalization to scale features
if(scale==TRUE){
for (i in 1:(n_features)){
df[,i] <- (df[,i]-mean(df[,i]))/sd(df[,i])
}
}
y_data <- df[,y_col]
df[,y_col] <- NULL
par <- rep(1,n_features)
df <- merge(1,df)
data_mat <- data.matrix(df)
#we need a temp_arr to store each iteration of parameter values so that we can do a
#simultaneous update
temp_arr <- rep(0,n_features)
diff <- 1
while(diff>0.0000001){
for (i in 1:(n_features)){
temp_arr[i] <- par[i]-learning_rate*sum((data_mat%*%par-y_data)*df[,i])/length(y_data)
}
diff <- par[1]-temp_arr[1]
print(diff)
par <- temp_arr
}
return(par)
}
Выполнение этой функции
lm_gradient_descent(df,0.0001,,0)
результаты, которые я получил, были
c(0.9165891,0.6115482,0.5652970)
, когда я использую обычный метод уравнение, я получаю
c(2,1,0).
Надежда кто-то может пролить свет на то, куда я пошел rong в этой функции.
Пожалуйста, добавьте ожидаемые и фактические результаты на ваш вопрос. – belwood
@belwood, спасибо за ответ, я добавил результаты на вопрос. – xyy