在尝试实现随机梯度下降时获取不正确的 theta 值

Getting incorrect values of theta while trying to implement stochastic gradient descent

我正在尝试实施 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.

组成的数据框

没有 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 return 的内容(如果不是几乎总是 1,我会感到惊讶)。但我认为您还有其他问题导致您描述的不良行为(theta 的 return 值未从其初始分配改变)。

编辑:

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

将 return 的总和与 theta 的总和进行比较,因为它已初始化,您会发现 return 值与初始化的 theta。希望对您有所帮助!