【问题标题】:Getting incorrect values of theta while trying to implement stochastic gradient descent在尝试实现随机梯度下降时获得不正确的 theta 值
【发布时间】:2018-09-10 03:18:50
【问题描述】:

我正在尝试实现 Stochastic Gradient Descent 逻辑回归算法。我编写了一个小的train 函数,其工作是获取theta 值/系数。但是theta 的值不正确并且与初始化的值相同。我不明白这是为什么。是不是实现随机梯度下降的正确方法?

这是我为它编写的代码:

train <- function(data, labels, alpha = 0.0009) {

  theta <- seq(from = 0, to = 1, length.out = nrow(data))

  label <- label[,shuffle]
  data <- data[,shuffle]

  for(i in seq(1:ncol(data))) {
    h = hypothesis(x, theta)
    theta <- theta - (alpha * ((h - y) * data[,i]))
  }
  return(theta)
}

请注意,数据框中的每一列都是一个输入。有 20K 列和 456 行。因此,20K 输入值用于训练。名为labels 的相应数据框具有输入训练数据的正确值。例如,data 中的第 45 列在labels 的第 45 列中具有对应的y 值。

在上面的回归中,我试图训练在标签1 和标签0 之间进行预测。所以labels是一个由01组成的数据框。

【问题讨论】:

    标签: r logistic-regression gradient-descent


    【解决方案1】:

    如果没有minimal, complete, and verifiable example,我无法为您调试,但我可以为您提供一个工具来帮助您调试它:

    在你的函数体中添加browser(),如下所示:

    train <- function(data, labels, alpha = 0.001) {
      browser()
      # ... the rest of your function
    

    使用您的数据致电train。这将打开一个浏览器会话。您可以输入help(不是函数,只是help)来获取在浏览器中导航的命令,但通常使用ns 来单步执行语句(s 将单步执行嵌套函数调用,n 将跳过)。如果您在 RStudio 中执行此操作,您可以密切关注您的环境选项卡以查看值是什么,例如 theta 是什么,并查看当前的回溯。您还可以在执行环境中评估任何 R 表达式,例如 tail(theta)Q 退出浏览器。

    我建议特别探索 hypothesis 的返回值(如果它几乎不总是 1,我会感到惊讶)。但我认为您还有其他问题导致了您描述的不良行为(theta 的返回值与其初始分配没有变化)。

    编辑:

    修正错字:label 每次都应该是labels

    比较你返回的总和与初始化时的theta 的总和,你会发现返回值与你初始化的theta 不同。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 2016-09-25
      • 2014-02-16
      • 2021-06-19
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多