中野智文のブログ

データ・マエショリストのメモ

Julia の GaussianProcesses のライブラリを入れようとする (2)

前回はこちら

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"

これに対して、既に修正が行われている模様:

github.com

そして実行。

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) でエラー出ず。

f:id:nakano-tomofumi:20170710191518p:plain

そして、

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

キタ━━━━(゚∀゚)━━━━!!

f:id:nakano-tomofumi:20170710191527p:plain

まとめ

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