前回はこちら
nakano-tomofumi.hatenablog.com
Optim の仕様変更への対応
問題のエラーは、次のようなもの
julia> optimize!(gp)
ERROR: MethodError: no method matching set_params!(::GaussianProcesses.GP, ::Float64; noise=true, mean=true, kern=true)
Closest candidates are:
set_params!(::GaussianProcesses.GP, ::Array{Float64,1}; noise, mean, kern) at /Users/xxxxx/.julia/v0.5/GaussianProcesses/src/GP.jl:275
set_params!{K<:GaussianProcesses.Kernel}(::GaussianProcesses.Masked{K<:GaussianProcesses.Kernel}, ::Any) at /Users/xxxxxx/.julia/v0.5/GaussianProcesses/src/kernels/masked_kernel.jl:55 got unsupported keyword arguments "noise", "mean", "kern"
これに対して、既に修正が行われている模様:
そして実行。
julia> Pkg.checkout("GaussianProcesses")
INFO: Checking out GaussianProcesses master...
INFO: Pulling GaussianProcesses latest master...
INFO: No packages to install, update or remove
おや?変化なし。
パッケージが最新版を見ていない模様。
julia> Pkg.status() 4 required packages: - GaussianProcesses 0.4.0+ master
statusを見ると、master を見ていることになっている。再コンパイルが必要?
最新のブランチを反映させる方法を知らないため、一旦 exit() し、再び julia を起動し、using で呼び出し。
次は、plot(gp) でエラーだ。
なので、 一旦、Pkg.free("GaussianProcesses") で元に戻す。
そして、再び exit して、その後、Pkg.checkout("GaussianProcesses") を実行。
plot(gp) でエラー出ず。

そして、
julia> optimize!(gp) Results of Optimization Algorithm * Algorithm: Conjugate Gradient * Starting Point: [-1.0,0.0,0.0,0.0] * Minimizer: [-3.506712993556627,-0.080606913136668, ...] * Minimum: -3.600592e+00 * Iterations: 19 * Convergence: false * |x - x'| < 1.0e-32: false * |f(x) - f(x')| / |f(x)| < 1.0e-32: false * |g(x)| < 1.0e-08: false * f(x) > f(x'): true * Reached Maximum Number of Iterations: false * Objective Function Calls: 69 * Gradient Calls: 50
キタ━━━━(゚∀゚)━━━━!!

まとめ
一応、Juliaのライブラリ GaussianProcesses で超パラメータの最適化は出来た。
しかし、他のライブラリ(Optim)の勝手なバージョンアップ等もあって、うまく動くことは保証されない。
今後も勝手なバージョンアップがありそうだから、ビジネス用途には全く向いていない。あくまで遊び(教育用途)レベルにとどめておくべき。