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



我正在尝试实现逻辑回归的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

如果没有最小,完整和可验证的例子,我就无法为您调试,但是我可以为您提供一个工具来帮助您调试它:

在您的功能正文中添加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不同。希望有帮助!

最新更新