[英]Optim Julia parameter meaning
我正在嘗試在 Julia 中使用 Optim 來解決兩個變量最小化問題,類似於以下內容
x = [1.0, 2.0, 3.0]
y = 1.0 .+ 2.0 .* x .+ [-0.3, 0.3, -0.1]
function sqerror(betas, X, Y)
err = 0.0
for i in 1:length(X)
pred_i = betas[1] + betas[2] * X[i]
err += (Y[i] - pred_i)^2
end
return err
end
res = optimize(b -> sqerror(b, x, y), [0.0,0.0])
res.minimizer
我不太明白[0.0,0.0]
是什么意思。 通過查看文檔http://julianlsolvers.github.io/Optim.jl/v0.9.3/user/minimization/ 。 我的理解是它是初始條件。 但是,如果我將其更改為[0.0,0., 0.0]
,盡管我只有兩個未知數,但該算法仍然有效,並且該算法給了我三個而不是兩個最小化器。 我想知道是否有人知道[0.0,0.0]
真正代表什么。
是初值。 自行optimize
無法知道您的sqerror
function 需要多少個值。 您通過傳遞此初始值來指定它。
例如,如果您將維度檢查添加到sqerror
,您將得到一個正確的錯誤:
julia> function sqerror(betas::AbstractVector, X::AbstractVector, Y::AbstractVector)
@assert length(betas) == 2
err = 0.0
for i in eachindex(X, Y)
pred_i = betas[1] + betas[2] * X[i]
err += (Y[i] - pred_i)^2
end
return err
end
sqerror (generic function with 2 methods)
julia> optimize(b -> sqerror(b, x, y), [0.0,0.0,0.0])
ERROR: AssertionError: length(betas) == 2
請注意,我還將循環條件更改為eachindex(X, Y)
以確保您的 function 檢查X
和Y
向量是否具有對齊索引。
最后,如果您想要性能並降低編譯成本(例如,假設您多次進行此優化),最好像這樣定義優化的 function:
objective_factory(x, y) = b -> sqerror(b, x, y)
optimize(objective_factory(x, y), [0.0,0.0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.