Aidemy Tech Blog

機械学習・ディープラーニング関連技術の活用事例や実装方法をまとめる、株式会社アイデミーの技術ブログです。

GPyOptをインストールする際の落とし穴

追記(2017/10/3):
このエラーが発生していたのは前提パッケージとなるGPyなんですが、修正版が早速公開されたようです。
以下の記述は筆者がタイミング悪く修正される前のパッケージをインストールしたときのものです。
なので似たような事例があった場合の解決方法として残しておきます。

GPyOptをインストールする際は以下のコマンドを入力してください。

pip install GPy
pip install GPyOpt

余談ですがすでにparamzはバージョン0.8.5になっていて更新が早い……。


みなさん、機械学習楽しんでますか?
そろそろ機械学習にも慣れてきてハイパーパラメーターチューニングに手を出そうと考えてる人も多いのでは?

さてそんな人なら耳には入っているであろうパラメーターをベイズ推定によりサーチするパッケージの一つGPyOptについて。

まずはGPyをインストール

GPyOptはとても便利なパッケージなためインストールも簡単……ではありません。
まずはGPyというパッケージをインストールしなければなりません。
これは次のコマンドをコマンドプロンプトに打ち込みましょう。

pip install GPy

管理者権限が必要な場合はsudoもつけてくださいね?

GPyOptをインストール……できない!

問題はここから。
次に以下のコマンドを実行します。

pip install GPyOpt

すると次のエラーが。

Collecting GPyOpt
  Using cached GPyOpt-1.0.3.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/62/7q4x8lld00d5mb54jglx5nnw0000gn/T/pip-build-5e3ix6yi/GPyOpt/setup.py", line 6, in <module>
        from GPyOpt.__version__ import __version__
      File "/private/var/folders/62/7q4x8lld00d5mb54jglx5nnw0000gn/T/pip-build-5e3ix6yi/GPyOpt/GPyOpt/__init__.py", line 7, in <module>
        from GPyOpt.core.task.space import Design_space
      File "/private/var/folders/62/7q4x8lld00d5mb54jglx5nnw0000gn/T/pip-build-5e3ix6yi/GPyOpt/GPyOpt/core/__init__.py", line 4, in <module>
        from .bo import BO
      File "/private/var/folders/62/7q4x8lld00d5mb54jglx5nnw0000gn/T/pip-build-5e3ix6yi/GPyOpt/GPyOpt/core/bo.py", line 8, in <module>
        from ..core.task.cost import CostModel
      File "/private/var/folders/62/7q4x8lld00d5mb54jglx5nnw0000gn/T/pip-build-5e3ix6yi/GPyOpt/GPyOpt/core/task/__init__.py", line 4, in <module>
        from .objective import SingleObjective
      File "/private/var/folders/62/7q4x8lld00d5mb54jglx5nnw0000gn/T/pip-build-5e3ix6yi/GPyOpt/GPyOpt/core/task/objective.py", line 8, in <module>
        import GPy
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/GPy/__init__.py", line 6, in <module>
        from . import core
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/GPy/core/__init__.py", line 4, in <module>
        from GPy.core.model import Model
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/GPy/core/model.py", line 3, in <module>
        from .parameterization.priorizable import Priorizable
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/GPy/core/parameterization/__init__.py", line 9, in <module>
        from paramz import ties_and_remappings, ObsAr
    ImportError: cannot import name 'ties_and_remappings'
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/62/7q4x8lld00d5mb54jglx5nnw0000gn/T/pip-build-5e3ix6yi/GPyOpt/

paramzの中にties_and_remappingsがないよというメッセージが。
あわててparamzの公式ドキュメントをみてみました。

ドキュメントの中にはこの関数はあるようです。

モジュールのバージョンが違った

ふとここでモジュールのバージョン違いでは?と考えバージョンを確認しました。

pip show paramz
Name: paramz
Version: 0.8.3
Summary: The Parameterization Framework
Home-page: https://github.com/sods/paramz
Author: Max Zwiessele
Author-email: ibinbei@gmail.com
License: BSD 3-clause
Location: /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
Requires: scipy, six, decorator, numpy

公式ドキュメントは0.7.4のものでした。
どうやらバージョンアップの際になくなったらしいです。

なのでいったんバージョンを下げて再インストール。

pip install paramz==0.7.4

今度はGPyOptインストール成功

もう一度GPyOptをインストール。

pip install GPyOpt

今度はうまくいきました!
ちなみにアップグレードオプションをつけるとparamzが0.8.3に戻りますが0.7.4のままにするほうが無難だと思います。

ところで、なぜGPyOptはrequirement.txtをつけていないのだろうか?
それがあればさきにpipでGPyを入れなければいけないという面倒なことをしなくて済むと思うのですが。

ちなみにparamz 0.8.3の公開日は2017/09/30だそう。
どおりで色々検索しても出ないわけだ……。