簡體   English   中英

Optim Julia參數含義

[英]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 檢查XY向量是否具有對齊索引。

最后,如果您想要性能並降低編譯成本(例如,假設您多次進行此優化),最好像這樣定義優化的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM