R循环直到满足条件
R loop until condition is met
在用 R 做一个项目时,我被困在了某个地方。
这些是我的数据:
r <- 0.001
a <- 0.386
b <- 0.799
yp <- b*df$x+a
sse <- ((df$y-yp)^2)*0.5
a <- a-r*sum(-(df$y-yp))
b <- b-r*sum(-(df$y-yp)*df$x)
如何找到 SSE 误差为 0.0001 的迭代次数?
您可以执行一个 while
循环,将每次迭代的误差平方和存储在一个向量中。当平方和停止下降时循环停止,此时我们应该有一个准确的 a
和 b
,迭代次数由 sse
向量的长度给出。
df <- data.frame(x=c(1.0,2.1,2.2,3.5,5.3,5.4,6.5,7.4),
y=c(4,4,4,5,5,6,8,8))
r <- 0.001
a <- 0.386
b <- 0.799
yp <- b * df$x + a
sse <- sum(((df$y - yp)^2))
while(TRUE)
{
a <- a - r * sum(-(df$y - yp))
b <- b - r * sum(-(df$y - yp) * df$x)
yp <- b * df$x + a
sse <- c(sse, sum((df$y - yp)^2))
if(tail(sse, 1) >= sse[length(sse) - 1]) break
}
要查看结果,我们可以这样做:
cat('iterations: ', length(sse), '\n Intercept = ', a, '\n Slope = ', b, '\n')
#> iterations: 9152
#> Intercept = 2.691678
#> Slope = 0.6726519
而且我们可以看到我们的结果是正确的(精确到小数点后六位) 运行 和 lm
:
coef(lm(y~x, df))
#> (Intercept) x
#> 2.6916789 0.6726517
由 reprex package (v2.0.1)
于 2022-03-15 创建
在用 R 做一个项目时,我被困在了某个地方。 这些是我的数据:
r <- 0.001
a <- 0.386
b <- 0.799
yp <- b*df$x+a
sse <- ((df$y-yp)^2)*0.5
a <- a-r*sum(-(df$y-yp))
b <- b-r*sum(-(df$y-yp)*df$x)
如何找到 SSE 误差为 0.0001 的迭代次数?
您可以执行一个 while
循环,将每次迭代的误差平方和存储在一个向量中。当平方和停止下降时循环停止,此时我们应该有一个准确的 a
和 b
,迭代次数由 sse
向量的长度给出。
df <- data.frame(x=c(1.0,2.1,2.2,3.5,5.3,5.4,6.5,7.4),
y=c(4,4,4,5,5,6,8,8))
r <- 0.001
a <- 0.386
b <- 0.799
yp <- b * df$x + a
sse <- sum(((df$y - yp)^2))
while(TRUE)
{
a <- a - r * sum(-(df$y - yp))
b <- b - r * sum(-(df$y - yp) * df$x)
yp <- b * df$x + a
sse <- c(sse, sum((df$y - yp)^2))
if(tail(sse, 1) >= sse[length(sse) - 1]) break
}
要查看结果,我们可以这样做:
cat('iterations: ', length(sse), '\n Intercept = ', a, '\n Slope = ', b, '\n')
#> iterations: 9152
#> Intercept = 2.691678
#> Slope = 0.6726519
而且我们可以看到我们的结果是正确的(精确到小数点后六位) 运行 和 lm
:
coef(lm(y~x, df))
#> (Intercept) x
#> 2.6916789 0.6726517
由 reprex package (v2.0.1)
于 2022-03-15 创建