我试图编写一个函数来计算线性回归模型的梯度下降。但是,我得到的答案与我使用正规方程方法得到的答案不匹配。
我的样本数据是:
df <- data.frame(c(1,5,6),c(3,5,6),c(4,6,8))
其中 c(4,6,8) 是 y 值。
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).
希望有人可以阐明我在此功能中出错的地方。