CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: Optuna で決められた時間内で最適化する

今回は Optuna の便利な使い方について。 現行の Optuna (v0.19.0) には決められた時間内で可能な限り最適化したい、というニーズを満たす API が実装されている。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.6 BuildVe…

Python: featuretools ではじめる総当り特徴量エンジニアリング

今回は featuretools というパッケージを用いた総当り特徴量エンジニアリング (brute force feature engineering) について書いてみる。 総当り特徴量エンジニアリングは、実際に効くか効かないかに関係なく、考えられるさまざまな処理を片っ端から説明変数…

Python: 未処理の例外が上がったときの処理をオーバーライドする

今回はだいぶダーティーな手法に関する話。 未処理の例外が上がったときに走るデフォルトの処理をオーバーライドしてしまう方法について。 あらかじめ断っておくと、どうしても必要でない限り、こんなことはやらない方が望ましい。 とはいえ、これによって助…

Python: 関数合成できる API を作ってみる

今回は普通の Python では満足できなくなってしまった人向けの話題。 dfply や pipe といった一部のパッケージで採用されているパイプ処理や関数合成できる API を作る一つのやり方について。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X Produ…

Python: dfply を使ってみる

R には、データフレームを関数型プログラミングっぽく操作できるようになる dplyr というパッケージがある。 今回紹介する dfply は、その API を Python に移植したもの。 実用性云々は別としても、なかなか面白い作りで参考になった。 使った環境は次の通…

子供が生まれました

このブログには、まれに技術系でないことも書くことがあり、今回もそれにあたります。 私事で恐縮ですが、先日子供が生まれました。 今のところ、健康に生まれて、順調に育っているようです。 この点は、本当に良かったと思います。 一方で自分自身に目を向…

Python: Optuna の LightGBMTuner で Stepwise Tuning を試す

先日の PyData.tokyo で発表されていた Optuna の LightGBMTuner だけど v0.18.0 でリリースされたらしい。 まだ Experimental (実験的) リリースでドキュメントも整備されていないけど、動くみたいなのでコードを眺めながら試してみた。 github.com LightGB…

Python: 広義の Target Encoding と Stacking は同じもの (と解釈できる)

おそらく、既に分かっている人には「知らなかったの?」とびっくりされる系の話なんだろうけど、今さら理解したので備忘録として残しておく。 結論から書くと、目的変数を用いた特徴量生成を広義の Target Encoding と定義した場合、Target Encoding と Stac…

trap コマンドを使ったシェルスクリプトのエラーハンドリング

今回は、シェルの組み込みコマンドの trap を使ったシェルスクリプトのエラーハンドリングについて。 シェルの組み込みコマンド trap は、特定のシグナルやコマンドの返り値が非ゼロとなったときに実行する処理を指定できる。 trap コマンドは、次のようにし…

Python: Target Encoding のやり方について

データ分析コンペでは Target Encoding という特徴量抽出の手法が用いられることがある。 Target Encoding では、一般的に説明変数に含まれるカテゴリ変数と目的変数を元にして特徴量を作り出す。 データによっては強力な反面、目的変数をエンコードに用いる…

Python: sklearn-pandas で scikit-learn と pandas の食べ合わせを改善する

Python を使った機械学習でよく用いられるパッケージの scikit-learn は API の入出力に numpy の配列を仮定している。 そのため、データフレームの実装である pandas と一緒に使おうとすると、色々な場面で食べ合わせの悪さを感じることになる。 今回は、そ…

Re:VIEW で書いた本に記載するコマンドライン操作をテストする方法について考えた

今回は、Re:VIEW で記述している技術書に記載するコマンドライン操作がちゃんと動くか確認する方法について考えてみた話。 このエントリでは、コマンドライン操作を記述しているテキストファイルをシェルスクリプトに変換して実行する方法を提案する。 なお…

Docker のマルチステージビルドで自前でビルドした Wheel を含むイメージを作る

今回は Docker のマルチステージビルドを使って Wheel が提供されていない Python パッケージを含む Docker イメージを作ってみる。 これだけだと、なんのこっちゃという感じなので、以下で前提から説明しておく。 まず、今の Python のパッケージングにはソ…

macOS (x86/x86-64) のシステムコールをアセンブラから呼んでみる

今回は、表題の通り x86/x86-64 の macOS でシステムコールをアセンブラから呼んでみる。 ただし、前回のエントリで FreeBSD についても同じようにシステムコールをアセンブラから呼んだ。 macOS は BSD を先祖に持つ XNU カーネルで動いている。 そのため、…

FreeBSD (x86/x86-64) のシステムコールをアセンブラから呼んでみる

今回は、表題の通り x86/x86-64 の FreeBSD でアセンブラからシステムコールを呼んでみる。 システムコールは、OS (ディストリビューション) のコアとなるカーネルがユーザ空間のプログラムに向けて提供しているインターフェースのこと。 ファイルの入出力な…

GNU/Linux (x86/x86-64) のシステムコールをアセンブラから呼んでみる

今回は、表題の通り x86/x86-64 の GNU/Linux でシステムコールをアセンブラから呼んでみる。 システムコールは、OS (ディストリビューション) のコアとなるカーネルがユーザ空間のプログラムに向けて提供しているインターフェースのこと。 なお、アセンブラ…

python-livereload で Re:VIEW の執筆を捗らせてみる

普段、Sphinx でドキュメントを書くときは sphinx-autobuild というツールを使っている。 このツールを使うと、編集している内容をブラウザからリアルタイムで確認できるようになる。 blog.amedama.jp 今回は、上記のような環境が Re:VIEW でも欲しくて pyth…

デジタル出版システム Re:VIEW を使ってみる

書籍の執筆環境として、最近は Re:VIEW の評判が良いので試してみることにした。 しばらく使い込んでみて良さそうだったら、既存の Sphinx の環境から移行するのもありかもしれない。 もちろん Sphinx もドキュメントを書くには良いツールなんだけど、はじめ…

返り値のチェックでシェルスクリプトが止まらないようにする

シェルスクリプトで set -e しておくとコマンドの返り値が非ゼロ (エラー) のときにスクリプトを止めることができる。 この機能を使うと、コマンドの実行結果がエラーになった状態で処理が突き進んでしまうことを防止できる。 ただ、この機能は便利な反面、…

色々な Unix 系 OS の crypt(3) について調べたら面白かった話

今回は、色々な Unix 系 OS の crypt(3) について調べたら、過去の経緯などが分かって面白かったという話について。 crypt(3) というのは、標準 C ライブラリの libc ないし libcrypt で実装されている関数のこと。 調査した Unix 系 OS というのは、具体的…

続: Docker コンテナ内で Docker ホストと同じユーザを使う

以前、Docker コンテナ内で Docker ホストと同じユーザを使う方法として、以下のような記事を書いた。 ちょっと強引だけど /etc/passwd と /etc/group をコンテナからマウントすることで不整合をなくしてしまう、というもの。 blog.amedama.jp ただ、上記の…

OpenSSH の秘密鍵から公開鍵を復元する

OpenSSH だと公開鍵がなくなっても秘密鍵から復元できることを知った。 今回はそれを試してみる。 使った環境は次の通り。 $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.3 L…

NVIDIA Container Toolkit を使って Docker コンテナで GPU を使う

今回は NVIDIA Container Toolkit を使って Docker コンテナから Docker ホストの GPU を使う方法について書く。 これまで Docker コンテナで GPU を使う方法は、nvidia-docker と nvidia-docker2 という二つの世代を経てきた。 それも、ここに来てやっと一…

リモートサーバ上の Docker コンテナで JupyterLab を使う

今回のエントリは、以下のエントリの改訂版となる。 起動するアプリケーションを Jupyter Notebook から JupyterLab にすると共に、いくつか変更を加えた。 blog.amedama.jp JupyterLab は従来の Jupyter Notebook を置き換えることを目的とした後継プロジェ…

Docker コンテナ内で Docker ホストと同じユーザを使う

Docker コンテナで Docker ホストのボリュームをマウントすると、パーミッションの問題が生じることがある。 これは、ホストで使っているユーザとコンテナで使っているユーザで UID と GID の不一致が起こるため。 今回は、それらの問題を解決する方法の一つ…

リモートサーバ上の Docker コンテナに X11 Forwarding する

リモートにあるサーバで動かしている Docker コンテナ上の X アプリケーションの GUI をローカルのマシンから確認したいと思った。 そこで、Docker コンテナとローカルマシンの間で X11 Forwarding してみることにした。 やってみると意外と手間取ったので記…

Ubuntu 18.04 LTS の APT で高速なミラーリポジトリを使う

Vagrant や Docker のイメージの中には APT のリポジトリが決め打ちになっているものがある。 高速なミラーリポジトリが使えないとアップデートが遅くて作業に難儀することになる。 今回は、そんなときの解決方法について。 使った環境は次の通り。 $ cat /e…

Python: Keras で AutoEncoder を書いてみる

今回はニューラルネットワークのフレームワークの Keras を使って AutoEncoder を書いてみる。 AutoEncoder は入力になるべく近い出力をするように学習したネットワークをいう。 AutoEncoder は特徴量の次元圧縮や異常検知など、幅広い用途に用いられている…

Python: pandas のデータ型をキャストしてメモリを節約してみる

pandas の DataFrame は明示的にデータ型を指定しないと整数型や浮動小数点型のカラムを 64 ビットで表現する。 pandas の DataFrame は、表現に使うビット数が大きいと、メモリ上のオブジェクトのサイズも当然ながら大きくなる。 そこで、今回は DataFrame …

Python: LightGBM で学習済みモデルを自動で永続化するコールバックを書いてみた

ニューラルネットワークを実装するためのフレームワークの Keras は LightGBM と似たようなコールバックの機構を備えている。 そして、いくつか標準で用意されているコールバックがある。 keras.io そんな中に ModelCheckpoint というコールバックがあって、…