Javascriptで正規分布の実装まとめ(乱数、累積分布関数など)

Javascriptで正規分布の乱数発生(rnorm)、確率密度関数(dnorm)、累積分布関数(pnorm)、累積分布の逆関数(qnorm)を実装する(逆関数は参照で)。すべて標準正規分布を想定。 Javascriptに限らず使えるアルゴリズムだが、日本語でまとまっている情報があまりないのと、ブラウザ上でA/Bテストなど有意性をみる検定などできたら面白いということでJSでやってみる。 正規乱数の生成(rnorm) 1行でBox-Muller法で。 Box-Muller法とは? $$X_1, X_2 \stackrel{i.i.d.}{\sim} {\rm Unif} (0, 1) $$ とするとき $$Y_1 = \sqrt{-2 \log{X_1}} \cos{2 \pi X_2} $$ $$Y_2 = \sqrt{-2 \log{X_1}} \sin{2 \pi X_2} $$ で生成される $$Y_1, Y_2 \stackrel{i.i.d.}{\sim} {\rm N} (0, 1) $$ というもの。 今回は1個の正規乱数でいいので、$Y_1$か$Y_2$の一方を採用すればいい。 Javascriptで実装 function rnorm(){ return Math.sqrt(-2 * Math.log(1 – Math.random())) * Math.cos(2…

Continue reading →

linuxのテキスト編集(vi, sed, tr, grepなど+xargs)まとめ

linuxなどで使うテキスト編集コマンドの使い方で、これさえ知っていればOKというもののまとめ(vi, sed, grep, sort, uniq, cut, join, tr, nkf, diff)。 後半は特に必要とはいえないため適当。重要なのはvi, sed, grepまでかな。 複数のファイルを扱う場合に使うxargsコマンドについても説明する。 vi ※(数指定)のついているものは、コマンドの前に数を指定することで指定された数だけ該当する操作を行える。 (6hで6字分左に移動) コマンドモードと入力モード コマンドモード→入力モード i: カーソルの直前に挿入(insert) I: カーソル行の最初に挿入 a: カーソルの直後に挿入(add) A: カーソル行の最後に挿入 o: カーソルの下の行に挿入 O: カーソルの上の行に挿入 入力モード→コマンドモード: ESC 移動 (ちょうど右手のホームポジション) h: 左(数指定) j: 下(数指定) k: 上(数指定) l: 右(数指定) (ページ移動) Ctrl-b: PgUp(back) Ctrl-f: PgDn(forward) (行内) ^: 行頭(正規表現) $: 行末(正規表現) (行指定) Ctrl-g: 現在の行表示 G: 最終行 数字G: 指定行に移動 コピー、カット、ペースト x: 文字削除(数指定) …

Continue reading →

PostgreSQLの管理系コマンドまとめ

DBの管理系コマンドは導入専門にやっていれば忘れることはないのだが、 分析目的でちょっとインストールした場合など、そんな頻繁に設定しない場合は忘れてしまう。 そんなPostgreSQLの管理コマンド、ユーザ管理など意外と落とし穴があるので復習しておく。 導入手順は インストール データベースディレクトリの作成(initdbコマンド) 起動(pg_ctlコマンド) ユーザの登録(createuserコマンド) データベースの作成(createdbコマンド) データベースの権限管理 という順になる。 pg_ctlコマンド 起動、停止などのコマンド。 postgresユーザでないと実行できない。 pg_ctl start -D データディレクトリ pg_ctl stop -D データディレクトリ pg_ctl restart -D データディレクトリ その他管理コマンド initdb データディレクトリの生成。これがないと起動もできないし、データベースも作成できない。 新しく作るデータベースのデフォルトエンコーディング、ロケール(通常不要)を指定できる initdb initdb データディレクトリ initdb -E SQL_ASCII –no-locale データディレクトリ データディレクトリを指定しない場合、環境変数PGDATA=/var/lib/postgres/dataの値…

Continue reading →

Perlのよく使うワンライナー(テキスト処理)

今や懐かしいPerlのワンライナー。 古くなったとはいえ、ちょっとした、でもsedコマンドだけではできないような複雑なテキスト加工処理(CSVファイルも)には適している。 いろいろオプションはあるのだが、最小限に絞って備忘録的に。 よく使うオプション 基本 -e ‘スクリプト’: 実行するPerlスクリプトを指定(1行) perl -e ‘print “Hello”‘ output: Hello 入力が前提 -l:(入力から改行を取り除いたうえで最後に)出力結果を改行する。表示制御の目的で使われることが多い。データ加工の際は使わないほうが安全(使うとしても最後の処理として)。 perl -le ‘print “Hello”‘ output: Hello -n:ファイルを読み込んで1行ずつ(whileで)処理する。行の内容は特殊変数$_に格納される。 perl -ne ‘func’ file は perl -e ‘open(FILE, “< file”); while(<FILE>) { func($_); }’ と同じことになる。 perl -ne ‘print $.”: “.$_’ rand.txt output: 1: 9 2: 4 3: 13 4: 53 5: 45 -p:-nに加えて結果の$_をprintする。sed -eみたいなことをするときに使う。 p…

Continue reading →

ITP2.1の影響と対策方法、JavaScript生成cookie7日問題

iOS12.2以降で搭載されるSafari12.1からITP2.1が導入される。 「Googleアナリティクスのcookieが使えなくなるのではないか」などの漠然とした不安が先行しているようなので、その要点と影響範囲、対策方法をまとめた。 ITP2.1とは 対象の環境 ブラウザSafari12.1以降 このSafariを搭載する対象OSはiOS 12.2/mac os 10.13以降 これまでのITP(2.0以前)からの更新内容 トラッカー認定されたcookiesがすぐ無効化される トラッカー認定されたcookieは以前は通常利用できない別にところに置いておかれた(partitioned cookie)が、ITP2.1ではそのような特別扱いがなくなり、トラッカー認定されたcookiesがすぐ無効化されるようになる。つまりcookieの扱いが単純化された(一本化された)ということ。 JavaScriptが扱えるcookieが7日間までしか使えなくなる これまでcookieは半永続的に有効期限を設定することができていたが、ITP2.1ではSecure属性とHttpOnly属性のないcookieの有効期間が7日間になる。 二つの属性のうちHttpOnly属性はJavaScriptから生成することができず、サーバから(HTTP通信で)しか設定できない。つまりJavaScriptが生成できる…

Continue reading →

Googleアナリティクスの計測ログをBigQueryに送る(無料版対応)

この記事は連載「アクセスログの生ログ分析」の全 5 ページ中 5 ページ目です。

Googleアナリティクスで収集しているデータ(メジャメントプロトコル)をBigQueryに送り、集計・可視化できるようにする。無料版のGAにも対応し、しかもサーバレスでシンプルに実装できる。 本来BigQueryを使ったウェブ行動の詳細分析はGA360を使うべきなのだが、限りなく低コストでこんなことができるという参考程度で紹介する。 通常無料版のGoogleアナリティクスではできないログベースの行動分析をするのに使ったり、有料版であったとしてもGAはどのようなトラフィックを除外して集計しているのか、Googlebotなどのクローラがどんな動きをしているのかなどを検証するのに使うといいかもしれない。 原理はGoogleアナリティクスのJavaScriptがGoogleの計測サーバに送っているパケットを自前のサーバに送ってログ化するというシンプルなものである。 従来はデータ収集用のサーバを構築する必要があったが、Google Cloud Storageを使うことでサーバをわざわざ立ち上げなくても不要ログ収集ができる。 Google Cloud Storageは単にストレージだけでなく、インターネットにコンテンツを配信する簡単なCDNとして使うことができるうえ、設定によってログを出力することができる。そこでGCS上にwebビーコンつまりは空のGIF画像を設置しておいて、そこにオーディエ…

Continue reading →

Rのdata.tableパッケージの使える関数一覧

Rのdata.tableはデータフレームを高速に扱えるように改良した形式だが、この機能を提供するdata.tableパッケージには添え字を使ったdata.tableの処理機能だけでなく、さまざまな関数が実装されている。 中にはdata.table以外の形式にも使える関数もあり、 dt[,col1:=関数()] の形式で使えるdata.table用の関数にも一般的に知られていない便利なものが数多くある。 特に高速化を意識しているものが多く、知っていると処理時間を短縮できる。 data.tableはdplyrとセットで使われることも多いが、dplyr自体はdata.tableの高速仕様にのっとったものではない(tibble形式)ため、正直遅い。 集計など同じアウトプットは出せるが、処理速度に断然違いがあるので、実はdata.tableパッケージを使いこなすのがオススメ(コード自体はdplyrに準拠したほうが読みやすいが) data.tableのマニュアルの全関数を精査し、一般的に使えそうなもののみをピックアップしてまとめた。 ファイル入出力 ファイルを読み込んでdata.tableを生成するfread()関数 data.tableだけでなくデータフレームもCSVファイルに出力できるfwrite()関数 dt1 <- fread(‘data.csv’) fwrite(dt1, fi…

Continue reading →

Rのおすすめパッケージ2019年版

Rのおすすめパッケージをアップデートしてまとめた。定番の分析手法をはじめ、可視化やデータ処理に便利なものなど、幅広く紹介した。中にはマストというものもあるし、意外と知られていないがインストールしておくと便利なものまで、使い方の例も挙げて説明している。 ミドルウェア的なレイヤーのライブラリ(must) curl ファイルをwebからダウンロードするときに使う。 データファイルやパッケージのダウンロードが発生する処理で内部的に使われるライブラリで、他のパッケージのインストールの際に同時にインストールされることが多く、意識されることは少ないパッケージ。たまに依存関係の問題でも解決されずに未インストールの場合があるので、明示的にインストールする必要がある。 read.csv(‘https://…’) などのために必要。 devtools GitHubからのインストールなど。ほとんどがGitHubからのインストールで使う ほとんどがこの使い方 devtools::install_github(‘アカウント名/リポジトリ名’) doParallel 簡単な並列処理のためのラッパー。並列処理にはこのライブラリの関数群を使っておけばいい。 使い方の例 registerDoParallel(detectCores()-1) foreach( i = 1:nrow(tune_params), .v…

Continue reading →

Rを使ったXGBoostの高度なパラメータチューニングと細かいノウハウ

XGBoostは機械学習手法として 比較的簡単に扱える 目的変数や損失関数の自由度が高い(欠損値を扱える) 高精度の予測をできることが多い ドキュメントが豊富(日本語の記事も多い) ということで大変便利。 ただチューニングとアウトプットの解釈については解説が少ないので、このあたりについて説明する。 XGBoostとは? 勾配ブースティングのとある実装ライブラリ(C++で書かれた)。イメージ的にはランダムフォレストを賢くした(誤答への学習を重視する)アルゴリズム。RとPythonでライブラリがあるが、ここではRライブラリとしてのXGBoostについて説明する。 XGBoostのアルゴリズム自体の詳細な説明はこれらを参照。 https://zaburo-ch.github.io/post/xgboost/ https://tjo.hatenablog.com/entry/2015/05/15/190000 グラフィカルな説明 http://arogozhnikov.github.io/2016/06/24/gradient_boosting_explained.html この記事では具体的なライブラリの使い方を中心に説明する。 2値分類だけでなく、連続量の回帰分析、多クラス分類、ポアソン回帰、Cox回帰(生存時間分析)などにも対応している。 データセットと前処理 House Sales…

Continue reading →

機械学習用のサーバの環境構築メモ(特にGCEやEC2などクラウドインスタンス)

最近では機械学習の計算のためにサーバを構築しては消し、を繰り返すことが多い。サーバの構築と消去が柔軟に可能なことからもEC2やGCEなどクラウドのインスタンスをよく使うということも影響している。 この記事では一般的なサーバ構築の記事では紹介されていない、クラウドのインスタンスで意外と盲点になる点を中心に、機械学習の計算用サーバとして安定した運用をするために最低限必要な設定をまとめた。 Linuxで最初にやっておくべき設定 Amazon EC2やGoogle Compute Engingなどのクラウドインスタンスのデフォルトの設定では不都合があるため、設定を追加する必要がある。 スワップメモリの設定 クラウドのインスタンスではデフォルトでスワップメモリが設定されていないため、念のため設定しておく必要がある。 RHEL6(CentOS6)以前、Amazon Linuxもこちら sudo sh -c ‘fallocate -l 4040132k /swap.img && chmod 600 /swap.img && mkswap /swap.img && swapon /swap.img’ RHEL7(CentOS7)以降 sudo sh -c ‘dd if=/dev/zero of=/swap.img count=4096 bs=1MiB…

Continue reading →