在尝试实现随机梯度下降时获取不正确的 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
是一个由 0
和 1
.
组成的数据框
没有 minimal, complete, and verifiable example,我无法为您调试它,但我可以为您提供一个工具来帮助您调试它:
像这样在函数体中添加 browser()
:
train <- function(data, labels, alpha = 0.001) {
browser()
# ... the rest of your function
使用您的数据调用 train
。这将打开一个浏览器会话。您可以输入 help
(不是函数,只是 help
)来获取在浏览器中导航的命令,但一般情况下,使用 n
和 s
来单步执行语句(s
将单步执行嵌套函数调用,n
将单步执行)。如果您在 RStudio 中执行此操作,您可以留意您的环境选项卡以查看 theta
等的值,并查看当前回溯。您还可以在执行环境中评估任何 R 表达式,例如 tail(theta)
。 Q
退出浏览器。
我建议特别探索 hypothesis
return 的内容(如果不是几乎总是 1,我会感到惊讶)。但我认为您还有其他问题导致您描述的不良行为(theta
的 return 值未从其初始分配改变)。
编辑:
修正错别字:label
每次都应该是labels
。
将 return 的总和与 theta
的总和进行比较,因为它已初始化,您会发现 return 值与初始化的 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
是一个由 0
和 1
.
没有 minimal, complete, and verifiable example,我无法为您调试它,但我可以为您提供一个工具来帮助您调试它:
像这样在函数体中添加 browser()
:
train <- function(data, labels, alpha = 0.001) {
browser()
# ... the rest of your function
使用您的数据调用 train
。这将打开一个浏览器会话。您可以输入 help
(不是函数,只是 help
)来获取在浏览器中导航的命令,但一般情况下,使用 n
和 s
来单步执行语句(s
将单步执行嵌套函数调用,n
将单步执行)。如果您在 RStudio 中执行此操作,您可以留意您的环境选项卡以查看 theta
等的值,并查看当前回溯。您还可以在执行环境中评估任何 R 表达式,例如 tail(theta)
。 Q
退出浏览器。
我建议特别探索 hypothesis
return 的内容(如果不是几乎总是 1,我会感到惊讶)。但我认为您还有其他问题导致您描述的不良行为(theta
的 return 值未从其初始分配改变)。
编辑:
修正错别字:label
每次都应该是labels
。
将 return 的总和与 theta
的总和进行比较,因为它已初始化,您会发现 return 值与初始化的 theta
。希望对您有所帮助!