buq’s blog

覚えておきたいけど覚えておけなさそうなことを書きます?

macOS のシェルで並列処理

気持ち

  • macOS のシェルで並列処理をしたい.
  • CPUの同時利用数は制限したい
  • コマンドの使い方をなるべく覚えたくない(忘れるので)

やったこと

GNU parallel を使う. これはいろんなことができるらしいが,細かいことは絶対に覚えられないので面倒でもユニバーサルに対応できる次の方法で対応する

まずやりたい処理を次のようにファイル ( cmd.txt ) に書き出す.

cmd1 ; cmd2; cmd3 # cmd1 ~ 3 をひとまとめにし,直列で動かしたい.
cmd4; ccmd 5
cmd6; cmd 7

各行がひとつの処理のまとまりである.

以下のコマンドで,「同時に2ジョブ ( -j 2 ) までを走らせ,まとまり単位で並列に処理する.まとまりの中では,直列に処理する」ことができる

cat cmd.txt | parallel -j 2 -u

-u は,出力を parallel で貯めないでリアルタイム垂れ流すオプション(cmd1, cmd2 の結果の行が混在することになる.嫌なら,-u を外す)

もちろんcat を使いたくないなら,echo でも同じことができる

echo """
cmd1 ; cmd2; cmd3
cmd4; ccmd 5
cmd6; cmd 7
""" | parallel -j 2 -u

GCE上でWordPressを立ててhttps接続できるようにする

前提

GCE上でWordPress

  • Marketplace にあるので,作る
  • 固定IP化しておく(IP を エフェメラルから静的に変える)

https接続

MacBook (Retina, 12-inch, 2017) で 4K@60Hz の外部ディスプレイを使う

MacBook (Retina, 12-inch, 2017) で 4K@60Hz の外部ディスプレイを使いたい.使えた.

課題整理 Mac で 4K ディスプレイ、5K ディスプレイ、Ultra HD TV を使う - Apple サポート
  • 4K@60Hz は DisplayPort でしか出力できない
    • macOS Sierra を搭載した MacBook (2015 以降) は、DisplayPort 接続で 60 Hz の出力で、4K (3840 x 2160) ディスプレイに対応します。

  • HDMI では 4Kは30 Hzまで

    • MacBook (2015 以降)、(中略) HDMI 1.4b 接続で以下の解像度とリフレッシュレートに対応します。最大 1080p (60 Hz) 3840 x 2160 (30 Hz)

  • usb-c ポートは1つしかないので,アダプタは Mac への電源供給と DP 出力を同時にこなせるものである必要がある.

やり方
補足

重なりが激しく点数がおおい複数色 scatter はあとでプロットされたほうが優勢に見えちゃう問題

重なりが激しく点数がおおい複数色 scatter はあとでプロットされたほうが優勢に見えちゃう問題というのがあるが,kdeplot で線を細めにするとなんとかなるかもしれない.

python - Seaborn pairplot off-diagonal KDE with two classes - Stack Overflow

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")

g = sns.PairGrid(iris, hue="species", hue_kws={"cmap": ["Blues", "Greens", "Reds"]})
g = g.map_diag(sns.kdeplot, lw=3)
g = g.map_offdiag(sns.kdeplot, lw=1)

plt.show()

parquet-cpp

macOS High Sierra で parquet-cpp のコンパイルでつまったのでメモ

やったこと:

  1. xcode をアップデート. xcode を起動して,もろもろがアップデート&インストールされる.
  2. brew で bison と flex をアップデート
  3. 新しい bison と flex が使われるように export export PATH=/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH
  4. あとは公式の手順通り.(cmake とかに失敗したあとのディレクトリでやるといろいろゴミがたまってたりするので, しっぱいしたらまず最初に git clean -fd とかするとよい)

pandas の df (というか series) でカラムをフィルターするには isin

stackoverflow.com

isin というのが強いっぽい

value_list = ['a', 'abc', 'panda'] 
df[df['col_name'].isin(value_list)]
rpt[rpt['STK_ID'].str.contains(r'^600[0-9]{3}$')] # ^ means start of string

これは意味分かるけど syntax どうなってるんだろう.str が Series のメンバオブジェクトであり,親か生の配列へのポインタをもってるってことかしら?

sinhrks.hatenablog.com

str アクセサと呼ばれているらしい.

メモ:Bosch Production Line Performance Competition で使われたアルゴリズム

blog.kaggle.com

から抜粋してメモ.

1. Ankita Mangal & Nishant Kumar

カテゴリカル変数が 2k 個と多く, one-hot representation してそのまま学習は辛い
→ Follow the Regularized Leader (FTRL) algorithm (何これ) を使って, 2k 個のカテゴリカル変数の代わりに,カテゴリカル変数から予測される確率の予測値を使う
(2k 次元を一気に削減できてしまっているが,なんでこんなことして良いんだろうか)

そのあと xgboost で 200個の変数を選び,最後に 200 変数の問題を xgboost で解く.

2. Abhinav Maurya

anomaly detection だから supervised learning だと思うと very imbalanced.

Gradient Boosting Machine を使うのだが,正例,負例の imbalance を解消するために weight を Bayesian optimization でいい感じにする.
※ 今回は Matthew’s Correlation Coefficient (MCC) をスコアとして競っていたので,MCC を直接測って Bayesian optimization した. MCCって何か知らないけど1次元だし Bayesian opt で問題はきっとないんだろう.

3. Bohdan Pavlyshenko

あんまり何言ってるかよくわからなかった. - logistic regression で見るべき特徴量を調べた - "Using Bayesian model, it is possible to receive the statistical distribution of model parameters, which can be used in the risk assessment analysis" (?) - パラメタとサンプルを変えて xgboost 予測結果を複数 (say, N) 出し, N カラムを特徴量として linear model or Baysian model (ここでいうbayesian model って何だろう) を作る