私は、反復法を使用してアルファの値を変更することによって、エラーの最小化のために以下のコードを書いています。エラー最小化のためのコードの最適化
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小数のアルファ値が必要です。
何か助けていただければ幸いです。
'vapply'で効率を得ることができます。返り値' vapply(alpphas、function(x)minimizeAlpha(Y、OY、x)、numeric(1)) ' – akrun
[codereview.se ] –
'for 'を' sapply'に置き換えることは最適化ではなく、誤解です。 –