luggage baggage

Machine learning, data analysis, web technologies and things around me.

Python データ可視化ライブラリ altair で高解像度 png 画像を保存するには

Python のデータ可視化ライブラリは複数あり、matplotlib や seaborn を使う場合が多いのではないかと思います。特に seaborn は出版品質の図が手軽に作れるため便利で、実際に機械学習系の論文ではこのライブラリで用意したであろうグラフをよく見かけます。

Altair(アルタイルと読む)は、R でいうところの ggplot2 に近いノリの可視化ライブラリで、プロットに関する制御性が高いことが特徴です。例えば、複数の機械学習モデルに対し精度が得られているとして、精度順にソートされたモデル名を x 軸のラベルとしたプロットをするには、altair では実質1行追加するだけで対応できます。また最近は可視化ライブラリのスタンダードとしても認知されてきており、スタンフォード大学のデータ可視化の授業 CS 448B Visualization (Winter 2020) では altair が使用されています。


先日 altair を使っていたところ、 png 画像としてグラフを保存すると解像度が低くプレゼンテーション資料に掲載するには向かない、ということを経験しました。この記事ではその対策を書いておこうかと思います。

続きを読む

『モンテカルロ統計計算』章末問題を Julia で解く:第3章「積分法」

『モンテカルロ統計計算』(講談社、鎌谷研吾 著、駒木文保 編)の章末問題を Julia で解くシリーズ第2回で、今回は第3章「積分法」です。解析計算するだけの問題は割愛。

続きを読む

『モンテカルロ統計計算』章末問題を Julia で解く:第2章「乱数」

Julia 言語と MCMC の勉強のため、R 向けに書かれている教科書『モンテカルロ統計計算』(講談社、鎌谷研吾 著、駒木文保 編)の章末問題を解いていこうかと思います。また、単に問題解くだけでは面白くなかったりもするので、適宜 Python との比較などを追加しているものもあります。

今回は、第2章「乱数」です。

続きを読む

Optuna で混合ガウス分布の混合比を推定(パラメータ間に依存関係・制約条件がある場合の例)

機械学習モデルのハイパーパラメータを最適化するのに Optuna を使っている人も多いと思います。最適化目標(深層学習のロスや RMSE など)を決め、探索空間を適当に設定するだけでいい感じにパラメータを求めてくれるので便利ですね。

ところで、Optuna におけるパラメータの指定方法は、基本的には各パラメータごとに独立におこなうものと理解しています。これは例えば機械学習モデルのハイパラサーチのときには自然な設定だと思われるのですが、パラメータの和が一定値になる、みたいな制約(等号制約)下ではどのようにすればよいか理解していませんでした。

そこでこの記事では、この種の問題の例として、混合ガウス分布の混合比を Optuna に決定させてみます。混合ガウス分布は複数のガウス分布の重み付け和として得られる分布であり、この重み(混合比)は当然和が 1 になります。

続きを読む

GitHub stars に見る Julia 言語の人気ライブラリトップ30

私は普段 Python を使った機械学習アルゴリズムの開発とか統計分析に関わっていますが、最近どうも Julia 言語 julialang が気になっています。よくある scikit-learn や pandas もしくは PyTorch などに不満を感じることはあまりないのですが、みんな Julia とそのライブラリをなんのために使っているのかな?というのがいま知りたいことです。

そこで、GitHub のパブリックレポジトリを “jl language:jl” で検索し、star 数上位30位まで見て様子をうかがってみることにしました。

長くなるので目次をここに

  • まずはランキングから
  • まとめると
  • 参考文献など
続きを読む

遺伝研スパコンで Visual Studio Code を使う

私は最近、国立遺伝学研究所が運営するスパコンにお世話になっています。特に CPU ヘビーな計算をさせる場合に重宝しています。遺伝研スパコンは、通常、まずゲートウェイノードに SSH した後にログインノードに改めてログインすることで開発作業を進めることができる約束となっています(その後に計算ノードにジョブを投げる)。この記事では、ログインノード上で VSCode を使うための方法を共有します。

なお、この方法をブログ上で公開することは遺伝研スパコン運営側から許可をいただいております。また、ゲートウェイノード上で VSCode を動作させることは許可されておりませんので、ご注意を。

続きを読む

jax を使いコンタクトマップをマイクロ秒で計算する

先日、PDB ファイルから読んだタンパク質座標データを元に、コンタクトマップを numpy でミリ秒オーダーで計算する方法を書きました。
PDB ファイルを読み込みコンタクトマップをミリ秒で計算する - luggage baggage
コンタクトマップとは、3次元空間内に存在するタンパク質を構成する炭素原子同士の距離を計算し(distance map)、一定の閾値以下であればコンタクトしている、と判定するものです。

今回は、Google が実験的に公開している jax という "numpy with GPU/TPU" とでも言えるライブラリ*1を使うことで、マイクロ秒オーダーで計算する方法を紹介したいと思います。なお jax の大きな特徴の一つは自動微分機能ですが、今回はこれに触れず、単に numpy like な API を使った計算を手軽に GPU 上で走らせるためのものとして使います。

続きを読む