【发布时间】:2023-03-19 15:36:01
【问题描述】:
我已经编写了下面的代码,通过更改 alpha 的值(使用迭代方法)来最小化错误。
set.seed(16)
npoints = 10000
Y = round(runif(npoints), 3)
OY = sample(c(0, 1, 0.5), npoints, replace = T)
minimizeAlpha = function(Y, OY, alpha) {
PY = alpha*Y
error = OY - PY
squaredError = sapply(error, function(x) x*x)
sse = sum(squaredError)
return(sse)
}
# # Iterate for 10000 values
alphas = seq(0.0001, 1, 0.0001)
sse = sapply(alphas, function(x) minimizeAlpha(Y, OY, x))
print(alphas[sse == min(sse)])
我使用sapply 进行基本优化。但是,如果点数超过 10000,则此代码将永远运行。那么,有没有更好的实现方式或任何标准技术来优化(如Bisection)。如果可以,请帮我优化代码。
注意:我需要至少 4 位小数的 alpha 值。
感谢任何帮助。
【问题讨论】:
-
使用
vapply并使用返回值,即vapply(alpphas, function(x) minimizeAlpha(Y, OY, x), numeric(1)),您可能会获得一些效率 -
应该看Code Review
-
将
for替换为sapply不是优化,这是一种误解。 -
@akrun -
sse = vapply(alphas, FUN = function(x) minimizeAlpha(Y, OY, x), FUN.VALUE = 0.0)。代码仍然永远运行。这是正确的语法吗? -
我对@987654330@ 说了一些效率,但没那么多。否则,一种选择可能是按“Y”、“OY”的长度复制 alpha,反之亦然,并应用该函数并替换函数中的
sapply。
标签: r optimization