优化错误最小化的代码

时间:2016-08-26 09:46:56

标签: r optimization

我已经编写了下面的代码,通过更改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值。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

替换sapply而不是for效率不高,that’s a misconception。它通常只是简单的代码。

但是,您实际上可以在代码中利用矢量化 - 会更快。

例如,sapply(error, function(x) x*x)可以简单地替换为x * x。因此,R中数字的平方误差之和仅为sum((OY - PY) ** 2)

你的整个功能归结为:

minimizeAlpha = function(Y, OY, alpha)
    sum((OY - alpha * Y) ** 2)

这应该更有效 - 但首先它是更好的代码,更具可读性。