Scikit学习线性回归——学习率和epoch调整

数据挖掘 scikit-学习 线性回归 时代 学习率
2022-02-02 18:49:09

我正在尝试从头开始使用普通最小二乘和梯度下降来学习线性回归。

我阅读了 Scikit 学习功能的文档,但没有看到调整学习率或sklearn.linear_model.LinearRegression班级时期的方法。

线性回归模型是否有标准学习率?

我假设的时期是由误差函数的变化决定的,因此取决于数据集,在收敛之前有一些预定的最大值。

是否有任何其他具有线性回归模型的好软件包,我可以使用可调节的学习率和时期来测试我自己的模型?

2个回答

线性回归模型y=βX+u可以通过使用在一个“回合”中解决(XX)1Xy=β^. 它也可以使用梯度下降来解决,但不需要调整学习率或 epoch 数之类的东西,因为求解器(通常)收敛没有太多麻烦。

这是一个最小的例子R

x0 <- c(1,1,1,1,1) 
x1 <- c(1,2,3,4,5)
x2 <- c(8,4,3,1,8)
x <- as.matrix(cbind(x0,x1,x2))
y <- as.matrix(c(3,7,5,11,14))

x
y

# (X'X)^-1 X'y
beta1 = solve(t(x)%*%x) %*% t(x)%*%y 

# R's regression command
beta2 = summary(lm(y ~ x[, 2:3]))

# Gradient decent
m <- nrow(y)
grad <- function(x, y, theta) {
  gradient <- (1/m)* (t(x) %*% ((x %*% t(theta)) - y))
  return(t(gradient))
}

# define gradient descent update algorithm
grad.descent <- function(x, maxit){
  theta <- matrix(c(0, 0, 0), nrow=1) # Initialize the parameters
  
  alpha = .05 # set learning rate
  for (i in 1:maxit) {
    theta <- theta - alpha  * grad(x, y, theta)   
  }
  return(theta)
}

# results without feature scaling
print(grad.descent(x,2000))
beta1
beta2

您可以使用scikit learn 中提供的SGDRegressor来调整学习率。它有多种可以调整的参数。