在线岭回归中的正则化参数

时间:2016-06-08 03:28:32

标签: r regression

我有伪代码,但我仍然在努力在在线模式下实现岭回归。我使用双重形式,所以我不知道如何更新a,以及其他困难。伪代码是here

到目前为止,我已经写了以下内容:

输入为:x(1),...,x(m)m个向量和y(1),...,y(m)个目标。

输出为:f(x 1),...,f(x [m])模型预测

Ridge.Regression<-function(m,x){

b<- rep(0,m)

A<- a * diag(nrow(x)) 

for (t in 1:m){

    pred[,t]<- b * (solve(A) %*% x[t,])

    A<- A + x[t,] %*% x[t,] 

    b<- y[t] * x[t,]

    b<- b + (y[t] * x[t,])

    return(pred)}}

我上面所做的不起作用。输入向量b和矩阵A的初始化有什么问题?

具有参数a的常量值是没有意义的。我们在批量学习中使用交叉验证。什么在在线学习中使用?

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些维度不匹配。 根据我的理解,您的样本大小为nm预测变量或回归量可供选择。

让我们一步一步走。

  1. 我提到你的链接,gamma是一个1 X 1的值。 相反,你有pre [,t]和n X 1。您可以将pred[,t]称为pred[t]您还有向量b,其尺寸为m乘以1而不是 n乘1。
  2. 另请注意,您对矩阵A的初始选择是
    对角线。请不要使用solve反转对角矩阵。 如果您的矩阵没有任何矩阵,solve是理想的选择 特殊结构。 solve对于R来说是一项昂贵的操作 表演。
  3. 接下来更新A时,您需要意识到A是n×n矩阵 初始矩阵值与调整参数对角。什么时候 你正在执行矩阵乘法x[t,] %*% x[t,] 两个n乘1向量的顺序不通勤。而不是尝试写作 x[t,] %*% t(x[t, ])这可确保您创建一个n×n矩阵。
  4. b没有以正确的方式更新。你在做什么 替换零的初始向量并通过y[t] * x[t,]更新它 然后,您再次更新b。你的第三行 循环看起来多余。
  5. 为什么不试试这段代码

    set.seed(54) # a random seed
    n <- 100     # sample size
    m <-40      # number of predictors 
    
    # create n X m design matrix
    x <- matrix(runif(n), nrow = n, ncol = m)
    
    # Initialize b with zero vector
    b <- rep(0, n) 
    
    y <- rnorm(m) # m by 1 vector
    
    a <- 5     # choice of tuning parameter depends on user
    A <- diag(a, n)
    pred <- rep(0, n) #initialize output
      Ridge.Regression<-function(m, x, b, a, n){
          #Arguments X must be a design matrix
          # m is the number of predictors
          # b is n X 1 vector
          # n is the sample size
          # a is the tuning parameter
          # Function returns predicted values.
    
    
      ainv <- (1/a)
      Ainv <- diag(ainv, n)
      for (t in 1:m){
    
        pred[t] <- t(b) %*% (Ainv %*% x[,t])
    
        A <- A + x[,t] %*% t(x[, t])
        Ainv <- solve(A) # using solve since A may not have special sturcture
    
        b <- b + (y[t] * x[,t]) # update b
        }
      return(pred)
      }
    

    我希望这对你来说是一个很好的答案。