ゆるふわめも

東京か京都にいます。

Latexでのアルゴリズム・擬似コードの記述例

いっつも検索してる気がするのでメモ。

ドキュメント

LaTeX/Algorithms - Wikibooks, open books for an open world

記述例

(〜省略〜)

\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}

\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother

(〜省略〜)

\caption{My algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{MyProcedure}{}
\State $\textit{stringlen} \gets \text{length of }\textit{string}$
\State $i \gets \textit{patlen}$
\BState \emph{top}:
\If {$i > \textit{stringlen}$} \Return false
\EndIf
\State $j \gets \textit{patlen}$
\BState \emph{loop}:
\If {$\textit{string}(i) = \textit{path}(j)$}
\State $j \gets j-1$.
\State $i \gets i-1$.
\State \textbf{goto} \emph{loop}.
\State \textbf{close};
\EndIf
\State $i \gets i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
\State \textbf{goto} \emph{top}.
\EndProcedure
\end{algorithmic}
\end{algorithm}

エラー解決:auto-sklearnやSMAC3.0のインストールがpyrfrのエラーで終了する

pyrfr関係のエラーは探すとたくさん。はまってしまって時間が持ってかれた。

pyrfrはSMACと言うアルゴリズムで使用するRandomForestで使用するライブラリ。

エラー内容

XXXXX@XXXXX:~/SMAC3$ cat requirements.txt | xargs -n 1 -L 1 pip install

Requirement already satisfied: setuptools in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: numpy>=1.7.1 in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: scipy>=0.18.1 in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: numpy>=1.8.2 in /usr/local/lib/python2.7/dist-packages (from scipy>=0.18.1)
Requirement already satisfied: six in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: psutil in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: pynisher>=0.4.1 in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: psutil in /usr/local/lib/python2.7/dist-packages (from pynisher>=0.4.1)
Requirement already satisfied: setuptools in /usr/local/lib/python2.7/dist-packages (from pynisher>=0.4.1)
Requirement already satisfied: docutils>=0.3 in /usr/local/lib/python2.7/dist-packages (from pynisher>=0.4.1)
Requirement already satisfied: ConfigSpace>=0.3.2 in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: pyparsing in /usr/lib/python2.7/dist-packages (from ConfigSpace>=0.3.2)
Requirement already satisfied: argparse in /usr/lib/python2.7 (from ConfigSpace>=0.3.2)
Requirement already satisfied: numpy in /usr/local/lib/python2.7/dist-packages (from ConfigSpace>=0.3.2)
Requirement already satisfied: typing in /usr/local/lib/python2.7/dist-packages (from ConfigSpace>=0.3.2)
Requirement already satisfied: scikit-learn in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied: typing in /usr/local/lib/python2.7/dist-packages
Collecting pyrfr>=0.4.0
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
  SNIMissingWarning
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Using cached pyrfr-0.4.0.tar.gz
Building wheels for collected packages: pyrfr
  Running setup.py bdist_wheel for pyrfr ... error
  Complete output from command /usr/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-JRv08f/pyrfr/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmpYpeMtzpip-wheel- --python-tag cp27:
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-2.7
  creating build/lib.linux-x86_64-2.7/pyrfr
  copying pyrfr/__init__.py -> build/lib.linux-x86_64-2.7/pyrfr
  running build_ext
  building '_regression' extension
  swigging pyrfr/regression.i to pyrfr/regression_wrap.cpp
  swig -python -c++ -I${CMAKE_SOURCE_DIR}/include -I./include -o pyrfr/regression_wrap.cpp pyrfr/regression.i
  ./include/rfr/trees/binary_fanova_tree.hpp:329: Error: Syntax error in input(3).
  error: command 'swig' failed with exit status 1

環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

解決法

swig2.0.0 から swig3.0へ。

$ apt-get remove swig
$ apt-get install swig3.0
$ ln -s /usr/bin/swig3.0 /usr/bin/swig

pyrfr関連のエラー

同じエラーで止まっている方もいるけど、おそらくswigが原因だと思う。

pyrfrはインストールできるけれど、pyrfrの訓練(rf.model.fit)で止まるケースは rng オプションがバージョンによって扱いが変わっていることが原因。以下の最後の方を参照。

paper.hatenadiary.jp

エラー解決:HPOlib2のインストール

HPOlib2はブラックボックス関数最適化問題のアルゴリズムをいくつか実装したベンチマークです。Anacondaでの仮想環境にて利用するまで。ドキュメントのインストール方法が失敗してしまったのでメモ。HPOlib2の前身となるHPOlibのドキュメントはこちら

インストールまで

環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

git リポジトリをクローン

# openmlのインストール用
$ git clone https://github.com/openml/openml-python.git 
# HPOlibのインストール用
$ git clone https://github.com/automl/HPOlib2.git
# ConfigSpaceのインストール用
$ git clone https://github.com/automl/ConfigSpace.git

環境の作成

本日時点では Ubuntu, python3.5 でしか動作チェックsがされていないのでpython3.5を利用します。

$ conda create hpolib_env python=3.5 anaconda
$ source activate hpolib_env

関連ライブラリのインストール

$ curl https://raw.githubusercontent.com/automl/HPOlib2/master/requirements.txt | xargs -n 1 -L 1 conda install
$ curl https://raw.githubusercontent.com/automl/HPOlib2/master/optional-requirements.txt | xargs -n 1 -L 1 conda install

※上のコマンドはエラー結構出ます。

さらに

$ conda install numpy scipy pandas scikit-learn

を実行。

HPOlibのインストール

クローンしたHPOlib2ディレクトリ以下で

$ python setup.py install

ConfigSpaceのインストール

クローンしたConfigSpaceディレクトリ以下で

$ python setup.py install

openmlのインストール

クローンしたopenmlディレクトリ以下で

$ python setup.py install

最後にサンプルが実行できるかを確認(python test.py)して、終了。

test.py

from hpolib.benchmarks.ml import svm_benchmark

b = svm_benchmark.SvmOnMnist()

# Evaluate one configuration
res = b.objective_function(configuration=[5, -5])

# Evaluate one configuration on a subset
res = b.objective_function(configuration=[5, -5], dataset_fraction=0.5)

pynisherのインストール

実験の時のリソースの制限などをつけるために利用。研究での計算時間測定などには欠かせない。

pyrfrのインストール

pip install pyrfrでのインストールができなくなっているので、こちらを参考にしてインストール。

paper.hatenadiary.jp

その他エラーなど

Not foundとなったライブラリは適宜インストールしたのですが、

  File "/home/XXXX/lib/python3.4/site-packages/smac/epm/rf_with_instances.py", line 124, in _train
    self.rf.fit(data, rng=self.rng)
TypeError: fit() got an unexpected keyword argument 'rng'

のエラーがどうしても解決せず。

rf_with_instances.py#L124

121        self.rf = regression.binary_rss_forest()
122        self.rf.options = self.rf_opts
123        data = self.__init_data_container(self.X, self.y)
124        self.rf.fit(data, rng=self.rng)
125        return self

となっていますが、pyrfrでは the_forest.fit(data, rng)としてランダムフォレストを訓練してます。 適宜コードの中で訓練をする箇所のrng=...を書き換えて動作しました。バージョン変わったらまたここの仕様で詰まりそうなのでメモ。

the kancolle effect(艦これ効果)とは

使用例

2014年8月

インドネシア語ですが。

2016年3月

2016年12月

2017年7月

ツイッターで見かけたので調べてみました。艦これ効果の意味は「戦艦や神様の検索結果がゲームやアニメのキャラで埋まる現象」みたいなニュアンスかな。 正直なところほとんど使われてはいない様子。ネタがわかる人の間で通じるスラングと言った方が正しいかも?

スラングの辞書として有名なUrban Dictionaryに「kancolle effect」を載せて、4chやredditで使っていけばスラングとして流行るかもしれないですね。ちなみに「kancolle」は載ってました。以下参照。

And no, there is no such thing as kancolle the animation. (引用元: urban dictionary, kancolle)

ずっと昔に、redditでみた気がしたから探したら以下の

があった。これも「艦これのせいで検索結果が美少女ばっかなんだが」みたいなスレだけどワードの初出場所はわからない。個人的にはfate-effect だと fat-effect に見えるからkancolle-effectの方がいいかな。

redditのFaryshtaさんの

i want that loli. is the anime good?

 

is the loli worth the time?

 

(呂500の画像集のリンクを貼ってくれた人に対して) you are a gentleman and an schoolar, this link will help the development of science for generations.

のコメントを見るに(the loli は 呂500のことです)、海外でも艦これ興味ある人は結構いるんだなあ、としみじみ。

その他

kancolle effectとは関係ないですが宣伝、暇な人はぜひKanColle Waifu Warsに投票しましょ。

Google Clowd Engineでjupyter notebookを利用する

インスタンスに入る

gcloud compute ssh <インスタンス名>

static IPを追加

GCPのメニュー「Networking」以下の「External IP addresses」から追加

firewall ruleを確認

アクセスできない場合はfirewall ruleがアクセスを弾いていないか確認。

ドキュメント: Using Firewall Rules  |  Compute Engine Documentation  |  Google Cloud Platform

jupyterにアクセス

jupyter notebook --ip=0.0.0.0 --port=XXXXとして ステップ2で追加した Static IP:XXXX にアクセス

jupyter の起動やIP、パスワードの設定は以下のドキュメント参照してください。

ドキュメント:Running a notebook server — Jupyter Notebook 5.1.0.dev documentation