R中梯度下降的线性回归
linear regression by gradient desent in R
我是机器学习的新手,目前正在尝试使用 R 进行线性回归,我的代码如下:
x <- runif(1000, -5, 5)
y <- runif(1000, -2, 2)
z <- x + y
res <- lm(z ~ x + y)
alpha <- 0.01
num_iters <- 10000
theta <- matrix(c(0,0,0), nrow = 3)
X <- cbind(1, matrix(x), matrix(y))
for (i in 1:num_iters){
cost <- (X %*% theta - y)
delta <- t(X) %*% cost / length(y)
theta <- theta - alpha * delta
}
你可以看到梯度10000次后,结果theta与res不同,这是R的函数lm导致的,有人能告诉我我错过了什么吗?
您只需要一个小改动,您尝试建模的变量是 z
而不是 y
:
set.seed(0)
x <- runif(1000,-5,5)
y <- runif(1000,-2,2)
z <- x+y
res <- lm(z~x+y)
alpha <- 0.01
num_iters <- 10000
theta <- matrix(c(0,0,0), nrow=3)
X <- cbind(1, matrix(x), matrix(y))
for (i in 1:num_iters){
cost <- (X%*%theta-z) ##What was y is now z
delta <- t(X)%*%cost/length(y)
theta <- theta-alpha*delta
}
theta
# [,1]
#[1,] -1.56669e-16
#[2,] 1.00000e+00
#[3,] 1.00000e+00
我是机器学习的新手,目前正在尝试使用 R 进行线性回归,我的代码如下:
x <- runif(1000, -5, 5)
y <- runif(1000, -2, 2)
z <- x + y
res <- lm(z ~ x + y)
alpha <- 0.01
num_iters <- 10000
theta <- matrix(c(0,0,0), nrow = 3)
X <- cbind(1, matrix(x), matrix(y))
for (i in 1:num_iters){
cost <- (X %*% theta - y)
delta <- t(X) %*% cost / length(y)
theta <- theta - alpha * delta
}
你可以看到梯度10000次后,结果theta与res不同,这是R的函数lm导致的,有人能告诉我我错过了什么吗?
您只需要一个小改动,您尝试建模的变量是 z
而不是 y
:
set.seed(0)
x <- runif(1000,-5,5)
y <- runif(1000,-2,2)
z <- x+y
res <- lm(z~x+y)
alpha <- 0.01
num_iters <- 10000
theta <- matrix(c(0,0,0), nrow=3)
X <- cbind(1, matrix(x), matrix(y))
for (i in 1:num_iters){
cost <- (X%*%theta-z) ##What was y is now z
delta <- t(X)%*%cost/length(y)
theta <- theta-alpha*delta
}
theta
# [,1]
#[1,] -1.56669e-16
#[2,] 1.00000e+00
#[3,] 1.00000e+00