luggage baggage

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

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

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

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

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

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

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

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

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

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

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

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

私は最近、国立遺伝学研究所が運営するスパコンにお世話になっています。特に CPU ヘビーな計算をさせる場合に重宝しています。遺伝研スパコンは、通常、まずゲートウェイノードに SSH した後にログインノードに改めてログインすることで開発作業を進めるこ…

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

先日、PDB ファイルから読んだタンパク質座標データを元に、コンタクトマップを numpy でミリ秒オーダーで計算する方法を書きました。 PDB ファイルを読み込みコンタクトマップをミリ秒で計算する - luggage baggage コンタクトマップとは、3次元空間内に存…

PDB ファイルを読み込みコンタクトマップをミリ秒で計算する

タンパク質の構造解析をする際、各アミノ酸残基が近接しているかどうかを記述するコンタクトマップが役立つ場合があります。通例、コンタクトマップは各アミノ酸の Cα の三次元座標を用いて、互いの距離が一定以下(8Åとすることが多い)であれば近接してい…

Albumentations で TypeError: __init__() got an unexpected keyword argument 'keypoint_params' が出る場合の対処

深層学習で画像認識系のタスクを解くとき、画像データセットに対する augmentation が重要となる場合が多いです。ランダムクロップ、フリップ、リサイズ、回転、ブラーリング等々。このような定型的な処理をする際、私は Albumentations をよく使います。Git…

pandas.Series を使うときには index に注意しよう

Python でデータ分析をする際、pandas.DataFrame を基本的な道具として使うことは多いと思います。また、DataFrame の各カラムは pandas.Series で自然に表現されており、新しいカラムを Series として書いた上で、DataFrame に追加することもあるでしょう(…

重複あり名前リストから、スコア順に上位N人を取得しランキングを作成する(numpy.unique)

重複を含む配列があり、各々の要素に対してスコアが付随している時、スコアの大きい順に最大 N 個のユニークな要素を取得してランキングを作成する、というのを numpy.unique を使ってやる小ネタです。

cv::Mat を protocol buffer に格納する (C++ で OpenCV & protobuf)

この記事では、C++ で OpenCV を使いつつ、cv::Mat に格納されたバイナリデータを protocol buffer に格納しシリアライズする方法を書いていきます。画像認識系のアルゴリズムを作る際、カメラデバイス上では C++ を使ってフレームを取得し、サーバ上の Pyth…

メモ:行列式の補題(matrix determinant lemma)

論文を読んでいて matrix determinant lemma の証明が思い浮かばなかったのでメモ(情けない。。)。内容としては、適当な次元の単位行列 と、それと同じ次元のベクトル に対して \begin{equation} \det(I+uv^T) = 1 + v^Tu \end{equation}が成り立つ、とい…

Mac のターミナル上で docker コンテナにて作業をすると勝手に折り返されたり表示がおかしくなる現象の対処

Mac で iTerm などを使ってターミナルを開き、(SSH 経由でサーバ上の)docker コンテナをおもむろに立ち上げた際、 設定されているはずの列数よりもかなり少ないところで表示が折り返されてしまい、画面上で長めのコマンドを打つのが難しくなる Python コン…

TensorFlow Probability で VAE (Variational AutoEncoder): TFP 入門所感、tfp.distributions の初歩

最近になり、TensorFlow の肩に乗って確率的プログラミングをするためのライブラリ TensorFlow Probability (TFP) v0.5 がリリースされました。私は画像系タスクを TensorFlow を使って解くことが多く、特にこの記事では、画像生成系タスクに取り組むための…

多変数クラメル・ラオの不等式の証明(フィッシャー情報量の意味づけの一つ)

統計学の分野で、クラメル・ラオ (Cramer-Rao) の不等式と呼ばれる有名な式があります: \begin{equation} V(t(z)) \geq \frac{1}{I(\theta)}. \end{equation}ここで は確率変数で、一つのパラメータ で指定される確率分布 に従って生成されると仮定します。…

julialang でカルマンフィルタを書く

最近カルマンフィルタの勉強を少ししており、行列を含む数式を素直にプログラムできる言語があるといいなと感じていました。Python を長年書いてきたものの、毎回 numpy.array を用意したり numpy 関数を呼んだりするのが少し面倒になってきました。そこで今…

multiprocessing で tfrecord 作成を高速化する話

お久しぶりです。TensorFlow でモデル学習をする際、便利に使われるのがtf.dataAPI です。以前はtf.contribで提供されていましたが、非常に使い勝手の良い機能だったこともあり、現在は独立したモジュールとして存在しています。様々な形式のデータ入力に対…

Python 機械学習コードを Cython でラップして C/C++ から使う

お久しぶりです。吉田弁二郎です。Cython という便利なトランスパイラ(言語と言語の中間にある言語のようなもの)があります。Python ライクな文法で書ける Cython スクリプトは C/C++ コードに変換・コンパイルされた後に Python から呼び出し可能で、C/C+…

Python の defaultdict には注意しよう

こんにちは。Python には標準的なデータ型に加えていくつかの便利な型が用意されています。特に collections モジュールには、以前記事に書いた deque や、今回取り上げる defaultdict が格納されています。通常、辞書型のデータ d にデフォルト値を設定しな…

SQLAlchemy + PostgreSQL で Upsert を行う(ユニークキーに重複があるデータのバルクインサート)

こんにちは。吉田弁二郎です。タイトルにある Upsert とは、Update or Insert のことです。あるテーブルにデータを insert しようとするとき、ユニーク制約が効いているキーが過去データのものと重複して insert できない場合、update に切り替える処理のこ…

Python のリスト操作は collections.deque が速い

こんにちは。吉田弁二郎です。先日タスクスケジューラを Python で実装することがあり、深さ優先探索の方針で作業を進める必要がありました。その際、リストの先頭からデータを取り出し先頭にデータを入れる、ということをやったのですが、デフォルトの list…

Pandas メジャーアップデート(0.20.1)の要点〜高速 I/O、集約関数強化など

こんにちは。吉田弁二郎です。先日(5月5日)、pandas の最新版 0.20.1 がリリースされました。agg/transformメソッドがgroupbyしなくても使えるようになり、10倍以上高速な I/O を実現する feather-format が(試験的に)導入され、スライスの際に頻繁に利…

GPU 版 TensorFlow 環境を AWS 上にコマンド一発で立ち上げるスクリプトを書きました

こんにちは。吉田弁二郎です。 前置き 最近、TensorFlow のインストールは pip により簡単にできるようになりました。一方で GPU 環境の整備(CuDNN の準備等)が相変わらず面倒だと思うことも多く、GPU 自体の進歩も早いのでオンプレ環境に手を出すのも少し…

conda の環境名に応じて ipython / jupyter notebook の起動時読み込みライブラリを変更させる

こんにちは。吉田弁二郎です。ipython コンソールや jupyter notebook をお使いの方は、起動時の自動処理設定ができることをご存知かもしれません。具体的には、 ~/.ipython/profile_default/startupに置かれたスクリプトが起動時に自動的に読み込まれます。…

pyenv 環境下で Anaconda を使う際、source activate が落ちる現象の対処法

こんにちは。吉田弁二郎です。だいぶ間が空いてしまいました。小ネタの紹介です。Python 実行環境を管理するために pyenv を使う方も多いのではないかと思います。私は Anaconda のバージョンを複数入れるのに使っています。ところが、 conda create -n new_…

Python 使いのための、Python と Ruby の違い(基本文法)

こんにちは。吉田弁二郎です。今回は、web 開発の主力言語の一つとなっている Ruby の文法について、Python との違いをまとめます。文法の完全な紹介を目指すのではなく、特に紛らわしい項目の差分に注目していきます。そのため、Ruby 独自の文法的な事項(m…

pandas で pivot_table が機能しない場合の対処(DataError: No numeric types to aggregate)

こんにちは。吉田弁二郎です。Python でデータ分析をする際には pandas を使うのが標準的です。特に、通常はデータを横持ちで格納しているDBから抽出してクロス集計をするというような時には、pandas.pivot_table を使うと便利ですね。最近この関数がうまく…

混合ポアソン分布を題材に、変分ベイズ法を理解する④

こんにちは。吉田弁二郎です。有給消化中です。前回、混合ポアソン分布に対して変分ベイズ法を適用し、実際に学習が行われた様子を見ました。 yoshidabenjiro.hatenablog.comところで、推定した分布が真の分布とどの程度異なっているのか、やはり定量的に把…

混合ポアソン分布を題材に、変分ベイズ法を理解する③

明けましておめでとうございます。吉田弁二郎です。前回の記事yoshidabenjiro.hatenablog.comで、混合ポアソン分布の変分ベイズ更新式を導出しました。今回は、これらを実装してアルゴリズムの動作を確認していきます。